MS Access 并发用户
Posted
技术标签:
【中文标题】MS Access 并发用户【英文标题】:MS Access concurrent users 【发布时间】:2017-11-16 17:43:47 【问题描述】:我有一个关于 MS Access 并发的快速问题。我在 excel 中构建了一个输入表,VB 代码打开了一个与 MS Access 数据库的连接,在大约 5 毫秒内记录了 8 个字段,并立即关闭了连接(对于该特定用户)。我意识到 Access 在并发方面有其局限性,但我真正想知道这是否适合 70 个用户?并非所有人都会在完全相同的时间记录数据,如果发生这种情况,我会说 70 个中的 20-30 个(最多)可能会在完全相同的时间记录一些东西。
另一方面,Access 数据库仅用于存储数据,没有其他用途。
Dim NewCon As ADODB.Connection
Set NewCon = New ADODB.Connection
Dim Recordset As ADODB.Recordset
Set Recordset = New ADODB.Recordset
NewCon.Open "Provider=Microsoft.ace.oledb.12.0;Data Source=C:\Users\my.user\Desktop\Testing\Database1.accdb"
Recordset.Open "DATA", NewCon, adOpenDynamic, adLockOptimistic
Recordset.AddNew
'Primary Key
Recordset.Fields(0).Value = G
'Field 2
Recordset.Fields(1).Value = A
'Field 3
Recordset.Fields(2).Value = B
'Field 4
Recordset.Fields(3).Value = C
'Field 5
Recordset.Fields(4).Value = D
'Field 6
Recordset.Fields(5).Value = E
'Field 7
Recordset.Fields(6).Value = F
'Field 8
Recordset.Fields(7).Value = Format(Now, "m/d/yyyy h:mm:ss")
Recordset.Update
Recordset.Close
NewCon.Close
【问题讨论】:
您是否能够使用 SharePoint 列表并将它们与 Access 链接?如果是这样,我会这样做。 应该不是问题。 由于您只是添加记录,因此并发根本不是问题。不可能有冲突的更新。 谢谢大家,我已经测试过了,效果很好。 【参考方案1】:这应该不是问题。或者发现错误并重试。
如果遇到严重问题,可以使用这里描述的方法:
Handle concurrent update conflicts in Access silently
其中包括完整的演示和代码:
' Function to replace the Edit method of a DAO.Recordset.
' To be used followed by GetUpdate to automatically handle
' concurrent updates.
'
' 2016-02-06. Gustav Brock, Cactus Data ApS, CPH.
'
Public Sub SetEdit(ByRef rs As DAO.Recordset)
On Error GoTo Err_SetEdit
' Attempt to set rs into edit mode.
Do While rs.EditMode <> dbEditInProgress
rs.Edit
If rs.EditMode = dbEditInProgress Then
' rs is ready for edit.
Exit Do
End If
Loop
Exit_SetEdit:
Exit Sub
Err_SetEdit:
If DebugMode Then Debug.Print " Edit", Timer, Err.Description
If Err.Number = 3197 Then
' Concurrent edit.
' Continue in the loop.
' Will normally happen ONCE only for each call of SetEdit.
Resume Next
Else
' Other error, like deleted record.
' Pass error handling to the calling procedure.
Resume Exit_SetEdit
End If
End Sub
和:
' Function to replace the Update method of a DAO.Recordset.
' To be used following SetEdit to automatically handle
' concurrent updates.
'
' 2016-01-31. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function GetUpdate(ByRef rs As DAO.Recordset) As Boolean
On Error GoTo Err_GetUpdate
' Attempt to update rs and terminate edit mode.
rs.Update
GetUpdate = True
Exit_GetUpdate:
Exit Function
Err_GetUpdate:
If DebugMode Then Debug.Print " Update", Timer, Err.Description
' Update failed.
' Cancel and return False.
rs.CancelUpdate
Resume Exit_GetUpdate
End Function
也可以在GitHub
【讨论】:
以上是关于MS Access 并发用户的主要内容,如果未能解决你的问题,请参考以下文章
如何让 ms-access 以其他用户身份连接到 ms-sql?
MS ACCESS, VBA 将外部 MS Access 表导入 SQL server 表
从 C# 应用程序更新 MS Access 数据库中新添加的记录时,“并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条”