Excel数据连接locking访问数据库,防止第二个连接的刷新

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

当我查看数据库时,我注意到它有一个locking文件,我认为这是造成问题的原因。 它保持locking,直到我closuresExcel文件。 任何人都可以帮我解锁数据库一旦我的导入完成?


附加信息:

我正在使用Excel和Access 2010。

错误:

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

连接string( 注意:我正在使用命令types:表 ):

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 

最后,基于这篇文章 ,我试图将我的模式从“共享拒绝无”改为“阅读”,但没有帮助。 我也不明白为什么会这样,但是我尝试了。

编辑:我一直在研究这个问题,但无法find解决scheme。 我已经尝试在我的连接string中添加额外的语句, ReadOnly = True但没有运气。

我还面临着另外一个关于数据连接的问题 ,而解决这个问题的办法实际上也解决了这个长期存在的问题!

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

你的回答真的帮了我。 我有同样的问题,但与Excel文件:Excel文件访问另一个Excel(打开时)与Microsoft.ACE.OLEDB.12.0和此数据源文件被locking(使用中)。

因此,我删除了“打开文件时刷新数据”,并将其replace为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 

你可以尝试的是改变连接string中的模式

模式=读取

代替

模式=共享拒绝无