我正在为使用Access数据库的银行构建一个稍微复杂的Excel工作表。从excel vba到Access DB的多个同时连接
此表将一吨数据加载到预先构建的工作表。 之后,他们可以运行一些宏,并添加一些输入 最后,我打开一个新的连接,从那些地方在开始查询插入不同的表这些投入
我的问题是,当装载将信息发送到工作簿,此操作一次只能由一个用户执行。
当这个过程是在一个用户计算机的其他用户运行出现错误
The Microsoft Office Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.
我知道,因为一旦这个过程对用户1进行的用户有权限,用户2有没有问题。
我使用ADODB(连接,记录和命令),这是我的代码使用四个不同的存储查询四种不同次访问:
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)中) 使用这种方法可以一次允许多个连接吗? 特别是因为这只是检索信息(只读)而不是更新表中的任何记录。
我用Excel 2013和Access 2013,数据库是.ACCDB
编辑:表是链接表,TXT文件(我认为这可能是重要的)
我这样做,去掉'设置RS = cmd_apoio.Execute()' 我得到的错误: 运行时错误“3707” 无法更改Recordset对象至极的ActiveConnection属性有一个命令对象作为其源 –
删除'。ActiveConnection = cnn'然后再试一次 –
仍然得到了同样的错误,我从'rs.Open cmd_apoio,,adOpenStatic,adLockOptimistic'等开放语句中删除了cnn,并保留'.ActiveConnection = cnn'。 这可行,因为它在运行,但不能解决多用户问题 –