【问题标题】:Excel Data Connection Locks Access DB, Prevents Second Connection's RefreshExcel 数据连接锁定访问数据库,防止第二个连接的刷新
【发布时间】:2013-10-08 23:18:58
【问题描述】:

我有两个数据连接到同一个 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

最后,基于this post,我尝试将模式从“拒绝共享”更改为“读取”,但没有帮助。我也不明白为什么会这样,但我试过了。

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

【问题讨论】:

  • 进一步研究为我收到的错误提供了 Excel 热修复和访问更新。这两个都安装了,但没有解决问题。

标签: excel ms-access import connection-string


【解决方案1】:

Mode=Share Deny None/Read 不起作用

我不得不复制 Workbook_Open Sub

【讨论】:

    【解决方案2】:

    你的回答对我很有帮助。我遇到了同样的问题,但是对于 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
    

    【讨论】:

    • 太棒了!我很高兴这能帮助您到达那里,并感谢您为后代添加更新的代码:)
    【解决方案3】:

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

    我的猜测是秘密在于“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
    

    【讨论】:

    • 我想知道这是否可以通过设置而不是代码来完成?
    • 如果你有办法,一定要告诉我!
    【解决方案4】:

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

    模式=读取

    而不是

    Mode=共享拒绝无

    【讨论】:

    • 我已经在我的相关帖子中尝试过,但无济于事。但是,这个问题在几年前通过上述解决方案得到了解决。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多