Excel VBA通​​过DAO锁定访问数据库记录以进行编辑

时间:2015-12-04 00:12:18

标签: vba excel-vba access-vba dao excel

我有一个我已经开发的Excel应用程序,现在想要将所有数据存储在Access文件(而不是Excel工作表)中。我能够读取数据并写出数据,我的问题与处理并发用户有关。大约150-200平方的图像,当点击时打开一个加载数据的UserForm。用户可以进入并编辑任何数据,因此我想确保两个用户不同时编辑记录。鉴于它的大小,我不想锁定整个文件,只需要一个记录。到目前为止,我所阅读的所有内容都表明该记录仅在.Edit中锁定,但是我想在用户打开UserForm后立即将其锁定,然后应用他们所做的任何编辑并将其解锁。

我现在在这里使用代码,前三个部分是主要关注点:

Sub OpenDAO()
   Set Db = DBEngine.Workspaces(0).OpenDatabase(Path, ReadOnly:=False)
   strSQL = "SELECT * FROM AccessDB1 WHERE ID = 5" '& Cells(1, Rng.Column)
   Set Rs = Db.OpenRecordset(strSQL)
End Sub
'==========================================================================
Sub CloseDAO()
On Error Resume Next
   Rs.Close
   Set dbC = Nothing
   Set Rs = Nothing
   Set Db = Nothing
End Sub
'==========================================================================
Function ADO_update(Target As Range)
   Set ws = Sheets("Sheet1")
   Set dbC = DBEngine.Workspaces(0).Databases(0)

   'if no change exit function
   If Target.Value = oldValue Then GoTo 0

On Error GoTo trans_Err
    'begin the transaction
    DBEngine.BeginTrans
    dbC.Execute "UPDATE AccessDB1 SET Field1 = 5 WHERE ID= 5"
    DBEngine.CommitTrans dbForceOSFlush
Exit Function

trans_Err:
   'roll back the transaction
   Workspaces(0).Rollback
0
End Function
'==========================================================================
Function MakeSQLText(data As Variant)
   If (IsNumeric(data)) Then
       MakeSQLText = data
   Else
       MakeSQLText = "'" & Replace(data, "'", "''") & "'"
   End If
End Function

0 个答案:

没有答案