みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access クエリ このレコードセットは・・・

いつもお世話になります。

Accessで下記の様にクエリを作成しましたが、”このレコードセットは更新できません”と出てしまいます。

■テーブル1
 ・顧客ID(主キー)
 ・顧客名
 ・住所
 ・TEL

■テーブル2
 ・顧客ID
 ・取引ID(主キー)
 ・請求金額

■クエリ1(集計クエリ)
 ・顧客ID グループ
 ・請求金額合計: Sum(請求金額) 合計

■クエリ2(実際に使用するクエリ)
 ・顧客ID(テーブル1)
 ・顧客名(テーブル1)
 ・住所(テーブル1)
 ・TEL(テーブル1)
 ・請求金額合計(クエリ1)

このクエリ2を開いて更新しようとしても、”このレコードセットは更新できません”と左下に表示されて更新できません。

・請求金額合計(クエリ1)を除けば問題なく更新できます。

ですが1顧客に対して通算で幾ら請求をしたかとその顧客のデータを同一クエリで表示・更新したいので、意味をなさなくなってしまいます。

どなかた良い方法をご教授下さいませ。

投稿日時 - 2012-02-15 17:24:30

QNo.7306862

すぐに回答ほしいです

質問者が選んだベストアンサー

> 1顧客に対して通算で幾ら請求をしたかとその顧客のデータを
> 同一クエリで表示・更新したい

「『請求合計金額』は参照のみ、それ以外は更新可」ということ
でしたら、『請求合計金額』を、「定義域集計関数を使用した
演算フィールド」としてしまう、というのはいかがでしょうか。
これであれば、クエリ1を使用する場合に比べ、動作が遅くは
なりますが、テーブル1の各フィールドの編集は可能になります。

■クエリ2
 ※使用するのはテーブル1のみ、クエリ1は使用せず※
 ・顧客ID(テーブル1)
 ・顧客名(テーブル1)
 ・住所(テーブル1)
 ・TEL(テーブル1)
 ・請求金額合計(以下の式を指定)
  『フィールド:』欄:DSum("請求金額", "テーブル2", "[顧客ID]=" & [顧客ID])
  『テーブル:』欄: (空白にします)

注意:
万が一、顧客IDのデータ型が数値型ではなくテキスト型だった場合は、
以下の式としてください:
  『フィールド:』欄:DSum("[請求金額]", "テーブル2", "[顧客ID]='" & [顧客ID] & "'")

上記の「DSum」などの「定義域集計関数」の詳細については、
Accessのヘルプを参照してください。

なお、同関数の第3引数については、以下の過去のQ&Aを
参考として挙げておきます(No.4):
http://okwave.jp/qa/q6442713.html

投稿日時 - 2012-02-15 22:32:58

補足

ご回答ありがとうございます。

上記を参考に入力したのですが、

パラメーターの入力
顧客ID

と表示されてしまいます。

顧客ID毎に基本情報と請求金額の合計が出て、基本情報の編集ができるクエリを作りたいのですが・・・

お手数おかけして申し訳ございませんが、ご教授頂けないでしょうか。

投稿日時 - 2012-02-16 11:38:55

お礼

ご連絡遅くなり申し訳ありません。

おかげさまで問題なく動きました。

ありがとうございます。

投稿日時 - 2012-02-19 22:00:57

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

No.2です。

> 上記を参考に入力したのですが、
>
> パラメーターの入力
> 顧客ID
>
> と表示されてしまいます。

これは、DSum関数の第3引数の右辺側に指定した『顧客ID』と
いう名前のフィールドが、クエリの元になっているテーブル(今回の
例では『テーブル1』テーブル)に存在しない場合に発生します。
(ちなみに、左辺側が存在しないフィールド名だった場合は、クエリ
 のデータシートビューでのエラー表示になります)

ですので、『テーブル1』の各フィールドの名前と、第3引数の右辺
のフィールド名を、もう一度確認してみてください。
第3引数の右辺に正しいフィールド名が指定されれば、ご希望の
『顧客ID毎に基本情報と請求金額の合計が出て、基本情報の
編集ができるクエリ』になるはずです。

見直す際の観点としては、
 ・『顧客』と『ID』の間などに、スペースやアンダーバーが入ったり
  していないか
 ・誤変換や誤字がないか
などになるかと思います。
(一旦、元となるテーブルをデザインビューで開いて、当該フィールド
 の名前をCopyしてから、当該クエリをデザインビューで開いて
 上記関数の右辺に貼り付け、とするのもいいかもしれません)

※もしもクエリの「SQLビュー」を使ったことがあるようでしたら、
  デザインビューで当該フィールドを追加した後、SQLビューに
  切り替え、そこに表示されたフィールド名をCopy、が最も確実。

SQLビューは、デザインビューを表示した状態で、
 ・Access2003以前なら、メニューで「表示(V)→SQL ビュー(Q)」で、
 ・Access2007なら、『デザイン』リボンの左端の『結果』内にある
  『表示』ボタンの下にある『▼』をクリックして「SQL ビュー」選択
で、表示できます。
(Access2010は使用したことがありませんが、多分2007と同様)

 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

なお、前回の回答で、本文中の式で「請求金額合計:」の記述が
漏れていました(正しくはNo.2の添付画像の通り)。
お詫びの上、訂正させていただきます。

投稿日時 - 2012-02-16 22:06:10

集計したクエリを更新データに結合しているから無理だと思います。
テーブル1とテーブル2を結んで、顧客IDを重複表示する(請求金額は合計しない)か、
クエリ1をテーブル3として作成してからテーブル1とテーブル3を結びましょう。
考えてみるとわかると思いますが
請求金額を更新した場合、
どの元データを更新すれば良いのか判断できませんよね。
だから項目に請求金額を含むと更新できません。
クエリ1も更新できないですよね。
リレーションシップ(顧客ID同士を結ぶ)を使えば、重複データの片方を更新しても全てのレコードが更新されます。

投稿日時 - 2012-02-15 18:06:06

お礼

ありがとうございます。

Accessでは実現できないのでしょうか・・・

投稿日時 - 2012-02-16 11:31:27

あなたにオススメの質問