- ベストアンサー
VBA非連結テキストボックスからの検索方法
- VBAを使用して、非連結テキストボックスからの検索方法を教えてください。
- Windows7Pro(32Bit)、Access2010、MySQL5.6 Windows版の環境で検索フォームの非連結テキストボックスからの検索について教えてください。
- 顧客ID、顧客名、顧客カナ、電話番号を使用して、複数の条件での検索方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
コードの順序として、 '顧客情報検索 '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 を実行することもありますから。
その他の回答 (3)
- piroin654
- ベストアンサー率75% (692/917)
書き方はいろいろですが、ベタに書けば、 '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) のような感じ。
- piroin654
- ベストアンサー率75% (692/917)
エラー内容は、 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) & ")"
補足
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で各テキストボックスの状態を確認して、抽出条件文を作成しないといけないと思いますが、簡潔にコーディングする方法があれば、お教えください。
- piroin654
- ベストアンサー率75% (692/917)
「%」の位置が、 tSQL = stSQL & " OR(kana Like ’" & Me!txtお客様カナ & "'%);" ではなく、 stSQL = stSQL & " OR(kana Like '" & Me!txtお客様カナ & "%');" のように、「'」の内側にいれるのでは? それと、 Like ’" & のように、Likeの後ろの「'」が全角になっています。
お礼
piroin654様 回答有難うございます。 >tSQL = stSQL & " OR(kana Like ’" & Me!txtお客様カナ & "'%);" すいません単純に打ち間違いです。 私が知りたいのは、複数条件の検索時の書き方についてです。 今のコーディングでは、顧客ID(CusID)がNullでは抽出できないのでは? と考えてます。 いずれかの条件で抽出する方法をアドバイス頂けましたら幸いです。
お礼
piroin654様 なんども、回答いただき有難うございます。 やっぱり、個別にIF文を書かないといけないのですね、今回はわかりやすくするため、顧客IDと顧客カナのみですが、理想としてはもっと条件を増やしたいので、その際非常に複雑になると思い質問させていただきました。