- ベストアンサー
[VB6] SQLの作成について
- VB6でのSQL文字列作成時に、画面のテキストボックスの入力値に応じてWHERE句の内容を変えたいです。
- 現在のソースでは、入力値の有無によって条件分岐させているため、他に良い方法があるか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これで問題はないのですが、少し手を入れると 次のようになるでしょうか。 Dim 名前 As String Dim カナ As String '万一、アポストロフィが入力された時の用心 名前 = Replace(txtName.Text, "'", "''") カナ = Replace(txtKatakana.Text, "'", "''") '以前の部分は省略 sSQL = ~ If 名前 <> "" Then sSQL = sSQL & " WHERE 名前='" & 名前 & "'" If カナ <> "" Then sSQL = sSQL & " AND カタカナ='" & カナ & "'" End If Else If カナ <> "" Then sSQL = sSQL & " WHERE カタカナ='" & カナ & "'" End If End If
その他の回答 (2)
- layy
- ベストアンサー率23% (292/1222)
「*」ワイルドカードや、Like文を有効に使って試してみる。 SELECT * FROM テーブル名 WHERE カラム名 LIKE '[値]' とか SELECT * FROM テーブル名 WHERE カラム名 LIKE '*[値]*' その環境で、 [値]が空のとき(*をセットしてでも)全件、 [値]があればその値に該当するもの、 になるかどうかを確認する。 うまくいけばSQLは1文で、空の判定も要らない。 引き渡すものを変えて、SQLは変えない方向はどうか。
- imogasi
- ベストアンサー率27% (4737/17069)
参考までに挙げてみます。 (1)条件の内容(テキストボックスの中身)のA,Bは文字列 (2)2条件固定として、WHERE を使い、その中間はANDで結ぶ と言う前提で、文字列を結合してなど色々やってみたが、私の力では、余りすっきりならなかった。 例えば一旦先に条件の文字列を結合して、場合により不要なx="やAND Y=を消そうとしたが、判りにくいだけのようだった。 ーー ただしCase文を使うと、少し一瞬の可読性が上がるように思うが、どうだろう。 やはり場合分けを正面から、したほうがすっきりするようだ。 ーーー 私のテスト環境の関係でエクセルVBAでやってみた。条件文字列の出方だけのテストなので、あしからず。 ユーザーフォームにテキストボックスを2つ貼り付け。 コマンドボタン(キャプションは「検索実行」とでも、つけるべきか)を1つ貼り付け そのクリックイベントに Private Sub CommandButton1_Click() test01 End Sub 標準モジュールに (Case文のネスト) Sub test01() A = UserForm1.TextBox1.Text B = UserForm1.TextBox2.Text Select Case A Case Is = "" Select Case B Case "" MsgBox "エラー条件入力もれ" Case Else MsgBox "WHERE Y = " & B End Select Case Else Select Case B Case "" MsgBox "WHERE X= " & A Case Else MsgBox "WHERE X = " & A & " AND Y=" & B End Select End Select End Sub Where以下の文字列だけを論じている。 SQL処理系によって、上記のAyaBの前後にシングルコーテーションや、ダブルコーテーションが必要なものがあると思うので 修正が必要。 SELECT・・FROM ZZZと最後の;は必要だが略している。
お礼
ありがとうございます。参考になりました。