こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA 非連結テキストボックスからの検索

検索用フォームのテキストボックスからの検索についてご教授ください。

OS:Windows7Pro(32Bit)
Ver:Access2010
DB:MySQL5.6 Windows版

◎検索フォームの非連結テキストボックス
txt顧客ID
txt顧客カナ(先頭一致)
上記いずれかで、検索したい場合のSQL文の書き方。

ソース
Private Sub cmd検索_Click()
'顧客情報検索
'Mysql接続変数定義
Dim con As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim stSQL As String

'DB接続
con.Open "Driver={mySQL ODBC 5.3 Unicode Driver}; Server=localhost; Database=jinq; Uid=jinq_a; Pwd=jinqadmin; "

On Error GoTo Err
'SQL文
stSQL = "SELECT * FROM t_kokyaku"
stSQL = stSQL & " WHERE(CusID =" & Me!txt顧客ID & ")"
stSQL = stSQL & " OR(kana Like ’" & Me!txtお客様カナ & "'%);"
Debug.Print "SQL: [" & stSQL & "]"
'SQL文実行&レコードセット代入
Set rs = con.Execute(stSQL)

上記のプロジージャーを実行した結果、当然ですが、エラーとなります。
stSQL:SELECT * FROM t_kokyaku WHERE(CusID =) or(Kana Like 'txt顧客カナ%');
[MySQL][ODBC 5.3(w) Driver][mysqld-5.6.22-enterprise-commercial-advanced-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') OR(kana Like 'txt顧客カナ%')' at line 1

複数のテキストボックスの値で検索する場合、どういった書き方をすればよいのでしょうか?

最終的には、顧客ID、顧客名、顧客カナ、電話番号でいずれかの条件で検索できればと考えています。

アドバイス頂けましたら、幸いです。

投稿日時 - 2015-02-04 16:13:33

QNo.8910976

困ってます

質問者が選んだベストアンサー

コードの順序として、

'顧客情報検索
'Mysql接続変数定義
Dim con As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim stSQL As String

'SQL文
If Not IsNull(Me!txt顧客ID) And Not IsNull(Me!txt顧客カナ) Then
stSQL = "SELECT * FROM t_kokyaku"
stSQL = stSQL & " WHERE (CusID =" & Me!txt顧客ID & ")"
stSQL = stSQL & " OR (顧客カナ Like '" & Me!txt顧客カナ & "%');"
End If

If Not IsNull(Me!txt顧客ID) And IsNull(Me!txt顧客カナ) Then
stSQL = "SELECT * FROM t_kokyaku"
stSQL = stSQL & " WHERE (CusID =" & Me!txt顧客ID & ");"
End If

If IsNull(Me!txt顧客ID) And Not IsNull(Me!txt顧客カナ) Then
stSQL = "SELECT * FROM t_kokyaku"
stSQL = stSQL & " WHERE (顧客カナ Like '" & Me!txt顧客カナ & "%');"
End If

If IsNull(Me!txt顧客ID) And IsNull(Me!txt顧客カナ) Then
MsgBox "検索できません"
Exit Sub
End If

Debug.Print "SQL: [" & stSQL & "]"

'DB接続
con.Open "Driver={mySQL ODBC 5.3 Unicode Driver}; Server=localhost; Database=jinq; Uid=jinq_a; Pwd=jinqadmin; "

'SQL文実行&レコードセット代入
Set rs = con.Execute(stSQL)


のようにするほうが、いろいろとベターでは、と思います。
MySQLに接続する前に Exit Sub を実行することもありますから。

投稿日時 - 2015-02-05 22:29:22

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

書き方はいろいろですが、ベタに書けば、
'SQL文 のところを、

'SQL文
If Not IsNull(Me!txt顧客ID) And Not IsNull(Me!txt顧客カナ) Then
stSQL = "SELECT * FROM t_kokyaku"
stSQL = stSQL & " WHERE (CusID =" & Me!txt顧客ID & ")"
stSQL = stSQL & " OR (顧客カナ Like '" & Me!txt顧客カナ & "%');"
End If

If Not IsNull(Me!txt顧客ID) And IsNull(Me!txt顧客カナ) Then
stSQL = "SELECT * FROM t_kokyaku"
stSQL = stSQL & " WHERE (CusID =" & Me!txt顧客ID & ");"
End If

If IsNull(Me!txt顧客ID) And Not IsNull(Me!txt顧客カナ) Then
stSQL = "SELECT * FROM t_kokyaku"
stSQL = stSQL & " WHERE (顧客カナ Like '" & Me!txt顧客カナ & "%');"
End If

If IsNull(Me!txt顧客ID) And IsNull(Me!txt顧客カナ) Then
MsgBox "検索できません"
Exit Sub
End If

Debug.Print "SQL: [" & stSQL & "]"
'SQL文実行&レコードセット代入
Set rs = con.Execute(stSQL)

のような感じ。

投稿日時 - 2015-02-05 17:50:37

お礼

piroin654様

なんども、回答いただき有難うございます。
やっぱり、個別にIF文を書かないといけないのですね、今回はわかりやすくするため、顧客IDと顧客カナのみですが、理想としてはもっと条件を増やしたいので、その際非常に複雑になると思い質問させていただきました。

投稿日時 - 2015-02-08 09:16:15

ANo.2

エラー内容は、
erver version for the right syntax to use near ') OR(kana Like 'txt顧客カナ%')' at line 1
ですけど?

>今のコーディングでは、顧客ID(CusID)がNullでは抽出できないのでは?
>と考えてます。

Accessの側のデータがNullなのか、MySQLの側がNull(0)の場合なのか
どちらなのでしょうか。


こういうことなのか、
stSQL = stSQL & " WHERE (CusID =" & Me!txt顧客ID & " OR NULL)"

または、
stSQL = stSQL & " WHERE (CusID =" & Nz(Me!txt顧客ID, 0) & ")"

投稿日時 - 2015-02-05 13:54:17

補足

piroin654様
何度もアドバイス頂き、有難うございます。

私の質問の仕方が悪いのだと思いますが、具体的には
顧客IDと顧客カナの非連結テキストボックスがあります。

で、テキストボックスの内容がNullの場合は、検索条件に加えない。

txt顧客IDがNullなら、Where 顧客カナ LIKE txt顧客カナ%

txt顧客IDが空欄でなければ、Where 顧客ID = txt顧客ID

txt顧客ID・txt顧客カナ 両方とも空欄でなければ、Where 顧客ID = txt顧客iID OR 顧客カナ LIKE txt顧客カナ%

なるのではと、初心者の浅知恵では考えております。
その為、IFで各テキストボックスの状態を確認して、抽出条件文を作成しないといけないと思いますが、簡潔にコーディングする方法があれば、お教えください。

投稿日時 - 2015-02-05 16:43:50

ANo.1

「%」の位置が、

tSQL = stSQL & " OR(kana Like ’" & Me!txtお客様カナ & "'%);"

ではなく、

stSQL = stSQL & " OR(kana Like '" & Me!txtお客様カナ & "%');"

のように、「'」の内側にいれるのでは?
それと、
  Like ’" &
のように、Likeの後ろの「'」が全角になっています。

投稿日時 - 2015-02-05 00:11:19

お礼

piroin654様

回答有難うございます。
>tSQL = stSQL & " OR(kana Like ’" & Me!txtお客様カナ & "'%);"
すいません単純に打ち間違いです。

私が知りたいのは、複数条件の検索時の書き方についてです。
今のコーディングでは、顧客ID(CusID)がNullでは抽出できないのでは?
と考えてます。
いずれかの条件で抽出する方法をアドバイス頂けましたら幸いです。

投稿日時 - 2015-02-05 10:01:21

あなたにオススメの質問