Excel ADO“访问数据库引擎停止了该过程,因为您和另一个用户正在尝试同时更改相同的数据”

问题描述 投票:0回答:2

我从SQL Server检索数据并将其存储在Excel中的工作表上,然后在Excel中运行ADO UPDATE查询以更新不同工作表上的数据。

我没有在开发期间遇到此错误,但用户报告他们经常看到此错误:

请注意,该文件位于网络驱动器上,但即使将文件复制到其他位置,仍然会产生所述错误。

码:

Dim rs  As New ADODB.Recordset
Dim cmd As New ADODB.Command
Dim cnn As New ADODB.Connection

Application.ScreenUpdating = False
Application.EnableEvents = False

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & ThisWorkbook.FullName & "';" & _
         "Extended Properties=""Excel 12.0;HDR=YES;"";"

Set rs = GetOverview
shUpdateSLSheet.UsedRange.clear
WriteHeadersToSheet rs, shUpdateSLSheet.Name, 1
shUpdateSLSheet.Range("A2").CopyFromRecordset rs

If (rs.EOF And rs.BOF) Then GoTo NoData

cmd.ActiveConnection = cnn
cmd.CommandType = adCmdText

cmd.CommandText = "UPDATE [SL$] INNER JOIN [UpdateSLSheet$] " & _
                    "ON ([SL$].ID = [UpdateSLSheet$].ID) " & _
                        "SET [SL$].[CS_A] = [UpdateSLSheet$].[CS_A]" & _
                        ", [SL$].[CS_B] = [UpdateSLSheet$].[CS_B]" & _
                        ", [SL$].[CS_C] = [UpdateSLSheet$].[CS_C]" & _
                        ", [SL$].[CS_D] = [UpdateSLSheet$].[CS_D]" & _
                        ", [SL$].[CS_E] = [UpdateSLSheet$].[CS_E]" & _
                        ", [SL$].[CS_F] = [UpdateSLSheet$].[CS_F]" & _
                        ", [SL$].[Solved By SR] = [UpdateSLSheet$].[SolvedBySR]" & _
                        ", [SL$].[Comments] = [UpdateSLSheet$].[Comments]"

cmd.Execute

Application.EnableEvents = True
Application.ScreenUpdating = True

Set cmd = Nothing
Set rs = Nothing
Set cnn = Nothing

一旦执行了cmd.Execute,就会出现错误。

编辑:我不知道为什么会发生这种情况。在这种情况下,我要采用迭代方法而不是使用ADO。

excel vba ado
2个回答
0
投票

您必须使用open方法记录集并使用锁定类型,以便在添加某个数据库时实际锁定数据库,当此人完成添加数据库时将保存更改,然后另一个人可以开始添加


0
投票

有点晚了,但我有同样的问题,并找到了解决方案:我尝试在连接字符串中使用OLD驱动程序,它就像一个魅力,即使工作簿是XLSM! 希望它可以帮助某人。

sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & wbName
sConn2 = ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
On Error GoTo hell
Set con = New ADODB.Connection
'con.Open sConn & sConn2
con.Open "Driver={Microsoft Excel Driver (*.xls)};" & _
       "DriverId=790;" & _
       "Dbq=" & wbName & ";" & _
       "DefaultDir=" & wbname & ";ReadOnly=False;"
© www.soinside.com 2019 - 2024. All rights reserved.