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は * ワイルドカードを使う点に注意)。
