treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Accessを共有フォルダで共有した時

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 データベースを共有する方法、というページが役に立ちそうです。

support.office.com

「ネットワーク フォルダーを使用してデータベースを共有する」という箇所に、利用にあたる条件が記載されています。

  1. データベースの同時使用が数人程度を想定していること
  2. データベースにメモ型フィールドが存在しないこと
  3. ユーザがデータベースのデザインをカスタマイズしないこと

(3)は条件を満たしているのはすぐに分かりました。(1)も問題ないようにみえます。(2)はちょっとわからないなぁ…。

「ネットワーク フォルダーを使用してデータベースを共有するには」という項目に「排他モード」なら「共有モード」に変更するように、という記述もあります。
排他モードだと1台利用している場合には2台目のコネクションは蹴られるってことだと思います。
動きも似ていましたからね。これは何か関係しそうだな、と思っていました。

解決

実際にこの設定を見るためにAccessの設定画面を開いてみました。

すると、デフォルトだから当然といえば当然なのですが、既定の開くモードでは「共有モード」に設定されていますし、既定のレコードロックも「ロックしない」となっています。

…そうだよなぁ。だって「デフォルト」だもの。わざわざこんなとこユーザ一人一人が設定変更しないよなぁ…。
そう思っていたところで、画面の下の方に気になる記述が。

図:Access設定画面

f:id:treedown:20170227092243p:plain

「暗号化方法」という項目に以下の選択肢が存在しています。

  1. 選択肢1:以前の暗号化方法を使用する(下位互換性が必要な場合や複数のユーザがデータベースを共有する場合に最適)
  2. 選択肢2(デフォルト設定の方):既定の暗号化方法を使用する(高度なセキュリティ)

何か、"ぽい"感じだよなぁ…。そう思って、試しに「(1)以前の暗号化方法を使用する」を選択してネットワーク内の2台のPCを同時に起動してみました。

…。
……。
おぉ、起動するぞ。

試しに3台目のPCはこの設定を実施せずに起動してみました。
冒頭のエラーが再現し、エラーで起動できない、という症状が再現性あることが確認。

と、いうことは、全部のPCのAccess設定で「(1)以前の暗号化方法を使用する」を選択すれば皆利用できるようになる、ということ?

早速やってみましたら、うまく起動するようです。

ちょい古いAccessアプリをOffice2016のような新しいバージョンで動作させるときには「暗号化方法」に注目、ということでした。

めでたしめでたし。