2019年11月中旬ごろからAccessで更新クエリを実行しようとすると「クエリ’xxxx’は破損しています」というエラーが出るようになってしまった。
ネットで検索してみると同様のエラーで困っている書き込みが見られ、その原因が2019年11月のOfficeアップデートである事が分かった。つまりMicrosoftがバグ付きアップデートを配信してしまったわけだ。
迷惑極まりないが、とりあえず以前のバージョンに戻せば不具合は無くなるようだ。
具体的なやり方は以下のサイト等を参考にしてください。
https://maru901.at.webry.info/201911/article_8.html
https://access-support.jp/trouble/access-query-is-corrupt/
Microsoftもエラーの重大性を認識していて、Office365とAccess2019を11月24日、Access2010,2013,2016を12月10日ごろに修正パッチを配布するとのこと。
いや遅いでしょ
かなり広範囲でエラーが発生するので即座に対応してくれよ。
さて、この不具合をより突き詰めてみると、SQLのUPDATE文でWHERE句を使用しているときにエラー発生しているようだ。
--エラー:クエリは''破損しています
UPDATE テーブル1
SET メッセージ='Hello World'
WHERE ID=1;
これはエラーが起きる
しかし、WHERE句を抜いたらエラーは出ない。
--正常に処理される
UPDATE テーブル1
SET メッセージ='Hello World';
とはいえ、WHERE句無しではレコード全件が更新されてしまう。そんなのは全く実用的ではない。
Microsoft公式のこちらのページを見るとUPDATEの対象がテーブルでなくクエリだったら正常に処理されると書いてある。(ページの後半のあたり)
つまり、テーブル部分を全件抽出するクエリにすればいけるはずだ。
上の例を改変するとこうなる。
--テーブルをクエリにしてみた
UPDATE (SELECT * FROM テーブル1) as tbl1
SET メッセージ='Hello World'
WHERE ID=1;
これを実行すると意図したとおりに’ID’が1のレコードのみ’メッセージ’が「Hello World」に更新される。
対処療法でしかないが、エラーでお困りの方は修正パッチが配布されるまで、これでしのいでみたらどうだろうか。