2013-10-02 205 views
4

我有兩個數據連接到同一Access數據庫中的不同查詢。第二個總是失敗(不管我先跑哪個)。Excel數據連接鎖定訪問數據庫,防止第二連接刷新

當我看數據庫時,我注意到它有一個鎖定文件,我認爲這是造成問題的原因。它保持鎖定狀態,直到關閉Excel文件。 任何人都可以幫助我一旦我的導入完成解鎖數據庫?


附加信息:

我使用Excel和Access 2010

錯誤:

"The text file specification 'MyQuery Link Specification' does not exist. You cannot import, export, or link using the specification."

連接字符串(注:我使用命令類型:表):

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,我試着將我的模式從「Share Deny None」改爲「Read」,但它沒有幫助。我也不明白它爲什麼會有,但我試過。

編輯:我一直在研究這個問題,但找不到解決方案。自從我嘗試在連接字符串ReadOnly = True中添加額外的語句,但沒有運氣。

+0

Fruther Research爲我收到的錯誤提供了Excel Hot Fix和Access Update。如果安裝了這兩者,但它沒有解決問題。 –

回答

5

關於數據連接,我遇到了another issue,解決方案實際上最終解決了這個長期存在的問題!

我的猜測是,祕訣就在於「MaintainConnection =假」:

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 
1

什麼,你可以嘗試在改變模式的連接字符串中

模式=閱讀

代替

Mode = Share Deny無

+0

我試過在我的相關文章中,但無濟於事。但是,這個問題幾年前解決了上述解決方案。謝謝:) –

1

您的答案真的幫了我。我遇到了同樣的問題,但使用Excel文件:使用Microsoft.ACE.OLEDB.12.0訪問另一個Excel(打開時)的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 
+1

太棒了!我很高興這有助於讓你在那裏,並感謝您爲後代添加更新後的代碼:) –