【问题标题】:Why is an ADO connection still creating an "ldb" lock file even when read-only?为什么即使是只读的 ADO 连接仍会创建“ldb”锁定文件?
【发布时间】:2015-12-09 17:10:24
【问题描述】:

数据库专家的快速问题。请参阅以下从 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)。当然这与只读命令相反,这应该意味着不能写入任何数据,因此不需要文件锁。

谁能解释这里发生了什么?谢谢。

编辑:还有后续 - 如果我想以纯只读方式打开连接而不创建任何锁定文件,还有其他方法吗?

【问题讨论】:

    标签: excel vba ms-access locking ado


    【解决方案1】:

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

    【讨论】:

    • 谢谢 - 但我想知道为什么只读连接会影响其他用户进行更改的能力。当然这就是只读的意思,对吧?添加上下文:我是文档的唯一设计者,数据库连接很短,只能通过 VBA 进行。没有人连接到数据库并使其保持打开状态。我有一个加载数据的 Excel Workbook_Open 事件,然后当用户进行更改时,会建立短连接来写入数据。我只是不希望有人因为另一个用户正在加载初始数据(这需要几秒钟)而被阻止写入。
    • 对不起,我完全误解了这个问题。我认为这只是关于为什么为只读连接创建锁定文件的原因。请考虑修改问题以澄清您真正追求的目标。然后我可以删除这个答案。
    • 哦,你的回答很有趣——非常感谢!它确实解决了我提出的问题。这只是一个隐含的次要问题,关于我是否可以做任何其他事情来防止锁定。我最初没有问这个问题,因为我不确定这种行为是否是错误的。我现在已将次要问题添加为评论。
    • 好的。我记得最好,允许共享访问的 ADO 连接很棘手。但我不能提供细节,因为我在很大程度上放弃了 ADO 转而支持 DAO。我仍然认为您应该修改问题以澄清您的目标,也许其他人可以介入您需要的解决方案。
    • 嗯。 .Mode=adModeShareDenyNone.Mode=adModeRead+adModeShareDenyNone 能得到你想要的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多