• 締切済み

【Access】排他モードで利用時のタイムアウト

社内の部署で共有のアクセスデータベースを作成し、複数の人が同時に編集できないよう、 「排他モード」か「レコードロック」の設定を考えていますが、「排他モード」にした場合、ファイルを 開く時間(タイムアウト)の設定は可能でしょうか?

みんなの回答

回答No.1

ファイルサーバ上にAccessファイルを置いてある。 ファイルサーバのOSはWindows系である。 という仮定でのお話です。 排他モードで開くには AccessのGUIメニューから選択して行う場合と、 起動時オプションの、/excl を使用して "Accessのインストールフォルダ\msaccess.exe" アクセスファイルのフルパス /excl というBatファイルを各ユーザーに配布して行う場合が考えられます。 http://office.microsoft.com/ja-jp/access-help/HA010166605.aspx 後者の方が各ユーザーの手間が省けます。 排他モードで開かれた場合には、 Accessのロック情報ファイル(拡張子がlaccdb や ldb)が作成されません。 共有モードであればファイルが作成されるのでメモ帳などで 開けばどのPCが開いているか分かります。 開きっ放しで外出してしまうバカヤローがいた場合などでは 各PCを廻って確認したいところですが スクリーンセーバの復帰時にパスワードを要求される場合などでは 確認のしようもありませんし、強制電源断も問題の解決にはなりません。 なので、あなたや他のユーザーが、管理者権限が与えられていれば コマンドプロンプトを「管理者として実行」で開き Openfiles /query /s サーバ名 | find "laccdb" などとして 誰が開いているか特定し、強制的に切断する必要があります。 http://www.atmarkit.co.jp/fwin2k/win2ktips/306openfiles/openfiles.html ※あなたが時間のかかる更新クエリなどを実行中で 終了までにお茶しようと離席、その間に誰かが上記方法で強制切断 の憂き目に遭う可能性もあり得ますので、信頼できる人にだけ教えときましょう。 標準ユーザーではOpenfilesは使えません(Win7 Pro の場合) なお、たとえばですがユーザーが10分間何もしてなかったら 自動的に閉じる・・・という設定は有りません。 フォーム上での限定になりますが レコード移動時イベントなどでタイマーリセット タイマー時にAccess終了・・・などというのをVBAで作れば可能かもしれませんが ユーザーがどのようにファイルを使用しているか全て洗い出す必要が有りますし 処理が煩雑です。 (私は実装したことはありません。単なる思い付きです) 別案としては共有モードで開くようにして http://support.microsoft.com/default.aspx?scid=kb;ja;285822 を参考にして 標準モジュールに Function InUseDB() Dim Cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim i As Long, j As Long Set Cn = CurrentProject.Connection Set rs = Cn.OpenSchema(adSchemaProviderSpecific, _ , "{947bb102-5d43-11d1-bdbf-00c04fb92675}") rs.Filter = "computer_name <> '" & Environ("computername") & "'" If (rs.EOF And rs.EOF) = False Then MsgBox "PC名 " & Replace(Trim(rs!computer_name), Chr(0), "") & " が使用中" DoCmd.Quit End If rs.Close: Set rs = Nothing End Function としておいて Autoexec マクロに上記InUseDBを登録 すでに自分のPC以外の人がいたら終了する・・という方法もあります。 もちろん、メッセージボックスが出た段階で、Ctrl + Break を押された場合や Shift キーを押しながら立ち上げた場合は無力ですけどね。 以上ご参考までということで。

関連するQ&A