阻止提交对Microsoft Access数据库的更改

时间:2010-06-16 03:27:28

标签: ms-access hook pre-commit-hook

有没有办法编写一个在将更改提交到Access数据库之前运行的挂钩?如果特定进程当前正在查询数据库,我正在寻找阻止更改的方法。

1 个答案:

答案 0 :(得分:1)

您没有给我们提供太多信息。你可以改编一下像Create and Use Flexible AutoNumber Fields这样的特定过程首先打开一个表吗?然后,任何其他可能更改数据的操作都必须等到它们可以锁定同一个表。

什么是特定流程?您是否有方法确定何时/是否从数据库中读取数据?

如果特定进程在数据库外部,例如使用ADO获取数据的Web服务器ASP代码,您可以看到ADO连接模式和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