2014-03-07 53 views
0

我有一個excel工作簿,其中包含25張工作表。每張工作表都有一個到MS Access查詢的數據連接。每個訪問查詢都有一個或多個來自InterSystemsCaché數據庫的鏈接表。這是來自其中一個連接字符串。Excel通過ODBC緩存訪問數據庫 - 鎖定許可問題

Provider = Microsoft.ACE.OLEDB.12.0; User ID = Admin; Data Source = \ DIR \ SUBDIR \ XXX \ Database \ CAST \ CAST_CLIENT_SETTINGS.mdb; Mode = Share Deny Write; Extended Properties =「」; Jet OLEDB:系統數據庫=「」; Jet OLEDB:註冊表路徑=「」; Jet OLEDB:引擎類型= 5; Jet OLEDB:數據庫鎖定模式= 0; Jet OLEDB:全局部分Bulk Ops = 2; Jet OLEDB:全局批量事務= 1; Jet OLEDB:New Database Password =「」; Jet OLEDB:創建系統數據庫= False; Jet OLEDB:加密數據庫= False; Jet OLEDB:不復制區域設置緊湊= False; Jet OLEDB:緊湊無副本修復= False; Jet OLEDB:SFP = False; Jet OLEDB:支持複雜數據= False; Jet OLEDB:繞過UserInfo驗證= False

後臺刷新未啓用且命令類型爲表。

Access數據庫具有25個鏈接到高速緩存數據庫的ODBC表。訪問數據庫中有25個查詢,每個查詢都使用一個或多個鏈接表。在每個記錄中鎖定否和記錄集類型Dynaset。

在excel工作簿中有一個包含一些vba代碼的按鈕,可以啓動所有25張紙的刷新以恢復最新信息。這工作得很好,除了花幾分鐘時間,但的問題是,它鎖定了25個緩存中的許可證,並保持鎖定,直到工作簿關閉。

該公司只有50個許可證,所以我不能使用這麼多。我有什麼設置可以阻止這種情況發生?我可以更改模式,鎖定模式,記錄集類型,後臺刷新,使用傳遞?我可以在vba中寫入一些東西來刷新這些鎖嗎?人們使用該實用程序來實時跟蹤他們在對應於高速緩存DB的應用程序中所做的更改,其中相對於

在它被完全廢棄之前,我希望有一個人有一個想法,如果可能的話,它只能使用一個許可證。謝謝你的幫助。

回答

0

你必須看看該按鈕背後的代碼它是如何做的。我猜想它同時啓動了所有25個查詢。你可能不得不改變它來刷新一個,然後等到那個完成之後再刷新下一個。

+0

感謝您的回答。我循環瀏覽書中的所有表單並執行此操作 - Selection.QueryTable.Refresh BackgroundQuery:= False。有沒有辦法讓進程等待,直到1查詢更新之前,移動到下一個或我需要使用某種睡眠功能? – 45Spartacus

+0

這篇文章可能會幫助你:[鏈接到帖子](http://answers.microsoft.com/en-us/office/forum/office_2007-customize/using-vba-to-update-a-spreadsheet-with-a -data/ae9e55b2-1b40-42ef-98b3-289e643c08e4) – Nybbe

0

我知道,這是一個非常古老的職位,但默認情況下,Excel中保持OLEDB/ODBC連接開放(從而鎖定在使用Access數據庫。)

通過連接字符串配置的無金額從做停止的Excel這個。與預期相反,設置共享拒絕模式或只讀模式不會讓您擺脫麻煩。但是,您可以通過代碼修改連接的屬性,以防止使用.MaintainConnection屬性的行爲。 UI中沒有設置來修改此屬性。

試試這個代碼:

Function unlock_conns() 
Dim conn 

For Each conn In ActiveWorkbook.Connections 
    Select Case conn.Type 
     Case xlConnectionTypeOLEDB 
      conn.OLEDBConnection.MaintainConnection = False 
     Case xlConnectionTypeODBC 
      conn.ODBCConnection.MaintainConnection = False 
    End Select 
Next conn 

End Function