dポイントプレゼントキャンペーン実施中!

お世話になります。

VB6でSQL文字列を作成しております。

そこで質問させていただきたいのですが、
画面のテキストボックスに入力した値(txtName.textおよびtxtKatakana.text )が空かどうかに応じて、
SELECT文のWHERE句の内容を変えたいのですが。

(現ソース)
sSQL = ""
sSQL = sSQL & "SELECT * FROM TABLE名"
If txtName.text <> "" AND txtKatakana.text <>"" Then
sSQL = sSQL & "WHERE 名前= ' " & txtName.text & " ' "
sSQL = sSQL & " AND カタカナ= ' " & txtKatakana.text & " ' "
ElseIf txtName.text <> "" AND txtKatakana.text = "" Then
sSQL = sSQL & "WHERE 名前= ' " & txtName.text & " ' "
ElseIf txtName.text = "" AND txtKatakana.text <> "" Then
sSQL = sSQL & " WHERE カタカナ= ' " & txtKatakana.text & " ' "


何か他に良い方法がありましたら、
教えていただけないでしょうか?

よろしくお願いいたします。

A 回答 (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
    • good
    • 0
この回答へのお礼

ありがとうございます。参考になりました。

お礼日時:2011/02/06 20:55

「*」ワイルドカードや、Like文を有効に使って試してみる。



SELECT * FROM テーブル名 WHERE カラム名 LIKE '[値]'
とか
SELECT * FROM テーブル名 WHERE カラム名 LIKE '*[値]*'


その環境で、
[値]が空のとき(*をセットしてでも)全件、
[値]があればその値に該当するもの、
になるかどうかを確認する。

うまくいけばSQLは1文で、空の判定も要らない。

引き渡すものを変えて、SQLは変えない方向はどうか。
    • good
    • 0

参考までに挙げてみます。


(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と最後の;は必要だが略している。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!