変更が Access DB にコミットされる前に実行されるフックを作成する方法はありますか? 特定のプロセスが現在 DB を照会している場合、変更をブロックする方法を探しています。
1 に答える
あなたは私たちに協力するための多くの情報を提供しませんでした. Create and Use Flexible AutoNumber Fieldsのようなものを適応させて、特定のプロセスが最初にテーブルを排他的に開くようにすることはできますか? 次に、データを変更する可能性のある他の操作は、同じテーブルをロックできるようになるまで待機する必要があります。
特定工程とは?データベースからデータを読み取るタイミング/かどうかを判断する方法はありますか?
特定のプロセスがデータベースの外部にある場合(ADO を使用してデータを取得する Web サーバー ASP コードなど)、ADO 接続の Mode および IsolationLevel プロパティが役立つかどうかを確認できます。
更新: フォームを使用して、ADO 接続の adModeShareDenyWrite Mode プロパティを試してみました。フォームが開いている間、他のユーザーはデータベースを開くことができますが、変更を加えることはできません。ただし、フォームが接続を開こうとしたときに別のユーザーがすでにデータベースを開いていると、エラーが発生します。
おそらく、デプロイ スクリプトが adModeShareDenyWrite 接続を開こうとして、エラーが発生した場合に救済される可能性があります。
Option Compare Database
Option Explicit
Dim cn As ADODB.Connection
Private Sub Form_Close()
If Not (cn Is Nothing) Then
cn.Close
Set cn = Nothing
End If
End Sub
Private Sub Form_Load()
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=\\Cmpq\export\Access\backend\links2003.mdb;" & _
"User Id=admin;Password=;"
cn.Mode = adModeShareDenyWrite
cn.Open
End Sub