从excel vba到Access DB的多个同时连接

我正在构build一个使用Access数据库的银行的复杂的Excel工作表。

此表将大量数据加载到预先构build的表单中。 之后,他们可以运行一些macros并添加一些input。最后,我打开一个新的连接,将这些input插入到从一开始查询的那些表中

我的问题是,将信息加载到工作簿时,此操作一次只能由一个用户执行。

当这个进程在一台用户计算机上运行时,其他用户会得到这个错误

Microsoft Office Access数据库引擎无法打开或写入文件“”。 它已经由另一个用户专门打开,或者您需要查看和写入其数据的权限。

我知道用户有权限,因为一旦用户1完成了这个过程,用户2就没有问题了。

我正在使用ADODB(连接,logging集和命令),这是我使用约四个不同时间的代码访问四个不同的存储查询:

Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Dim cmd_apoio As New ADODB.Command Set cnn = New ADODB.Connection cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & PV.dbpath With cmd_apoio .ActiveConnection = cnn .CommandType = adCmdStoredProc .CommandText = "tabela_apoio_entidades" .Parameters.Append .CreateParameter("nip", adNumeric, adParamInput, 20) .Parameters.Append .CreateParameter("anomes", adNumeric, adParamInput, 20) .Parameters(0) = PV.nip_grupo .Parameters(1) = PV.ano_mes End With Set rs = cmd_apoio.Execute() 

(PV。variables是在另一个模块(PV)中声明的公共variables)使用这种方法可以一次允许多个连接吗? 特别是因为这只是检索信息(只读),而不是更新表中的任何logging。

我正在使用Excel 2013和Access 2013,数据库是.accdb

编辑:表格链接到txt文件表(我认为这可能是重要的)

尝试使用rs.Open而不是cmd.Execute ,并指定lockingtypes:

在你End With之后:

 Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.Open cmd_apoio, cnn, adOpenStatic, adLockOptimistic 

你需要明确地设置你的连接模式:

 Set cnn = New ADODB.Connection cnn.Mode = 16 + 3 'adModeShareDenyNone + adModeShareReadWrite ' cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & PV.dbpath 

看到这里: https : //docs.microsoft.com/en-us/sql/ado/reference/ado-api/connectmodeenum

我只能贡献我一直认为excel不是多用户的意见。

在将Excel链接到Access中 – 我已经做了很多工作 – 从Access端工作时,必须始终closuresExcel。 Excel中不能直接存在用户,Access的作用就像表格一样。

你在另一个方向使用Excel作为与Access表链接的前端 – – 但在多用户方面,我想知道情况是否相同。