Accessアプリをファイルサーバで共有した時、ちょっと確認するポイントが一つありましたので、ご報告します。
それはAccess2016を利用している環境で起こりました。
エラーで起動できない
ユーザが作成したAccessアプリケーション、これを複数のユーザで起動したときに問題は起こりました。
「%ファイル名%を前回開いたときに重大なエラーが発生しました。このドキュメントを開きますか?」
?エラーなんかなかったんですけど。
「このデータベースは矛盾がある状態なので、Microsoft Accessで回復処理を実行します。この処理では、データベースのバックアップコピーが作成され、回復したすべてのオブジェクトが新しいデータベースに配置されます。回復が完了すると、新しいデータベースが開きます。回復に失敗したオブジェクトの名前は"Recovery Errors"テーブルに記録されます。」
ええっ?
環境
エラーが発生する環境ではWindows10 ProfessionalをOSとしていて、Office Professional 2016付属のAccess 2016を利用しています。
実際にAccessアプリを作った環境では古いバージョン(忘れたけどOffice2010だったっけか?)を利用しています。
Accessアプリを作成したバージョンは古く、実際にユーザが利用するOfficeの環境は最新バージョンである、と言うところに何か問題が隠されているように思えました。
今回、各PCで動作していたAccessアプリ&データ部をWindows Serverで共有する共有フォルダに移行し、Accessアプリはファイルサーバの共有フォルダで共有されているテーブルファイルを読み書きして動作します。
冒頭のエラーですが、よくよく見てみるとネットワーク内のPC1台で開いて使えるようです。1台目で共有されたAccessを起動した時には正常起動しているのですが、使えるはずの2台目、3台目で冒頭のエラーが出てしまい、起動しなくなる、という現象が発生します。
調べる
MicrosoftのAccess データベースを共有する方法、というページが役に立ちそうです。
「ネットワーク フォルダーを使用してデータベースを共有する」という箇所に、利用にあたる条件が記載されています。
- データベースの同時使用が数人程度を想定していること
- データベースにメモ型フィールドが存在しないこと
- ユーザがデータベースのデザインをカスタマイズしないこと
(3)は条件を満たしているのはすぐに分かりました。(1)も問題ないようにみえます。(2)はちょっとわからないなぁ…。
「ネットワーク フォルダーを使用してデータベースを共有するには」という項目に「排他モード」なら「共有モード」に変更するように、という記述もあります。
排他モードだと1台利用している場合には2台目のコネクションは蹴られるってことだと思います。
動きも似ていましたからね。これは何か関係しそうだな、と思っていました。
解決
実際にこの設定を見るためにAccessの設定画面を開いてみました。
すると、デフォルトだから当然といえば当然なのですが、既定の開くモードでは「共有モード」に設定されていますし、既定のレコードロックも「ロックしない」となっています。
…そうだよなぁ。だって「デフォルト」だもの。わざわざこんなとこユーザ一人一人が設定変更しないよなぁ…。
そう思っていたところで、画面の下の方に気になる記述が。
図:Access設定画面
「暗号化方法」という項目に以下の選択肢が存在しています。
- 選択肢1:以前の暗号化方法を使用する(下位互換性が必要な場合や複数のユーザがデータベースを共有する場合に最適)
- 選択肢2(デフォルト設定の方):既定の暗号化方法を使用する(高度なセキュリティ)
何か、"ぽい"感じだよなぁ…。そう思って、試しに「(1)以前の暗号化方法を使用する」を選択してネットワーク内の2台のPCを同時に起動してみました。
…。
……。
おぉ、起動するぞ。
試しに3台目のPCはこの設定を実施せずに起動してみました。
冒頭のエラーが再現し、エラーで起動できない、という症状が再現性あることが確認。
と、いうことは、全部のPCのAccess設定で「(1)以前の暗号化方法を使用する」を選択すれば皆利用できるようになる、ということ?
早速やってみましたら、うまく起動するようです。
ちょい古いAccessアプリをOffice2016のような新しいバージョンで動作させるときには「暗号化方法」に注目、ということでした。
めでたしめでたし。