質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

1回答

189閲覧

更新可能なクエリであることが必要です、とエラーが出る

PyPyPython

総合スコア58

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2024/11/12 01:39

実現したいこと

Accessの質問です。
00品番というマスターテーブルの「現在庫数」というフィールドを更新したいです。

実行したいコード
Q_在庫数一括更新

UPDATE Q05_実在庫数 INNER JOIN 00品番 ON Q05_実在庫数.品番コード = [00品番].品番コード SET [00品番].現在庫数 = [Q05_実在庫数]![実在庫数] WHERE ((([00品番].棚番号)<>"処分済み" And ([00品番].棚番号)<>"受注品" And ([00品番].棚番号)<>"BTO-000" And ([00品番].棚番号)<>"直送品" And ([00品番].棚番号)<>"未取得"));

発生している問題・分からないこと

・00作成というテーブルを品番でグループ化し、品番ごとの入荷数を合計した「合計入庫数」
・01注文データというテーブルを品番でグループ化し、品番ごとの注文数量を合計した「合計出庫数」
・T_在庫数補正履歴というテーブルを品番でグループ化し、品番ごとの補正数を合計した「合計補正数」

合計入庫数から合計出庫数を引いた理論在庫数から、実在庫数との差異である補正数を足して、正確な在庫数をシステム上で確認ことを目的としてクエリを組みました。
00品番にある全ての品番の実在庫数が計算できるように、00作成、01注文データにレコードがない品番については0が表示されるようにしています。

Q05_実在庫数まで完成し、あとは計算結果を00品番の現在庫数フィールドに更新するだけ、という段階でタイトルのエラーがでました。

該当のソースコード

Q01_合計入庫数

1SELECT [00品番].品番コード, Nz(Sum([00作成].入荷数),0) AS 入荷数の合計 2FROM 00品番 LEFT JOIN 00作成 ON [00品番].品番コード = [00作成].品番 3GROUP BY [00品番].品番コード; 4

Q02_合計出庫数

1SELECT [00品番].品番コード, Nz(Sum(IIf([01注文データ].出庫日 Is Not Null, [01注文データ].注文数量, 0)), 0) AS 注文数量の合計 2FROM 00品番 LEFT JOIN 01注文データ ON [00品番].品番コード = [01注文データ].発注者品名コード 3GROUP BY [00品番].品番コード; 4

Q03_理論在庫数

1SELECT [00品番].品番コード, Q01_合計入庫数.入荷数の合計, Q02_合計出庫数.注文数量の合計, [入荷数の合計]-[注文数量の合計] AS 理論在庫数 2FROM (Q01_合計入庫数 RIGHT JOIN 00品番 ON Q01_合計入庫数.品番コード = [00品番].品番コード) LEFT JOIN Q02_合計出庫数 ON [00品番].品番コード = Q02_合計出庫数.品番コード; 3

Q04_合計補正数

1SELECT [00品番].品番コード, Nz(Sum(T_在庫数補正履歴.補正数), 0) AS 補正数の合計 2FROM 00品番 LEFT JOIN T_在庫数補正履歴 ON [00品番].品番コード = T_在庫数補正履歴.品番 3GROUP BY [00品番].品番コード; 4

Q05_実在庫数

1SELECT [00品番].品番コード, Q03_理論在庫数.理論在庫数, Q04_合計補正数.補正数の合計, [理論在庫数]+[補正数の合計] AS 実在庫数 2FROM Q04_合計補正数 RIGHT JOIN (Q03_理論在庫数 RIGHT JOIN 00品番 ON Q03_理論在庫数.品番コード = [00品番].品番コード) ON Q04_合計補正数.品番コード = [00品番].品番コード; 3

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

タイトルの通り、「更新可能なクエリであることが必要です」と警告文が出て実行されません。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

更新可能な条件としては、1:1の条件であることが必要です。
この条件を満たさない場合の理由としては、
①主キーの無いテーブルが含まれる。
②集計クエリーを使って更新する。
などが挙げられます。
質問の内容ですと、②ではないかと思われますので、以下のような対応になるかと。

A.「Q05_実在庫数」の結果を主キー設定したワークテーブルに出力して、それを元に更新する。
B.相関による更新にする。

Bの場合の「Q_在庫数一括更新」は以下の様になると思います。

SQL

1UPDATE 00品番 2SET 現在庫数 = DLookUp("実在庫数", "Q05_実在庫数", "品番コード=" & "'" & 品番コード & "'") 3WHERE 棚番号 not in ('処分済み', '受注品', '直送品' , '未取得' , 'BTO-000' )

※DLookUp()を使用する場合は低速になりがちです。
その場合はAの方が高速になると思いますが複数人で同時に実行されない事が前提です。

投稿2024/11/12 07:11

編集2024/11/12 07:18
sazi

総合スコア25300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PyPyPython

2024/11/13 04:54

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
PyPyPython

2024/11/14 01:20

定型文のまま送ってしまいました。 更新できない理由まで教えて頂きありがとうございました。 複数人でファイルを使用することはないのでQ05をテーブルに書き出し→更新の方法を採りました。 ありがとうございました。
sazi

2024/11/14 02:32

解決して何よりです。 クローズをお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問