【lesson1-1】AccessVBAでリンクテーブルの制御を行う方法

スポンサーリンク

AccessVBAでリンクテーブルの制御を行う方法を紹介します。

別の場所にあるAccessDBファイルの中にあるテーブルをリンクテーブルとして使用したい時に有効です。

スポンサーリンク

【lesson1-1】(1)事前準備

■必要なもの
・【lesson1-1】リンクテーブル.accdb
・access_db.ini ・・・DBファイルの格納フルパス
・DB_ver1.00.accdb・・・DBファイル

access_db.ini

access_db.iniにはDBファイルのパスを指定

[DB_INF]
DB_PATH =D:\app_access_test\lesson1-1\DB_ver1.00.accdb・・・←★ここのパスとファイル名を変更する

【lesson1-1】リンクテーブル.accdb

link_tblテーブルにテーブルを登録

例)
t_uke
t_saiban

ここに登録されているテーブルがリンクテーブルされるので不要なテーブルは消す

【lesson1-1】(2)Accessを起動

Shiftキーを押しながら「【lesson1-1】リンクテーブル.accdb」を起動する

リンク更新

クリック時→イベントプロシージャ―を表示

Rem ----------------------------------------------------------------------------------
Rem         Click/リンク更新
Rem ----------------------------------------------------------------------------------
Private Sub cmdリンク更新_Click()
    If funSetConnect("link_tbl") = True Then
        MsgBox "リンク設定が正常に終了しました。", vbInformation + vbOKOnly, "リンク設定"
    End If
End Sub

funSetConnectを右クリック→定義とソースを追っていきます。
funSetConnectでは、リンクテーブルを更新しています。
リンクテーブルは手動でも可能ですがVBAで実行することで非常に効率的に実行可能で
特にテーブルの件数が多い場合は間違いなくできるので良いです。

Public Function funSetConnect(pTblNm As String) As Boolean
Dim db As Database
Dim lnkPath As String
Dim rec As Recordset
Dim tblNm As String
Dim tbl As DAO.TableDef

On Error GoTo Error
    
    funSetConnect = False
    
    Set db = CurrentDb
    ' 事前準備でおこなったlink_tblテーブルを取得
    Set rec = db.OpenRecordset(pTblNm, dbOpenDynaset)
    ' テーブルリンクしたいDBファイルのパス
    lnkPath = getLnkPath

  ' link_tblテーブルの項目名を登録件数分繰り返し
    With rec
        If .EOF = False Then .MoveFirst
        Do Until .EOF
            tblNm = rec.Fields(0)
            ' テーブル存在チェック
            If ExistTable(tblNm) Then
                ' 削除 
                db.TableDefs.Delete tblNm
            End If
            ' テーブルリンクする(テーブルリンクする際に別名でリンクすることも可能です)
            DoCmd.TransferDatabase acLink, "Microsoft Access", lnkPath, acTable, tblNm, tblNm, False
            .MoveNext
        Loop
    End With
       
    db.Close
    
    Set rec = Nothing
    Set db = Nothing
    
    
    ' 再表示
    RefreshDatabaseWindow
    
    
    funSetConnect = True
    
Exit Function
Error:
    MsgBox "エラーが発生しました。エラー内容:" & Err.Description & Chr$(10), vbCritical
End Function

ここでおこなっている箇所でポイントは
lnkPath = getLnkPath

の箇所です。
getLnkPathでINIファイルで指定した外部のDBファイルを読込み
それをテーブルリンクとして設定するというものになります。

リンク解除

リンク解除をするとリンクテーブルを削除します。
こちらはリンクテーブルされている状態です。
赤枠のテーブルはリンクテーブルの箇所になります。

リンク解除すると赤枠のリンクテーブルが消えます。

マウスカーソルをテーブルにあてないと見た目消えていないように見えるかもしれません
マウスカーソルをテーブルにふれてみてください

コメント

タイトルとURLをコピーしました