2

私たちのアプリケーションは Access データベース (.mdb) を構築し、Shellこのデータベースへの読み取り/書き込みアクセスを必要とするコマンドで別のアプリケーションを起動します。問題は、一部のシステムでは、アプリケーションが不規則にデータベースの排他ロックを保持しているように見え、他のアプリケーションがデータベースにアクセスできなくなることです。最初のアプリケーションを閉じた後にのみ、他のアプリケーションを続行できます。

発生する特定のエラーはエラー 3028 です。これは、実際に使用している DAO 3.51 (Access '97) に固有のようです。一部のシステムが影響を受ける (そして一貫してではない) 理由と、影響を受けないシステムがある理由が理解できません。タイミングの問題ではないかと思いSleep、データベースの構築から他のアプリケーションの起動までの期間に構築しましたが、それは役に立ちません。

何が起こっている?

編集:別のファイルにデータベースを作成してからコピーすることで、回避策を作成しました。これで、2 番目のプログラムは常にアクセスできるようになり、残りのロックの問題は最初のプログラムで表面化します。ユーザーがこれをテストできるようになったら、後でフォローアップします。

4

2 に答える 2

2

別のEXEに制御を渡す前に、DBへの接続を閉じていますか?

于 2012-11-22T15:38:00.577 に答える
0

私は以前に同様の問題を抱えていましたが、まったく同じではありませんでしたが、あなたが説明したことから、これは私が試すアプローチです:

シェル コマンドでセカンダリ アプリケーションを起動する前。

すでに使用しているスリープ期間に加えて、.mdb ファイルを生成した元のプログラムを閉じる必要もあります。

これは、Windows バッチ ファイルをシェル化し、すぐに元のプログラムを終了することで実現しました。

バッチファイルの構成は次のとおりです。

ping -n 5 localhost >NUL
start MSAccess.exe "C:\DB.mdb"
exit

これにより、起動前に mdb ファイルが解放されるまで 5 秒かかります。Ms Access 呼び出しをセカンダリ プログラムに置き換えることができます。

于 2012-11-22T12:37:24.940 に答える