Accessクエリのレコードセット更新エラー

このQ&Aのポイント
  • Accessでクエリを作成し、クエリ2を更新しようとすると「このレコードセットは更新できません」というエラーが表示されます。クエリ1の請求金額合計を除くと更新はできますが、1顧客に対して通算の請求金額を表示・更新したいため、解決策を求めています。
  • Accessのクエリにおいて、クエリ2を更新しようとすると「このレコードセットは更新できません」というエラーメッセージが表示されます。クエリ1の請求金額合計を除くと更新はできますが、1顧客に対して通算の請求金額を表示・更新したいため、解決法を探しています。
  • Accessで作成したクエリ2を更新するとき、「このレコードセットは更新できません」というエラーメッセージが表示されます。クエリ1の請求金額合計を除くと更新できますが、1顧客に対しての請求金額を表示・更新したいため、解決方法を教えてください。
回答を見る
  • ベストアンサー

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

いつもお世話になります。 Accessで下記の様にクエリを作成しましたが、”このレコードセットは更新できません”と出てしまいます。 ■テーブル1  ・顧客ID(主キー)  ・顧客名  ・住所  ・TEL ■テーブル2  ・顧客ID  ・取引ID(主キー)  ・請求金額 ■クエリ1(集計クエリ)  ・顧客ID グループ  ・請求金額合計: Sum(請求金額) 合計 ■クエリ2(実際に使用するクエリ)  ・顧客ID(テーブル1)  ・顧客名(テーブル1)  ・住所(テーブル1)  ・TEL(テーブル1)  ・請求金額合計(クエリ1) このクエリ2を開いて更新しようとしても、”このレコードセットは更新できません”と左下に表示されて更新できません。 ・請求金額合計(クエリ1)を除けば問題なく更新できます。 ですが1顧客に対して通算で幾ら請求をしたかとその顧客のデータを同一クエリで表示・更新したいので、意味をなさなくなってしまいます。 どなかた良い方法をご教授下さいませ。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> 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

hiyoko3099
質問者

お礼

ご連絡遅くなり申し訳ありません。 おかげさまで問題なく動きました。 ありがとうございます。

hiyoko3099
質問者

補足

ご回答ありがとうございます。 上記を参考に入力したのですが、 パラメーターの入力 顧客ID と表示されてしまいます。 顧客ID毎に基本情報と請求金額の合計が出て、基本情報の編集ができるクエリを作りたいのですが・・・ お手数おかけして申し訳ございませんが、ご教授頂けないでしょうか。

その他の回答 (2)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.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の添付画像の通り)。 お詫びの上、訂正させていただきます。

noname#227991
noname#227991
回答No.1

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

hiyoko3099
質問者

お礼

ありがとうございます。 Accessでは実現できないのでしょうか・・・

関連するQ&A

  • Access2000 フォームからレコード検索

    Access2000で質問です。 「顧客テーブル」を作ります。 顧客テーブルには以下のフィールドを設けます。 顧客ID(主キー) 名前 TEL 住所 変更住所 顧客IDから住所まではすでにデータが入っています。 「変更住所」に新しくデータを入れていきます。 その際に、フォームを利用したいと思っていますが、 新規フォーム(何もデータが入っていない)に顧客IDを入れたら、すでに顧客テーブルに入力されている名前、TEL、住所がパッと表示され、変更住所だけが空欄で表示されるようなフォームを作りたいと思います。 どのような方法がありますでしょうか? ぜひお知恵を貸してください。よろしくお願いいたします。

  • ACCESSで一括レコード更新

    あるテーブルのレコードを、別のテーブルのレコードで更新したいです。具体的には、 二つのテーブルは同じフィールドを持っています。 フィールド名はID、名前、住所、電話で構成されています。 テーブルA  001 山田 東京 123456  002 田口 千葉 234567  003 鈴木 埼玉 345678  004 斉藤 佐賀 456789  005 上野 大阪 567890 テーブルB  003 鈴木 長野 345678  004 斉藤 佐賀 890123  008 野口 京都 090909 テーブルAとBでIDが一致するレコードだけテーブルAのレコード をそっくり入れ替えるにはどうしたらいいでしょうか。 この場合、003と004のレコードだけ更新します。 テーブルAのIDは主キーでオートナンバー型になっています。

  • Accessで1レコードごとの合計

    Office2kのAccessです。 超初級者です。よろしくお願いします。 マクロは使えません(>_<) 現在のテーブルの項目は、 ID、個人名、購入金額1 購入金額2 購入金額3 とあります。 1レコードごとの合計を表示させるにはどうしたらいいのでしょうか。 しかも、そのレコードの中でも、合計するのは特定の購入金額2と3だけです。 クエリーで合計を出せた気がするのですが、 列の合計だったような記憶がありまして・・・。 レコードごとのってできるのでしょうか? 説明不足でしたら、補足いたします。 お助けください。

  • ACCESSで複数テーブルのクエリ抽出

    ACCESSで複数テーブルのクエリ抽出 初めて投稿させてもらいます。 テーブル1・・・社員ID(主キー)、氏名 テーブル2・・・社員ID(重複キー有)、顧客ID テーブル3・・・社員ID(重複キー有)、得意先ID テーブル4・・・顧客ID、顧客氏名 テーブル5・・・得意先ID、得意先 上記のテーブル内容を1つのクエリで全部抽出するとき、 テーブル1の社員ID[a]とテーブル2の社員ID[a] と テーブル1の社員ID[a]とテーブル3の社員ID[a] を分けて抽出する方法ってありますか? クエリの結合プロパティで テーブル2の全レコードとテーブル1の同じ結合フィールドと テーブル3の全レコードとテーブル1の同じ結合フィールドにすると 「あいまいな外部接続が含まれているのでSQLを実行出来ません」とエラーになり、 テーブル1の全レコードとテーブル2の同じ結合フィールドと テーブル1の全レコードとテーブル3の同じ結合フィールドにすると 社員ID[a]、顧客ID[1]、得意先ID[α]、顧客氏名[吉田]、得意先[○○商事] 社員ID[a]、顧客ID[1]、得意先ID[β]、顧客氏名[吉田]、得意先[△△金融] みたいになってしまうのです。 やりたい結果は 社員ID[a]、顧客ID[1]、得意先ID["空欄"]、顧客氏名[吉田]、得意先["空欄"] 社員ID[a]、顧客ID["空欄"]、得意先ID[β]、顧客氏名["空欄"]、得意先[△△金融] 説明下手ですいませんが、ご教授の程よろしくお願いします。

  • Access クエリでレコードセット作成

    Access2010でVBAを勉強しています。クエリオブジェクトからレコードセットを作れるかお教えください。 クエリのデザイン作成で3つのテーブルからデータを抽出するクエリを作りました。 このクエリオブジェクトからレコードセットを作りたいと思っていますが、作り方がわかりません。 よってクエリオブジェクトのSQLビューでSQLを確認し、VBAの中で下記のようにSQLを作ってレコードセットを作っています。 これだと効率が悪いので、クエリオブジェクトから直接レコードセットがつくれないかと思っています。 方法がありましたらお教え下さい。よろしくお願いします。 strSQL = "SELECT master.[サイズ], master.単価," strSQL = strSQL & "Nz([入庫数量の合計])-Nz([出庫数量の合計]) AS 在庫数" strSQL = strSQL & " FROM (master LEFT JOIN Q_出庫 ON master.[サイズ] = Q_出庫.[サイズ])" strSQL = strSQL & " LEFT JOIN Q_入庫 ON master.[サイズ] = Q_入庫.[サイズ]" objADORS.Open "T_出庫", objADOCON, adOpenDynamic, adLockOptimistic

  • アクセス・クエリ内のフィールド上での計算式について

    アクセス上には、顧客IDテーブル、売上テーブルと入金テーブルがあります。 (1) 売上テーブル及び入金テーブル上でのIDは、顧客IDテーブルと紐付くようにしています。 (結合プロパティは、顧客IDテーブルの全レコードと売上(入金)テーブルの同じ結合フィールドのレコードだけを含める設定にしています。) (2) 売上(入金)テーブルからクエリでID毎の合計売上額と合計入金額を算出しました。 (3) (2)を基にフィールドに"ビルダー"にて合計売上額-合計入金額として、ID毎の残高を算出しました。 (4) 問題は、(2)のID毎に合計売上額があっても、IDによっては未入金の場合もあり、 その場合、合計入金額を算出するクエリ上ではそのIDは空の状態で"0"表記もされないために、 (3)は、何も表示されません。(即ち、合計売上額100 - 空 = 空)。空ではなくて、ちゃんと空の場合は、0認識出来る方法ってありますでしょうか?

  • 更新クエリで合計金額を入れたい

    アクセスのテーブル1を作成しました。 ID    日付    金額    合計金額 1     6/1     ¥100 2     6/1     ¥200 3     6/2     ¥150 4     6/2     ¥300 (合計金額はカラ) そして、日別の合計を出すクエリ1を作成しました。 SELECT [テーブル1].日付, Sum([テーブル1].金額) AS 金額の合計 FROM テーブル1 GROUP BY [テーブル1].日付; 元のテーブルの合計金額の列に、クエリで表示した金額の合計を更新クエリで入れようとすると、 「 更新可能なクエリであることが必要です。」となります。 更新クエリのSQL文は UPDATE クエリ1 INNER JOIN テーブル1 ON [クエリ1].日付 = [テーブル1].日付 SET [テーブル1].合計金額 = [クエリ1]![金額の合計]; です。 ヘルプの内容の 一対多リレーションシップの '一' 側のフィールドを更新するクエリを実行しようとしました。 読み取り専用で開いているデータベースのクエリで、古い OpenQueryDef メソッドで使用しています。 には該当してないのですが(リレーションシップを組んでないし、四方チリ専用で開いてないし) どうすれば元のテーブルに合計金額を入れられるのでしょうか? 結果的に ID     日付     金額     合計金額 1     6/1     ¥100     300 2     6/1     ¥200     300 3     6/2     ¥150     450 4     6/2     ¥300     450 にしたいです。

  • フォームに新規レコードを入力できない

    アクセス2000 ウィンドウズ98 1.テーブル T_Master ID(主キー)、名前、住所 2.テーブル T_Detales ID(主キー)、基本ID、日付、金額 リレーション→T_MasterのID(主キー)=T_Detalesの基本ID(1対多) 結合プロパティ→2 フォーム(データシートビュウ) 名前  住所  日付  金額 山本  港区  3/19  3000 山本  港区  3/20  2000 山本  港区  3/22  4000 田中  新宿  2/17  1000 田中  新宿  1/17  1200 田中  新宿  3/22  1500 石井  横浜  3/22  4000 という具合に表示されています。 さらにフォーム開くときにフィルターによって、 名前  住所  日付  金額 山本  港区  3/19  3000 田中  新宿  3/22  1500 石井  横浜  3/22  4000 という具合に3月中のデータのみ表示されるようにしています。 最後の行(石井)のあとに新しい顧客が発生したら、追加できるように作成するにはどうしたら作成できますか? 現在のところ、「石井」の後ろに新規顧客を入れようとすると、当然ながら "レコードが追加できません。テーブル'~'の結合キーがレコードセットにありません。" と表示されます。 IDフィールド(オートナンバー)を作っても見ましたが、同じエラーがでて、新規登録できませんでした。 T_Masterに顧客を新規に登録すると同時に、明細をT_detailesに書きこむ方法があれば、教えてください。

  • Access クエリについて

    Accessのテーブル1に、フィールド「コード」「回数」があり、レコードとして A,32 B,20 C,13 ・・・というように、ランダムなコードと回数がセットされているとします。コードは主キーです。 このテーブル1を元にしたクエリで A,1 A,2 A,3 ・・・ A,32 B,1 B,2 ・・・ B,20 C,1 C,2 ・・・ C,13 というように、コードごとに「回数」と同じ数のレコードがクエリ上に生成されるようにしたいのですが、こういうことは出来るのでしょうか?出来ればSQLで回答いただけないでしょうか。

  • Access更新クエリについて教えて下さい

    アクセス超初心者です。 入庫クエリでIDごとの入庫数を合計、 出庫クエリでIDごとの出庫数を合計し、 在庫クエリで在庫数を計算しています。 (入庫クエリの入庫数の合計)-(出庫クエリの出庫数の合計) 部品テーブルがあり、現在庫フィールドを作っています。 ID 部品名 現在庫 1  AAA   10 2  BBB   5 在庫クエリの在庫数を、部品テーブルの現在庫数に 代入したいと考えています。 在庫クエリを使い、テーブル作成クエリで現在庫テーブルを作成、 現在庫テーブルから更新クエリで、部品テーブルの現在庫数を 更新できるのではないかと考えたのですが、 つまづいてしまいました。 現在庫テーブル ID 在庫数 現在庫テーブルの在庫数を、IDごとに部品テーブルの現在庫に 置き換えることは可能ですか? また、その他よい方法がありましたら、教えて下さい。 ご指導のほど、よろしくお願いします。