はじめまして。初心者で前に進めません
テーブル2つの個数合計の差をマスタテーブルを更新したいのですが、よくわからない
自分ではこのアプローチを考えてやっていますが、ほかにやり方があるのでしょうがよくわからない
1 入庫テーブルをグループ化して個数の合計を出す(選択クエリ)
2 出庫テーブルをグループ化して個数の合計を出す(選択クエリ)
3 1-2で在庫数を出す(作り方わからない)
4 3の在庫数をマスタテーブルの個数フィールド更新する(作り方わからない)
別のアプローチではchatgptに聞いて1,2,3をまとめて一発で在庫数を出せましたが、更新クエリを作って実行したら更新可能な・・・エラーが出て振出しに戻っています
そのアプローチは何を参考にしましたか?入庫や出庫の都度、タイムリーに更新しないの?
選択クエリと書いてありますが、合計を出しているということは集計クエリですよね。
集計クエリあるいは、集計クエリを含むクエリは更新不可のクエリになります。(Accessの仕様)
よって、それを含む更新クエリは実行できません。ですので、
はAccessの仕様です。
対策としては、下記の3つが考えられます。
「1,2,3をまとめて一発で在庫数を出せ」たクエリからテーブル作成クエリ(あるいは追加クエリ)でテーブルにデータを出力して、そのテーブルを更新クエリにする。
「1,2,3をまとめて一発で在庫数を出せ」たクエリを参照するDLookup関数を更新クエリに埋め込んで実行する。
VBAで「1,2,3をまとめて一発で在庫数を出せ」たクエリとマスタテーブルをそれぞれ差コードセットして開いて、マスターテーブルを先頭からループして、クエリのレコードセットを検索して在庫数を更新していく。
蛇足
データベース設計の基本として計算値はテーブルに格納しないとというのがあります。
今回の場合、「1,2,3をまとめて一発で在庫数を出せ」たクエリがあるのなら、その結果をマスターテーブルに格納する必然性はデータベース的にはないです。
どうしても格納するのなら、入庫、出庫のタイミングで、在庫数を更新するというアプローチが一般的です。
hatena様 回答ありがとうございました。