実現したいこと
会館管理プログラムを access で作成しています。
テーブル「申込」と「会場利用明細」が1対多でリレーションを貼っています。
1申込で複数日・複数部屋を申請することができるようになっています。
会場利用明細は使用日、時間帯、単価等のデータを扱います。
社内規定で請求日ではなく初回使用日で売上を集計する必要があります。データ項目"申込No”で
minを用いて初回使用日を特定できるとして、申込テーブルに項目を作っていなかったのですが、処理が重くなってしまい、初回使用日を申込テーブルに追加しました。
これまで入力していたデータから初回使用日を更新クエリで簡単に拾えると思っていたのですが・・・表題にあるエラーが表示されてしまうので、このエラーをなくしてデータを初回使用日を更新したく
発生している問題・分からないこと
Access ファイルは プログラムパートを 会場利用.accdb、データパートを 申込data.accdb として分割し、プログラムを複数の職員に配布、申込data.accdb はファイルサーバにおいてあります。
そこでまず更新クエリ
UPDATE 申込 SET 申込.初回使用日 = (SELECT Q_初回使用日.初回使用日
FROM Q_初回使用日
WHERE 申込.申込No = Q_初回使用日.申込No
);
/* Q_初解消日
SELECT 会場使用明細.申込No, Min(会場使用明細.使用日) AS 初回使用日
FROM 会場使用明細
GROUP BY 会場使用明細.申込No;
*/
を実行させたのですが、「更新可能なクエリであることが必要です。」というメッセージボックスが出ます。
少しググって、ネットワーク越しのデータにアクセスする場合は read only になることから、申込data.accdb のオプションから「ネットワーク上のドキュメントを信頼することを許可する」にチェックが入っていることは確認しました。
ネットワーク越しの制約がなにか影響しているのか?と思って、ファイルサーバ上で更新クエリを実行させても同じ症状です(エラーメッセージも同一)
エラーメッセージ
error
1(1)更新クエリ:「更新可能なクエリであることが必要です。」 2(2)vbaでsqlを実行させたとき (update_test1): 3実行時エラー '-2147467259(80004005);' 4更新可能なクエリであることが必要です。 5(3) vbaで docmd.runsql を実行させたとき(update_test2): 6実行時エラー '3073': 7更新可能なクエリであることが必要です。
該当のソースコード
query
1UPDATE 申込 SET 申込.初回使用日 = (SELECT Q_初回使用日.初回使用日 2 FROM Q_初回使用日 3 WHERE 申込.申込No = Q_初回使用日.申込No 4); 5/* Q_初回使用日 6SELECT 会場使用明細.申込No, Min(会場使用明細.使用日) AS 初回使用日 7FROM 会場使用明細 8GROUP BY 会場使用明細.申込No; 9*/
vba
1Sub update_test() 2 Dim rs As New ADODB.Recordset 3 Dim cn As New ADODB.Connection 4 5 Set cn = CurrentProject.Connection 6 rs.Open "UPDATE 申込 INNER JOIN Q_初回使用日 ON 申込.申込No = Q_初回使用日.申込No SET 申込.初回使用日 = Q_初回使用日.初回使用日", cn 7 rs.Close 8 Set rs = Nothing 9 Set cn = Nothing 10End Sub 11 12Sub update_test2() 13 DoCmd.RunSQL "UPDATE 申込 INNER JOIN Q_初回使用日 ON 申込.申込No = Q_初回使用日.申込No SET 申込.初回使用日 = Q_初回使用日.初回使用日" 14End Sub
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
teratail で「更新可能なクエリであることが必要です」を検索したのですが、今回の問題に該当するQAは見つかりませんでした。
ググってみたところ、マイクロソフトの Microsoft build で
https://learn.microsoft.com/ja-jp/office/vba/access/concepts/miscellaneous/operation-must-use-an-updatable-queryerror-3073?f1url=%3FappId%3DDev11IDEF1%26l%3Dja-JP%26k%3Dk(jeterr40.chm5003073)%3Bk(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue
が見つけてます。ここで、「更新できないフィールドを更新するクエリを実行しようとしました。 たとえば、一対多リレーションシップの '一' 側のフィールドを更新するクエリを実行しようとしました。」とあります。今回の問題は、キー項目でもリレーションを貼った項目でもないので、該当しないと判断しています。
補足
なにか見落としているような気がするのですが・・・。何かヒントでも頂けるとありがたいです。

回答1件
あなたの回答
tips
プレビュー