Accessでクエリは破損していますと出てしまう対策について_1
2019年11月12日のWindowsアップデートで配布されたセキュリティアップデートによって、Microsoft Accessで更新クエリを実行すると「クエリ’変更クエリ’は破損しています」と無常なエラーが表示されてしまうという不具合が発生しています。
→Office365を前バージョンに戻す方法を別記事に書きました。
11月15日時点で最新アップデートをかけた状態で試してみるとやはりまだエラーが発生するようです。こちらが証拠画像。
昨日14日あたりから、急に業務で使っているアプリが使えなくなったという方も多いのではないでしょうか? だって、データベースの内容変更しようとすると発生するのだから、致命的です。
基本的にはこのアップデートで問題となっている項目を削除すればOKです。
マイクロソフトのこの問題に関するページから以下の通り引用します。
Office 2010: Description of the security update for Office 2010: November 12, 2019 (KB4484127)
Office 2013: Description of the security update for Office 2013: November 12, 2019 (KB4484119)
Office 2016: Description of the security update for Office 2016: November 12, 2019 (KB4484113)
でもOffice365はこれではダメ?
上のとおり、Office2010、2013、2016に関しては適用されたアップデートを削除すればよいのですが、どうやらOffice365は[ファイル]-[アカウント]-[更新オプション]で、Windowsとは別にOffice単体でアップデートがかかる様子。だから困った状況を打破するには、Accessで作ったアプリ側でひとまず対応する必要がありそうです。
まだ無事なPCがあるならOffice365の更新を止めよう
まだあなたのPCでこの問題が起こっていないなら、下の更新オプションボタンは押しちゃダメ!!!!
まだ問題のある更新プログラムが適用されていないならば、これ以上他のPCに被害が及ばないように自動更新を止めておくべきです。
「ファイル」-「アカウント」から[Office更新プログラム]のボタンを押し、その中にある「更新を無効にする」をクリックします。まちがってもその上のボタンは押さないように!
問題の更新が適応されているかどうかバージョンを確認
Office365では11月12日に配布されたバージョンが問題を引き起こしています。これよりも前のバージョンならばまだ無事です。
11月12日移行の更新が公開されてるのを待ちましょう。確認は下記のURLから行えます。
Office 365 ProPlus の更新履歴 (日付別の一覧)
作ったアプリ側をチョコっと修正して対応する
今回の不具合について、アップデートを削除する方法はいろんなところで解説されていましたが、まだ日本語のサイトで詳しい方法を紹介されていないみたいなので以下の通り紹介します。英語では本家で対策が開設されています。
簡単に方法を説明すると「変更しようとしているテーブルを、まるごと参照するクエリを作って、そっちから変更すればいい」です。実例を挙げます。
こんな感じにウィザードで作った変更クエリで止まっている場合は、 右クリックで「デザイン」 をクリックし、参照しているテーブルを確認します。
このクエリは2番の社員の部署を営業部に変更しようとするもの。参照しているテーブルは「社員」テーブルです。確認ができたら、[作成]-[クエリデザイン]をクリックします。
さっき確認したテーブルを選択して、「追加」を押します。目当てのテーブルが追加できたらこの画面は閉じます。
開いたクエリー画面のタブのあたりを右クリックして「SQLビュー」で開きます。
下のようなSQL文字列が表示されますので、SELECTの後ろに「半角スペースと*」を追加します。下の画像は追加済みのもの。
タブの上で右クリックして「上書き保存」を押すと名前が聞かれます。ここが肝です。元のテーブルの名前を参考に差し替えた個所があとでわかるようにしておきます。私の場合はテーブル名の前にwao_ を付加しました。ここはわかりやすければ何でもよいです。「怒_社員」とかでもよいかも。
いよいよ変更クエリを差し替えます。先ほど確認した「変換クエリ」を右クリックでデザイン表示させます。「テーブルの表示」をクリックして「クエリ」タブを開くと、先ほど新たに作った「wao_社員」が表示されているので、追加します。
クエリを追加したあとには、テーブルで「社員」が表示されているところで選択できるようになっています。すべてのテーブルを元のものから新たに作った全部参照してるクエリに切り替えて保存します。
ちなみに、タブのところでSQL表示にきりかえてみると、以下のような感じになります。変化がわかりやすいように、社員番号2番の彼を新技術開発部に人事異動させてみましょう!
成功しました!
多くの業務アプリの場合、変更クエリのウィザードを使っているものよりも、VBAでSQL文字列を使って実行していることが多いと思うので、デバッグで特定して修正していく方法は別に紹介しようと思っています。基本的には上記の方法でウィザードを使って丸っこ参照の名前を工夫したクエリを作り、SQL文のテーブル名を差し替えればOKなはずです。クエリにつける名前にさえ注意すれば、あとで元に戻すときには、文字列検索で削ったり差し替えたりが簡単だと思います。→VBAの場合について追加記事かきました。
取り急ぎ困っている人のヒントにと思って急いでアップしますので、ご査収ください。何かコメントいただけるととっても嬉しいです。
ディスカッション
コメント一覧
お役に立てたようでよかったです。
本当に本当に本当にありがとうございました。素人なのにプログラムの担当なので泣きそうになっていましたが、双子のリリーズ作戦(昭和でない人はごめんなさい)で見事、更新できました。
柔らか頭が必要と痛感しました。
いくら感謝してもしきれません。
ありがとうございました。
情報ありがとうございました! 手順をスクリーンショットにとりながら一連の投稿のその3に投稿させていただきました。
残念ながら私の環境ではエラーとなってしまったのですが、世界的に困っている人が多そうなトラブルで、更新サーバが混雑しているのかしら? と思っています。この度はありがとうございます!
大変貴重な情報を掲載いただきありがとうございます。
私は Office 365 で自動更新を有効にしていて、先ほどこの不具合に遭遇しましたが、
こちらの方法で直前のバージョンに戻すことができました。
クイック実行 (C2R) 版の Office 2016 を以前のバージョンに戻す方法
https://support.microsoft.com/ja-jp/help/2770432/how-to-revert-to-an-earlier-version-of-office-2013-or-office-2016-clic