AccessからMySQLのテーブルを取得する
MySql community
MySQL Community Editionは、世界で最も多く使用されているオープンソース・データベースの、無償で自由にダウンロードして利用することができるバージョンです。
GPLライセンスに従って利用することができ、多くのオープンソース・デベロッパーが参加する、巨大で活発なコミュニティによるサポートを享受することができます。
https://www.mysql.com/jp/products/community
MySQL Connector/ODBC
1. 必要な準備
1-1. MySQL Connector/ODBCのインストール
1.MySQL Connector/ODBCをダウンロードしてインストールします。
1.インストール後、Windowsの「ODBC Data Source Administrator」でMySQLへの接続を設定できます。
MySQL Connector/ODBC
https://dev.mysql.com/downloads/connector/odbc
1-2. MySQLの接続情報を確認
•サーバーアドレス(例: localhost または IP アドレス)
•ポート番号(デフォルトは 3306)
•データベース名(例: testdb)
•ユーザー名とパスワード

DAO … Data Access Objects
1.VBAエディタを開く(Alt + F11)。
2.**[ツール] → [参照設定]**を選択。
3.Microsoft Office XX.X Access Database Engine Object Library(最新バージョン)をチェック。
4.古い DAO 3.6 がチェックされている場合は、そのチェックを外す。

ADO … ActiveX Data Object
1.1 ADOライブラリの参照設定
ADOを使用するには、プロジェクトで参照設定を行う必要があります。
1.VBAエディタを開く(Alt + F11)。
2.メニューから [ツール] > [参照設定] を選択。
3.Microsoft ActiveX Data Objects x.x Library にチェックを入れる
(x.x はバージョン、一般的には最新の「6.1」がおすすめ)。
4.[OK]をクリック。

接続文字列 MySQL 基本構文
Driver={MySQL ODBC 8.0 Unicode Driver};
Server=[サーバーアドレス] ;
Database=[データベース名] ;
User=[ユーザー名] ;
Password=[パスワード] ;
Option=[オプション];"
接続テスト
MySQLへの接続テスト
Option Compare Database 'CursorTypeEnum(カーソルタイプ) Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3 'ロックタイプ Const adLockReadOnly = 1 Const adLockPessimistic = 2 Const adLockOptimistic = 3 Const adLockBatchOptimistic = 4
ErrHandler:<br>Debug.Print "エラーが発生しましSub mysql_connect_Test() Dim ado As Object ' ADO Connectionオブジェクト Dim res As Object ' ADO Recordsetオブジェクト Dim strDsn As String ' 接続用DSN(ここでMySQLサーバー情報を設定) strDsn = "" strDsn = strDsn + "Driver={MySQL ODBC 8.0 Unicode Driver};" strDsn = strDsn + "Server=localhost;" ' サーバーアドレス strDsn = strDsn + "Database=eng001;" ' データベース名 strDsn = strDsn + "User=db_user;" ' ユーザー名 strDsn = strDsn + "Password=db_user;" ' ユーザーバスワード strDsn = strDsn + "Option=3;" Debug.Print strDsn On Error GoTo ErrHandler ' エラー処理開始 Set ado = CreateObject("ADODB.Connection") ado.Open strDsn If ado.State = 1 Then Debug.Print "接続成功!!"; ado.State ' ここに 処理を記述する ado.Close Set ado = Nothing Exit Sub ErrHandler: Debug.Print "エラーが発生しました: " & Err.Description If Not ado Is Nothing Then If ado.State = 1 Then ado.Close Set ado = Nothing End If End Sub た: " & Err.Description<br>If Not ado Is Nothing Then<br>If ado.State = 1 Then ado.Close<br>Set ado = Nothing<br>End If<br>End Sub
テーブル一覧の取得
Function ado_Dsn_MySql() As String Dim strDsn As String strDsn = "" strDsn = strDsn + "Driver={MySQL ODBC 8.0 Unicode Driver};" strDsn = strDsn + "Server=localhost;" strDsn = strDsn + "Database=eng001;" strDsn = strDsn + "User=db_user;" strDsn = strDsn + "Password=db_user;" strDsn = strDsn + "Option=19;" ado_Dsn_MySql = strDsn End Function
Sub sql_GetTableList() Dim ado As Object ' ADO Connection Dim res As Object ' ADO Recordset Dim strDsn As String Dim strSQL As String Debug.Print "テーブル一覧" strDsn = ado_Dsn_MySql() On Error GoTo ErrHandler Set ado = CreateObject("ADODB.Connection") ' ADO接続作成 ado.Open strDsn ' mySQLに接続 strSQL = "SHOW TABLES;" ' テーブル一覧を取得するSQL Set res = ado.Execute(strSQL) ' クエリ実行 Do Until res.EOF ' テーブル名をDebug出力 Debug.Print res.Fields(0).Value res.MoveNext Loop ado.Close: Set ado = Nothing Exit Sub ErrHandler: MsgBox "エラーが発生しました: " & Err.Description, vbExclamation, "エラー" On Error Resume Next If Not res Is Nothing Then If res.State = 1 Then res.Close Set res = Nothing End If If Not ado Is Nothing Then If ado.State = 1 Then ado.Close Set ado = Nothing End If End Sub
テーブルの検索
Sub ado_Select_Table() Dim ado As Object ' ADO Connectionオブジェクト Dim res As Object ' ADO Recordsetオブジェクト Dim strDsn, strSQL As String Dim i As Integer strDsn = ado_Dsn_MySql() ' 接続文字列の取得 strSQL = "SELECT * FROM 顧客マスタ" ' 実行するSQL文の作成 Set ado = CreateObject("ADODB.Connection") ' ADO オブジェクトの作成 ado.Open strDsn 'データベースへの接続 Set res = CreateObject("ADODB.Recordset") 'レコードセットの作成 res.Open strSQL, ado, adOpenKeyset, adLockReadOnly On Error GoTo ErrorHandler ' データを表示 For i = 0 To res.Fields.Count - 1 ' ヘッダーを書き込む Debug.Print res.Fields(i).Name & ":"; Next i Debug.Print While Not res.EOF For i = 0 To res.Fields.Count - 1 Debug.Print res.Fields(i).Value & ":"; Next i res.MoveNext Debug.Print Wend res.Close: Set res = Nothing ' 終了処理 ado.Close: Set ado = Nothing Exit Sub ErrorHandler: MsgBox "エラー: " & Err.Description If Not res Is Nothing Then If res.State = 1 Then res.Close Set res = Nothing End If If Not ado Is Nothing Then If ado.State = 1 Then ado.Close Set ado = Nothing End If Set ws = Nothing End Sub
テーブルのインポート
Sub ImportMySQLTable_ODBC() Dim conn As Object Dim strConnect_ado As String Dim strConnect_dao As String Dim strSQL As String Dim rst As Object Dim db As DAO.Database Dim tblName As String Dim mysqlTable As String tblName = "import_顧客マスタ" ' Access側のテーブル名 mysqlTable = "顧客マスタ" ' MySQL側のテーブル名 strConnect_ado = ado_Dsn_MySql() ' 接続文字列(MySQL ODBC 8.0 ドライバ使用例) strConnect_dao = "ODBC;" & strConnect_ado Set conn = CreateObject("ADODB.Connection") ' ADO接続を作成 conn.Open strConnect_ado strSQL = "SELECT * FROM " & mysqlTable ' SQLでMySQLテーブルから全データを取得 Set rst = CreateObject("ADODB.Recordset") ' ADOレコードセットを開く rst.Open strSQL, conn, 1, 3 ' 1 = adOpenKeyset, 3 = adLockOptimistic Set db = CurrentDb ' DAOでAccess DBを取得 On Error Resume Next ' 既にテーブルが存在する場合、削除 db.TableDefs.Delete tblName On Error GoTo 0 ' レコードセットをAccessにインポート DoCmd.TransferDatabase acImport, "ODBC Database", strConnect_dao, _ acTable, mysqlTable, tblName, False rst.Close: Set rst = Nothing ' 後始末 conn.Close: Set conn = Nothing Set db = Nothing MsgBox "インポートが完了しました: " & tblName End Sub

リンクテーブルによる更新
Sub create_LinkTable_mysql() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim strConnect As String Dim linkedTableName As String Dim mysqlTableName As String linkedTableName = "Linked_顧客マスタ" ' Accessで表示するテーブル名 mysqlTableName = "顧客マスタ" ' MySQL側のテーブル名 strConnect = dao_Dsn_MySql() ' 接続文字列(MySQL ODBC 8.0 ANSI ドライバ) Set db = CurrentDb ' 現在のAccessデータベースを取得 On Error Resume Next ' 既存のリンクテーブルがあれば削除 db.TableDefs.Delete linkedTableName On Error GoTo 0 Set tdf = db.CreateTableDef(linkedTableName) ' 新しくリンクテーブルを作成 tdf.SourceTableName = mysqlTableName tdf.Connect = strConnect db.TableDefs.Append tdf MsgBox "リンクテーブルが作成されました: " & linkedTableName End Sub