Access VBA mySQL の 顧客マスタを検索するクエリを作成する

Access VBA から MySQL の「顧客マスタ(customer_master など)」テーブルを検索するクエリを作成するには、以下の3つの方法があります:


目次

✅ 方法1:パススルークエリを使う(推奨)

MySQL に直接 SQL を送信する方法。高速で安定。

1. パススルークエリ作成(VBA)

Sub RunPassThroughQuery()

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim sql As String

    ' MySQL用のSQL(例:名前であいまい検索)
    sql = "SELECT * FROM customer_master WHERE name LIKE '%山田%';"

    Set db = CurrentDb
    
    ' 既存のクエリを削除して再作成
    On Error Resume Next
    db.QueryDefs.Delete "qryCustomerSearch"
    On Error GoTo 0

    ' パススルークエリを作成
    Set qdf = db.CreateQueryDef("qryCustomerSearch")
    qdf.SQL = sql
    qdf.ReturnsRecords = True
    qdf.Connect = "ODBC;DSN=MySQL_DSN;UID=root;PWD=root;" ' DSN名を適切に変更

    ' クエリを実行し、結果を表示
    DoCmd.OpenQuery "qryCustomerSearch"

End Sub

✅ 方法2:ADO を使って動的検索+フォームに出力

Sub SearchCustomerADO()

    Dim conn As Object
    Dim rs As Object
    Dim sql As String

    sql = "SELECT * FROM customer_master WHERE name LIKE '%山田%';"

    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Driver={MySQL ODBC 8.0 ANSI Driver};Server=localhost;Database=testdb;UID=root;PWD=root;" ' 要調整

    Set rs = conn.Execute(sql)

    ' フィールドを即時ウィンドウに出力(確認用)
    Do Until rs.EOF
        Debug.Print rs!id & " - " & rs!name
        rs.MoveNext
    Loop

    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing

End Sub

✅ 方法3:リンクテーブル+通常のAccessクエリ

MySQL の customer_master テーブルを Access に ODBCリンクしておけば、
Access クエリデザイナで直接:

SELECT * FROM customer_master WHERE name LIKE '*山田*';

と記述できます(AccessのLIKEは * ワイルドカードを使う点に注意)。


よかったらシェアしてね!
目次