6

我有两个数据连接到同一个 Access DB 中的不同查询。第二个总是失败(不管我先运行哪个)。

当我查看数据库时,我注意到它有一个锁定文件,我认为这是导致问题的原因。在我关闭 Excel 文件之前,它一直处于锁定状态。导入完成后,谁能帮我解锁数据库?


附加信息:

我正在使用 Excel 和 Access 2010。

错误:

“文本文件规范 ' MyQuery链接规范' 不存在。您不能使用该规范导入、导出或链接。”

连接字符串(注意:我使用的是命令类型:表):

Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin
;Data Source=A:\folder\folder\My Database.accdb
;Mode=Share Deny None
;Extended Properties=""
;Jet OLEDB:System database=""
;Jet OLEDB:Registry Path=""
;Jet OLEDB:Engine Type=6
;Jet OLEDB:Database Locking Mode=0
;Jet OLEDB:Global Partial Bulk Ops=2
;Jet OLEDB:Global Bulk Transactions=1
;Jet OLEDB:New Database Password=""
;Jet OLEDB:Create System Database=False
;Jet OLEDB:Encrypt Database=False
;Jet OLEDB:Don't Copy Locale on Compact=False
;Jet OLEDB:Compact Without Replica Repair=False
;Jet OLEDB:SFP=False
;Jet OLEDB:Support Complex Data=False
;Jet OLEDB:Bypass UserInfo Validation=False

最后,根据这篇文章,我尝试将模式从“拒绝共享”更改为“阅读”,但没有帮助。我也不明白为什么会这样,但我试过了。

编辑:我一直在研究这个问题,但找不到解决方案。从那以后,我尝试在我的连接字符串中添加一条附加语句,ReadOnly = True但没有运气。

4

4 回答 4

7

我遇到了另一个关于数据连接的问题,它的解决方案实际上也解决了这个长期存在的问题!

我的猜测是秘密在于“MaintainConnection = False”:

Dim i As Integer
Dim awc As WorkbookConnection
Dim c As OLEDBConnection

For i = 0 to ActiveWorkbook.Connections.Count
    Set awc = ActiveWorkbook.Connections.Item(i)
    Set c = awc.OLEDBConnection
    c.EnableRefresh = True
    c.BackgroundQuery = False
    c.Reconnect
    c.Refresh
    c.MaintainConnection = False
Next i
于 2014-05-30T13:26:49.347 回答
4

你的回答真的帮助了我。我遇到了同样的问题,但是对于 Excel 文件:一个 Excel 文件使用 Microsoft.ACE.OLEDB.12.0 访问另一个 Excel(打开时),并且这个数据源文件被锁定(正在使用)。

因此,我删除了“打开文件时刷新数据”,并将其替换为 Workbook_Open 事件中的 VBA 代码。但是我改进了一点你的代码,因为我遇到了错误,因为我的工作簿中有另一个 ODBC 连接(不是 OLEBD),我不得不添加这个 IF。现在一切正常。

Private Sub Workbook_Open()
    Dim i As Integer
    Dim awc As WorkbookConnection

    For i = 1 To ActiveWorkbook.Connections.Count
        Set awc = ActiveWorkbook.Connections.Item(i)
        If awc.Type = xlConnectionTypeOLEDB Then
            With awc.OLEDBConnection
                .EnableRefresh = True
                .BackgroundQuery = False
                .Reconnect
                .Refresh
                .MaintainConnection = False
            End With
        ElseIf awc.Type = xlConnectionTypeODBC Then
            With awc.ODBCConnection
                .EnableRefresh = True
                .BackgroundQuery = False
                .Refresh
            End With
        End If
    Next i
End Sub
于 2017-07-20T13:58:32.007 回答
1

您可以尝试将连接字符串中的模式更改为

模式=读取

代替

模式=共享拒绝无

于 2016-09-19T23:13:39.507 回答
0

模式=共享拒绝无/读取不起作用

我不得不复制 Workbook_Open Sub

于 2020-09-04T21:51:03.633 回答