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ファイルを読込み
それをテーブルリンクとして設定するというものになります。
リンク解除
リンク解除をするとリンクテーブルを削除します。
こちらはリンクテーブルされている状態です。
赤枠のテーブルはリンクテーブルの箇所になります。
リンク解除すると赤枠のリンクテーブルが消えます。
マウスカーソルをテーブルにあてないと見た目消えていないように見えるかもしれません
マウスカーソルをテーブルにふれてみてください
マウスカーソルをテーブルにふれてみてください
コメント