Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 为什么ADO连接仍在创建一个;土地发展银行;即使是只读文件也要锁定?_Excel_Vba_Ms Access_Locking_Ado - Fatal编程技术网

Excel 为什么ADO连接仍在创建一个;土地发展银行;即使是只读文件也要锁定?

Excel 为什么ADO连接仍在创建一个;土地发展银行;即使是只读文件也要锁定?,excel,vba,ms-access,locking,ado,Excel,Vba,Ms Access,Locking,Ado,数据库专家的快速问题。请参见从Excel调用的以下代码(VBA/ADO): Dim DBPath As String, ConnStr As String DBPath = ThisWorkbook.Path & Application.PathSeparator & "Database.mdb" ConnStr = "Data Source=" & DBPath & ";" & "Jet OLEDB:Database Password=" & D

数据库专家的快速问题。请参见从Excel调用的以下代码(VBA/ADO):

Dim DBPath As String, ConnStr As String
DBPath = ThisWorkbook.Path & Application.PathSeparator & "Database.mdb"
ConnStr = "Data Source=" & DBPath & ";" & "Jet OLEDB:Database Password=" & DBPass()
Dim cnn as ADODB.Connection
Set cnn = New ADODB.Connection
With cnn
    .Provider = CheckProvider(strPath:=DBPath) ' Separate function call. Ignore
    .Mode = adModeRead
    .Open ConnStr
End With
Stop ' To inspect the directory...
根据“adModeRead”规范,它应该以只读方式打开数据库。但是,我注意到,当连接处于活动状态时,仍在目录中创建/删除一个锁文件(Database.ldb)。当然,这与只读命令相反,只读命令意味着不能写入数据,因此不需要文件锁

有人能解释一下这里发生了什么吗?谢谢


编辑:还有一个后续问题-如果我想在不创建任何锁定文件的情况下以纯只读方式打开连接,还有其他方法吗?

锁定文件记录到db文件的连接。这些信息在多用户环境中非常重要。即使您的连接是唯一的,并且是故意只读的,Access仍会在锁文件中记录该连接。在另一个用户希望以独占模式连接到同一个db文件以进行设计更改的情况下,这一点很重要——当您的连接仍处于活动状态时,他们将不允许独占访问。

谢谢-但我想知道为什么只读连接会影响其他用户进行更改的能力。当然这就是只读的意思,对吗?添加上下文:我是文档的唯一设计者,数据库连接很短,仅通过VBA进行。没有人连接到数据库并使其保持打开状态。我有一个加载数据的Excel工作簿打开事件,当用户进行更改时,会进行短连接以写入数据。我只是不想因为另一个用户正在加载初始数据(需要几秒钟)而阻止某人写。对不起,我完全误解了这个问题。我认为这仅仅是关于为什么要为只读连接创建锁文件。请考虑修改这个问题来澄清你真正追求的是什么。然后我可以删除这个答案。哦,你的答案很有趣,非常感谢!它确实解决了我提出的问题。这只是一个隐含的次要问题,关于我是否还能做些什么来防止锁。我最初没有问这个问题,因为我不确定这种行为是否是错误。我现在添加了第二个问题作为评论。好的。我记得,允许共享访问的ADO连接很棘手。但我不能提供细节,因为我基本上放弃了ADO,转而支持DAO。我仍然认为你应该修改这个问题来明确你的目标,也许其他人可以介入你需要的解决方案。使用
.Mode=admodesharedynone
.Mode=adModeRead+admodesharedynone
,您能得到想要的吗?