2013-11-15 82 views
0

我被要求在Access 2007 VBA數據庫上進行一些維護。Access 2007 VBA:將Tabledef.Connect屬性設置爲無效路徑

它已將錶鏈接到同一文件夾中的另一個Access數據庫。它有硬編碼的鏈接到該數據庫,所以如果用戶將該文件夾複製到一個新文件夾,它試圖使用原始文件夾中的鏈接數據庫。他們要求我消除在這種情況下使用錯誤鏈接數據庫的危險。

我添加了在打開數據庫時運行的代碼,以使其重置到其自己的文件夾中的數據庫的鏈接。如果鏈接的數據庫不存在或被重命名,則會提示用戶瀏覽到正確的數據庫。到現在爲止還挺好。

但是,如果用戶取消該對話框,我不想讓它連接到錯誤的數據庫。我想要將鏈接的tabledef的Connect屬性設置爲「正確」路徑,即使該表不存在。然後,用戶將得到一個錯誤,即鏈接表不存在,直到它們複製到鏈接數據庫中 - 而不是無意中使用錯誤的數據庫。

當我使用Resume Next來越過將Connect屬性設置爲不存在的數據庫時引發的錯誤時,更改不會粘住,從而將其連接到錯誤的數據庫。因此,現在,我正在關閉數據庫(在警告用戶無法找到鏈接的數據庫之後)。就不使用錯誤的數據庫而言這是安全的,但我認爲這不是理想的用戶體驗。

因此 - 是否可以將Tabledef的Connect屬性設置爲不存在的數據庫?

感謝,

格雷格

+0

您可以將鏈接數據庫的路徑存儲在表中,並在打開數據庫時檢查它是否與currentproject.path相同。 – Fionnuala

回答

1

是有可能的的TableDef的連接屬性設置爲一個不存在的數據庫?

我不這麼認爲。我建議你先刪除所有的鏈接表,然後如果沒有數據庫連接,則顯示錯誤。

爲了重新鏈接表格,您需要在您的前端文件中擁有一個本地表格,其中包含要鏈接的所有表格的列表。然後,每次需要重新鏈接表時,都需要遍歷該列表,假設鏈接已全部刪除。

0

爲了更新表的鏈接,使它們無效,你需要

  • 創建後端數據庫的臨時副本(或者是一個「骨架」後端數據庫的空的臨時副本表)
  • 更新錶鏈接指向臨時數據庫,然後
  • 刪除臨時數據庫。

例如,如果我運行下面的代碼

Option Compare Database 
Option Explicit 

Sub MakeBadLink() 
    Const linkedTableName = "myLinkedTable" ' test value 
    Dim cdb As DAO.Database, tbd As DAO.TableDef 
    Dim tempFolder As String, linkedDb As String, tempDb As String 
    Dim fso As FileSystemObject 
    Set cdb = CurrentDb 
    linkedDb = Mid(cdb.TableDefs(linkedTableName).Connect, 11) ' remove ";DATABASE=" prefix 
    Set fso = New FileSystemObject 
    tempFolder = fso.GetSpecialFolder(TemporaryFolder) & "\" 
    tempDb = tempFolder & fso.GetFileName(linkedDb) 
    fso.CopyFile linkedDb, tempDb, True 
    Set tbd = cdb.TableDefs(linkedTableName) 
    tbd.Connect = ";DATABASE=" & tempDb 
    tbd.RefreshLink 
    Set tbd = Nothing 
    Set cdb = Nothing 
    fso.DeleteFile tempDb 
    Set fso = Nothing 
End Sub 

那麼任何後續嘗試使用[myLinkedTable]導致錯誤

找不到文件`C:\用戶\戈德\應用程序數據\本地的\ Temp \ myDb.accdb」。