iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 27
0
自我挑戰組

Access VBA的眉眉角角系列 第 27

Access VBA 的眉眉角角Day27: 連結外部Access檔案

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產生的檔案:
http://ithelp.ithome.com.tw/upload/images/20161217/20007221tuQ2q6BHMG.png

開啟後可以看到ConfigLocal資料表:
http://ithelp.ithome.com.tw/upload/images/20161217/20007221EhvayX0dHP.png

於原本的MDB檔內也可看到新增的資料檔:
http://ithelp.ithome.com.tw/upload/images/20161217/20007221GdVZ3WjA2O.png

打開後為全新的資料表,只有結構,沒有任何資料:
http://ithelp.ithome.com.tw/upload/images/20161217/20007221Zq8GFsdoXI.png

以上的介紹希望各位對各位有幫助,各位可以依照自己的需求來改造,相信可以打造出更多功能與更符合自己需求的程式。


上一篇
Access VBA 的眉眉角角Day26: Windows認證與Active Directory認證
下一篇
Access VBA 的眉眉角角Day28: 連結外部ODBC資料表
系列文
Access VBA的眉眉角角30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言