我有一个我已经开发的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