Access的資料表可以連結外部資料,包含ODBC、Access檔案的資料、甚至是文字檔,我們今天要來介紹,如何使用VBA程式來產生外部Access的資料表連結。
為何要連結外部的Access檔案呢?如果你的Access檔案製作出來後,是要給多人使用,且時常更新時,能將個人使用的資訊,另外儲存於外部的Access檔案,更新主Access檔案時,將有助於避免蓋掉user端的資料,讓新程式開啟時,可以直接套用舊有資料。
以下子程式可以將指定的「資料表」複製結構到名為「本檔案名稱+_Local.mdb」的檔案,然後使用連結資料表連回現有檔案內使用,外部MDB檔儲存於TEMP資料夾中,若該檔案不存在,則會自動建立一個使用:
Function CreateAndLinkLocal(strTableOrg As String, strTable As String)
'建立外部 _Local.mdb 檔案來存放指定樣式的資料表
'若檔案已存在,則進行連結資料表
'strTableOrg 主程式資料表名稱
'strTable 複製到外部MDB後,連結回主程式的資料表名稱
Dim ws As Workspace
Dim db As Database
Dim LFilename As String
On Error GoTo ErrHandler:
'如果連結資料表存在,則刪除資料表
If ifObjectExists(strTable) = True Then
CurrentDb.TableDefs.Delete strTable
End If
Set ws = DBEngine.Workspaces(0)
LFilename = Environ("temp") & "\" & CurrentProject.Name & "_Local.mdb"
If Dir(LFilename) = "" Then
'如果外部資料檔案不存在,產生檔案
Set db = ws.CreateDatabase(LFilename, dbLangGeneral)
'然後轉出資料表結構,到該檔案中
DoCmd.TransferDatabase acExport, "Microsoft Access", LFilename, acTable, strTableOrg, strTable, True
db.Close
Set db = Nothing
End If
'建立外部連結資料表
Set db = CurrentDb()
Set tdf = db.CreateTableDef(strTable)
tdf.Connect = ";DATABASE=" & LFilename
tdf.SourceTableName = strTable
db.TableDefs.Append tdf
tdf.RefreshLink
Set tdf = Nothing
Set tbl = Nothing
Exit Function
ErrHandler:
Debug.Print Err.Number & " " & Err.Description
If Err.Number = 3265 Or Err.Number = 3012 Or Err.Number = 3219 Then
Resume Next
End If
If Err.Number = 3011 Then
DoCmd.TransferDatabase acExport, "Microsoft Access", LFilename, acTable, strTableOrg, strTable, True
Resume
End If
Resume Next
End Function
我們拿Config資料表來解說,例如我希望將Config資料表結構,複製一份到ConfigLocal資料表,並儲存於暫存資料夾中,以便讓本地端的user紀錄較為個人化的資料,且不是很重要的資料:
Sub CreateAndLinkLocal測試()
Call CreateAndLinkLocal("Config", "ConfigLocal")
End Sub
我們可以於系統環境中的%temp%資料夾中(Win+R後輸入%temp%開啟此路徑),看到VBA產生的檔案:
開啟後可以看到ConfigLocal資料表:
於原本的MDB檔內也可看到新增的資料檔:
打開後為全新的資料表,只有結構,沒有任何資料:
以上的介紹希望各位對各位有幫助,各位可以依照自己的需求來改造,相信可以打造出更多功能與更符合自己需求的程式。