VB6.0でSQLを作成し検索を行いたいのですがどのようにコーディングしたら
よいか悩んでます。
検索する項目はコンボボックスで指定する形にしています。
項目数は複数(0〜6つぐらいです。)
例えば・・・
コンボボックス1は項目Aを選択
コンボボックス2は項目Bを選択
コンボボックス3は項目Cを選択
上記の場合は
strSQL=""
strSQL=strSQL & "select * from TableA Where"
strSQL=strSQL & "A='コンボボックス1の内容'
strSQL=strSQL & "AND B ='コンボボックス2の内容'
strSQL=strSQL & "AND C ='コンボボックス3の内容'
ですが、コンボボックス1のみ条件指定時、コンボボックス1と3のみ条件指定時
といろいろパターンが出できます。
それをうまく判断(If文等)して効率よくSQL文を作りたいのですがどのようにしたらよいのでしょうか?
ご教授願えないでしょうか。
一例として。
SQL = "SELECT〜〜〜"
SQL = SQL & "WHERE 1=1" 'または、絶対に指定する事になっている条件
If コンボ1の選択時 Then
SQL = SQL & " AND 列1=" & コンボ1の値
End If
If コンボ2の選択時 Then
SQL = SQL & " AND 列2=" & コンボ2の値
End If
:
:
:
魔界の仮面弁士さんありがとうございます。
1=1とはどういう意味があるのでしょうか?
例えば、
SELECT * FROM テーブル WHERE 1=0
だと、0件のレコードを返す事になりますし、
SELECT * FROM テーブル WHERE 1=1
なら、全レコードが返される事になりますよね。
(1=0は常にFalse、1=1は常にTrueですから)
> 1=1とはどういう意味があるのでしょうか?
WHERE文の最初に指定する『必須条件』を意味しています。
例えば、「会社コードは必ずWHERE文に含める」という場合は、
SQL = SQL & " WHERE 1=1"
ではなく、
SQL = SQL & " WHERE COMPANY=" & CompanyCode
のような条件でも良いです。
必須条件を最初に持ってきた理由は、「省略可能な条件」の追加を、
If 条件指定時 Then
SQL = SQL & " AND 列=" & 値
End If
の3行で済ませるためです。
もし、必須指定の条件が先頭に含まれていないとしたら、
最初の条件だけは、『 AND 』演算子をSQL中に含ませる事ができないので、
コードが少々煩雑になってしまいます。
Dim hasCondition As Boolean '条件を1つでも指定していればTrue
hasCondition = False
SQL = "SELECT 〜 FROM 〜"
:
:
If コンボ3の選択時 Then
If hasCondition Then
SQL = SQL & " AND 列3=" & コンボ3の値
Else
hasCondition = True
SQL = SQL & " WHERE 列3=" & コンボ3の値
End If
End If
If コンボ4の選択時 Then
If hasCondition Then
SQL = SQL & " AND 列4=" & コンボ4の値
Else
hasCondition = True
SQL = SQL & " WHERE 列4=" & コンボ4の値
End If
End If
:
:
………まぁ他にも、書き方は何通りもあるでしょうけれどね。(^_^;)
> ………まぁ他にも、書き方は何通りもあるでしょうけれどね。(^_^;)
あるいは、『 AND 』を常に付けておくようにして、
最後にそれを除去するという手もあります。
SQL1 = "SELECT 〜 FROM 〜"
SQL2 = ""
:
:
If コンボ3選択時 Then
SQL2 = SQL2 & " AND 列3 = " & コンボ3の値
End If
If コンボ4選択時 Then
SQL2 = SQL2 & " AND 列4 = " & コンボ4の値
End If
:
:
If SQL2 = "" Then
SQL = SQL1 & " ORDER BY 〜"
Else
'Mid関数を使って、最初のANDを除去
SQL = SQL1 & " WHERE" & Mid(SQL2, 5) & " ORDER BY 〜"
End If
ありがとうございます。
Boolean型の変数を使用すれば簡単に分岐ができるのですね。
わかりやすい説明ありがとうございます。
なるほど、SQL2 = "" に常に追加していき最後にANDを削除する方法もあるのですね。
いろいろ方法がありそうですのでちょっと考えてみます。