Microsoft Access 掲示板

テーブルの引き算とテーブルの更新

3 コメント
views
4 フォロー

はじめまして。初心者で前に進めません
テーブル2つの個数合計の差をマスタテーブルを更新したいのですが、よくわからない
自分ではこのアプローチを考えてやっていますが、ほかにやり方があるのでしょうがよくわからない
1 入庫テーブルをグループ化して個数の合計を出す(選択クエリ)
2 出庫テーブルをグループ化して個数の合計を出す(選択クエリ)
3 1-2で在庫数を出す(作り方わからない)
4 3の在庫数をマスタテーブルの個数フィールド更新する(作り方わからない)

別のアプローチではchatgptに聞いて1,2,3をまとめて一発で在庫数を出せましたが、更新クエリを作って実行したら更新可能な・・・エラーが出て振出しに戻っています

taka
作成: 2024/05/12 (日) 19:22:02
通報 ...
1
りんご 2024/05/12 (日) 19:36:11 935bc@0e907

そのアプローチは何を参考にしましたか?入庫や出庫の都度、タイムリーに更新しないの?

2

1 入庫テーブルをグループ化して個数の合計を出す(選択クエリ)
2 出庫テーブルをグループ化して個数の合計を出す(選択クエリ)

選択クエリと書いてありますが、合計を出しているということは集計クエリですよね。
集計クエリあるいは、集計クエリを含むクエリは更新不可のクエリになります。(Accessの仕様)
よって、それを含む更新クエリは実行できません。ですので、

別のアプローチではchatgptに聞いて1,2,3をまとめて一発で在庫数を出せましたが、更新クエリを作って実行したら更新可能な・・・エラーが出て振出しに戻っています

はAccessの仕様です。

対策としては、下記の3つが考えられます。

「1,2,3をまとめて一発で在庫数を出せ」たクエリからテーブル作成クエリ(あるいは追加クエリ)でテーブルにデータを出力して、そのテーブルを更新クエリにする。

「1,2,3をまとめて一発で在庫数を出せ」たクエリを参照するDLookup関数を更新クエリに埋め込んで実行する。

VBAで「1,2,3をまとめて一発で在庫数を出せ」たクエリとマスタテーブルをそれぞれ差コードセットして開いて、マスターテーブルを先頭からループして、クエリのレコードセットを検索して在庫数を更新していく。

蛇足

データベース設計の基本として計算値はテーブルに格納しないとというのがあります。
今回の場合、「1,2,3をまとめて一発で在庫数を出せ」たクエリがあるのなら、その結果をマスターテーブルに格納する必然性はデータベース的にはないです。

どうしても格納するのなら、入庫、出庫のタイミングで、在庫数を更新するというアプローチが一般的です。

3

hatena様 回答ありがとうございました。

データベース設計の基本として計算値はテーブルに格納しないとというのがあります。
勉強になりました。今一度思考し直し進めていこうと思いました。
今後ともよろしくお願いいたします。失礼します。