リンクテーブルをVBAで行う方法
私は以下の方法でやっています。
開発環境:win7 + access2010 + MySQL
<テーブル>
link_tbl
tbl_name データ型:テキスト型
→link_tblというのをAccessのローカルテーブルに作成します。(実テーブル)
項目はtbl_nameでデータ型はテキストで、主キー設定は不要です。
<フォーム>
リンク設定ボタン
→メニュー画面を作成しリンク設定ボタンを追加します。
そのボタンクリックイベントをVBAで記述します。
<VBA>
Private Sub cmdリンク設定ボタン_Click() If funSetConnect("link_tbl") = True Then MsgBox "リンク設定が正常に終了しました。", vbInformation + vbOKOnly, "リンク設定" End If End Sub Rem ----------------------------------------------------------- Rem 関数名 : funSetConnect Rem 処理内容 : リンクテーブル接続 Rem 引 数 : pTblNm Rem 戻り値 : 結果 Rem ----------------------------------------------------------- Public Function funSetConnect(pTblNm As String) As Boolean Dim db As Database Dim lnkPath As String Dim rec As Recordset Dim tblNm As String On Error GoTo Error funSetConnect = False Set db = CurrentDb Set rec = db.OpenRecordset(pTblNm, dbOpenDynaset) lnkPath = getLnkPath 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, "ODBC データベース", lnkPath, acTable, tblNm, tblNm, False .MoveNext Loop End With db.Close Set rec = Nothing Set db = Nothing funSetConnect = True Exit Function Error: MsgBox "エラーが発生しました。エラー内容:" & ERR.Description & Chr$(10), vbCritical End Function Rem ----------------------------------------------------------- Rem 関数名 : getLnkPath Rem 処理内容 : ODBC接続文字列取得 Rem 引 数 : なし Rem 戻り値 : 接続文字列 Rem ----------------------------------------------------------- Public Function getLnkPath() As String On Error GoTo ERR ' 接続文字列取得 GsDataBase = ReadINI("MYSQL", "DB_NAME") GsUserName = ReadINI("MYSQL", "DB_USER") GsPassword = ReadINI("MYSQL", "DB_PASS") getLnkPath = "ODBC;DSN=" & GsDataBase & ";UID=" & GsUserName & ";PWD=" & GsPassword & ";LANGUAGE=us_english;DATABASE=" & GsDataBase & "" Exit Function ERR: MsgBox "環境設定ファイルを確認してください。" + Chr$(10) + "読み込めませんでした。", vbCritical End Function
各PCでODBC設定は別途必要です。
ODBCのDSN名等を定義しておくかiniファイルから読込むかすると良いです。