MySQLへODBCにて接続しています。
フロントエンドはAccess。
選択クエリの抽出結果をユーザー任意の値に設定する為、フォームに作成したテキストボックスを参照先にしています。
SQLは以下の通り。
SQL
1SELECT test.* FROM test WHERE test.a Like "*" & escape_replace([Forms]![aaa]![テキストボックス名]) & "*";
エスケープ文字に対応する為、escape_replace自己関数を作成し、エスケープ処理を行っています。
VBA
1Public Function escape_replace(myStr As String) As String 2 3 If myStr Like "*[]*" Then myStr= Replace(myStr, "\", "\") ' (1) 4 5 If myStr Like "*[*]*" Then myStr= Replace(myStr, "*", "[*]") ' (2) 6 If myStr Like "*[*]*" Then myStr= Replace(myStr, "*", "*") ' (3) 7 8 If myStr Like "*[?]*" Then myStr= Replace(myStr, "?", "[?]") ' (4) 9 If myStr Like "*[?]*" Then myStr= Replace(myStr, "?", "?") ' (5) 10 11 escape_replace= myStr 12 13End Select
※(2)(3)、(4)(5)はそれぞれを有効化し、結果をチェック済
しかしながら、テキストボックスに [*]アスタリスク と [?]クエスチョンマーク を設定した場合、このデータだけが正常にデータ結果として表示されません。
※他の文字となる \ % _ などは(1)と同処理にて、正常にエスケープ処理ができ、データ結果も正常です
又、テキストボックスを参照せず、直接、以下のように値を設定すると正常なデータが表示されます。
SQL
1SELECT test.* FROM test WHERE test.a Like "*[*]*";
ログ(general_log)を確認したところ、上記の(2)に関しては、以下のクエリが実行されていました。
SELECT `test`.`a` FROM `test` WHERE (`a` LIKE '%[%]%' )
※[]を指定しているはずが、[%]として実行されているので、これが原因だと思われます
色々検証をしていますが、上記の[%]を[]に設定するエスケープ処理が分かりません。
アドバイス頂けると助かります。
回答1件
あなたの回答
tips
プレビュー