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 SubfunSetConnectを右クリック→定義とソースを追っていきます。
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ファイルを読込み
それをテーブルリンクとして設定するというものになります。
リンク解除
リンク解除をするとリンクテーブルを削除します。
こちらはリンクテーブルされている状態です。
赤枠のテーブルはリンクテーブルの箇所になります。

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

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


コメント