Access2007、Windows7の環境でタイトルのエラーが頻発します。
エラーメッセージは下記の通りです。
実行時エラー '3704':
このデータベースは、マシン 'PCNAME1' のユーザー 'Admin' が開いています。データベースが使用可能になった時点で、再度事項してください。
ファイルは
Data.accdb
System.accdb
に分かれており、
Data.accdb・・・LANDISKに配置し、共有しています。オブジェクトはテーブルのみ。
System.accdb・・・各ユーザーのパソコンに配置し、Data.accdbへリンクテーブル設定しています。
フォームやレポート等で処理を行っています。
このSystem.accdbのユーザーは10名程度です。
エラーが出る状況はさまざまで特定できません。
フォームでの登録処理(データの書き込み時)、帳票作成時(データの読み込み時)等です。
エラーが出ても、直後に同じ処理を実行すると正常に終了します。
離れた環境にあるため、直接検証はできていませんが
聞き取り内容、エラー内容、状況から
あるユーザーのトランザクション処理中に
別ユーザーがトランザクション処理中のデータにアクセスしようとして
エラーが発生しているように思います。
例えば、
伝票番号:100番の売上登録処理中に
別ユーザーが伝票番号:100番を含む売上一覧表を出力しようとしたとき。
現在考えている回避策として・・・
数秒待てば、正常に処理を進められるため、クエリ実行部分で
'Sleep はAPIを使用
On Error Resume Next
DoCmd.OpenQuery "クエリ名"
If Err.Number = 3704 Then
Sleep 3000 '3秒待つ
DoCmd.OpenQuery "クエリ名"
End If
のように、エラーがでた場合に少し待つようにしようと考えておりますが、
対象箇所が多く、あまり現実的ではないのでは、とも思います。
このエラーのスマートな回避策があれば、ご教示お願いいたします。