Accessのリンクテーブルのデータがすべて#deletedになった話
本日、MicoroSoft Accessのフォームのデータが、突然すべて「#deleted」の表示になったと相談が。それまでは正常に使えていたとのこと。
このデータ、ODBCでSQL Serverにリンクしているのですが、テーブルを開いてみるとすべてのデータが#deletedになってるし。
データが全部消えちゃったのかな、#deletedがたくさん表示されたままだから、見た目が変になっているだけなのかな、という期待と不安の中、Management Studioでデータを確認。幸いすべて残っておりました。
この症状、発生しているのは複数台のクライアントPCのうち1台のみ。
「Access ODBC リンクテーブル #deleted」でググると、bigintがdatetime2がという記事があったので、それに従い修正を試みるも解決せず。そもそもそんなデータ型使った覚えないし。
その後もググり読み進めていると、主キーが原因に思える記事が。
Select Distinctでクエリを書いてみると、
データが正しく表示されるではありませんか。
まさか主キーがかぶってるの・・そんなことはないでしょうよ。
そして、エラーが発生するテーブルとそうでないテーブルの構造をじっくり見比べること、
発見しました!
主キーの型がnvarcharのテーブルがエラーになっている。
その主キーのデータは英数字だけなので、型をvarcharに変更し、
Accessでリンクの更新をおこなうと、
はい、正常に表示されました。
結局のところ、はっきりした原因はわからず、対処療法になりましたが、
Unicodeが影響しているんでしょうか。
クライアントの環境はOffice365最新ヴァージョンの64bitです。
OFFICE365 ACCESSで「実行時エラー’3340’ クエリは破損しています」 エラーが出た場合の対処法
※本記事の実行は、自己責任でお願いします。
Office365のクイック実行版(C2R)のAccessで、
上記エラーが出ると問い合わせあり。
データベースの破損かぁと調べていたら下記に行きつく。
原因はMicrosoftですでに把握されていて、
11月12日のOfficeの更新プログラムによるものだそうだ。
Office365の修正パッチは他のバージョンに先駆けて
11月24日のリリースになりそうだと書いてある。
業務上それでまで待てないということで、
更新前のバージョンへ戻して使用することにしよう。
以下手順。
手順1.自動更新を再開するために、リマインドを設定。
11月24日の更新プログラムが発行されるまで自動更新を止めるため、
リリース後には自動更新を再有効化する必要がある。
この作業を忘れないようにOutlookリマインダーを設定。割愛。
手順2.コマンドプロントを管理者モードで起動する。
スタートメニューでcmdと入力し、右クリックのメニューから
管理者として実行を選択。
手順3.旧バージョンのOfficeをインストール
Officeに備え付けの更新プログラムを実行します。
コマンドプロントへ以下を貼り付けEnterキーを押してください。
インストールするバージョンは「12130.20272」。
その1 [ClickToRunのフォルダへ移動]
cd %programfiles%\Common Files\Microsoft Shared\ClickToRun
その2 [更新プログラムを起動]
OfficeC2RClient.exe /update user updatetoversion=16.0.12130.20272
※16.0.のうしろがインストールするバージョンですね。
手順4.更新プログラムを進める
更新プログラムが起動して、ダウンロードとインストールが始まります。
成功すると下記のメッセージがでます。
手順5. 自動更新の停止
任意のOfficeアプリを起動し、ファイル→アカウントと開きます。
「更新オプション」ボタンをクリックし、「更新を無効にする」を選びます。
修正パッチリリース後はくれぐれも自動更新を有効にすることを忘れずに!
私の場合、以上でエラーが解消されました。