[三流君] −−>
[ASPで遊ぶ、失敗する] −−>
[バックナンバー一覧]
−−> No.046 SQL文 SELECT WHERE句でIN演算子を使用して複数条件を選択する
SQL文 SELECT WHERE句でIN演算子を使用して複数条件を選択する
本文(発行内容)
<SQL文 SELECT WHERE句でIN演算子を使用して複数条件を選択する>
こんにちは、三流プログラマーのKen3です。
前回、TYPE="CHECKBOX" チェックボックスの入力で名前を同じにすると
カンマで区切られてデータが渡ることをやりました。
今回はそれを応用して、複数条件の選択に挑戦してみます。
何かの参考となれば幸いです。
/*
* 1.いろいろとやってみたくて、複数条件でDBを検索
*/
[No.45 HTML FORM INPUT TYPE="CHECKBOX" チェックボックスの入力]
http://www.ken3.org/backno/backno_asp10.html#45
で、
チェックボックスから値を受取る処理を数パターン書きました。
鉄は熱いうちに〜じゃないけど、
チェックボックスで複数条件を選択、
DBから複数条件を指定してデータを取ってくる
なんて処理を書いてみたいと思います。
データは、db029.mdbのKANSOUテーブルを使用します。
フィールドは
ID オートナンバー
F_KUBUN ASP,VBA,GUCHI,24Hの4つの文字列です
F_NO 0:全体 1〜発行号
F_MEMO コメントです
WriteTime 書き込み・更新時刻
http://www.ken3.org/cgi-bin/test/test029-1.asp
で、データと追加と現在保存されているデータが確認できます。
/*
* 2.複数条件の検索に対応したSQL文を作成する
*/
単独条件は簡単で
http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=ASP
でテストしているみたいに、
発行する(した)SQL文は
Select * From KANSOU WHERE F_KUBUN = 'ASP' ORDER BY WriteTime DESC
と、
WHERE F_KUBUN = 'ASP'を条件にして検索をかけてます。
日付 区分 NO. 感想
2003/04/10 17:47:31 ASP 全体
2003/04/07 16:13:11 ASP 全体 モーグファン モーグのBBSで宣伝みたいに誘導するな!!つぶすぞこんなHP(怒)
2003/04/05 13:22:23 ASP 全体 Yahoo,Google馬鹿、こんなページが上位なんて・・・・もっと良いページ探せ
2003/04/03 16:32:21 ASP 全体 俺は素人だから役にたってるよ
2003/04/02 0:37:12 ASP 全体 こんなもんか
2003/04/01 14:36:34 ASP 全体 zzzzzzzzz
2003/03/31 18:40:17 ASP 全体 だれかテストした?
なんて、過激な区分がASPのメッセージを取出すことが出来ます。
※それにしても怖いメッセージだ・・・
複数条件のSQL文を作ればいいので、
Select * From KANSOU
WHERE F_KUBUN = 'ASP' OR F_KUBUN = 'VBA'
ORDER BY WriteTime DESC
と、
区分がASP か(or) VBAと指定すればOKです。
※ハヤイ話、そんなSQL文を作ればいいんだよね。
http://www.ken3.org/cgi-bin/test/test046-1.asp?ASP=on&VBA=on
でテスト可能です、遊んでみてください。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>SQL SELECT文で WHERE句 条件をOrでつなげ複数にしてみた</title>
</head>
<body>
<h2>SQL SELECT文で WHERE句 条件をOrでつなげ複数にしてみた</h2>
test046-1.asp<br>
<hr>
<% '頭で、入力パラメーターの文字数をチェックする
strWHERE = "Where "
If Request.QueryString("ASP") = "on" Then
strWHERE = strWHERE & "F_KUBUN = 'ASP' "
End If
If Request.QueryString("VBA") = "on" Then
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = 'VBA' "
End If
If Request.QueryString("GUCHI") = "on" Then
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = 'GUCHI' "
End If
If Request.QueryString("24H") = "on" Then
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = '24H' "
End If
'Where文が生成されたかチェックする
If strWHERE = "Where " Then 'そのままだったら条件文を消す
Response.Write "<b>条件がありませんでした</b><hr>"
strWHERE = "" '条件無しに強引にする
Else
Response.Write "作成した条件[<b>" & strWHERE & "</b>]<hr>"
End If
'表示の関数を呼ぶ(外側に出したかったので)
Call DATA_PRINT(strWHERE)
%>
<HR>
<FORM ACTION="test046-1.asp" METHOD="GET">
<font color="blue">表示させたい区分をチェック(選択)して下さい</font><br>
<INPUT TYPE="CHECKBOX" NAME="ASP">ASP系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="VBA">VBA系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="GUCHI">愚痴系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="24H">コンビニ系へのご意見を表示<BR>
<INPUT TYPE="submit" VALUE="送信">←チェック後送信ボタンを押してください
</FORM>
<hr>
関連項目<br>
<A href="test029-1.asp">db029.mdbへデータ追加する</a><br>
</body>
</html>
<% 'パラメータを受け取り、SQLを発行
Sub DATA_PRINT(strWHERE)
'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
Set db=Server.CreateObject("ADODB.Connection")
'.Provider?プロバイダー?通信会社?じゃなくって
'データアクセスにはJet.OLEDB.4.0を使うことを設定
db.Provider = "Microsoft.Jet.OLEDB.4.0"
'次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す
db.ConnectionString = Server.MapPath("db029.mdb")
'やっとデータベースを開ける
db.open
'SQL文を作る
strSQL = "Select * From KANSOU " '感想(KANSOU)テーブルから全項目(*)セレクト
strSQL = strSQL & strWHERE '作成した条件を使用する
strSQL = strSQL & "ORDER BY WriteTime DESC" '並べ替えは時間の降順
'オマケで画面にデータ表示
Response.Write "<hr>発行する(した)SQL文は<br><B><font color='green'>"
Response.Write strSQL & "</font></B><br>です<hr>"
'お約束のレコードセットの作成 SQL文の発行
Set rs = db.Execute(strSQL)
'データの表示をテーブルで行う
Response.Write "<TABLE Border='1'>"
'見出しをバカっぽく、そのまま書き込む
Response.Write "<TR>"
Response.Write "<TD>日付</TD>"
Response.Write "<TD>区分</TD>"
Response.Write "<TD>NO.</TD>"
Response.Write "<TD>感想</TD>"
Response.Write "</TR>"
'お約束のEOFまでループは(データが無くなるまでループ)、
Do While rs.EOF = False 'レコードセットの.EOFがFalseの間
Response.Write "<TR>" '内容を表示する、行開始のタグ<TR>
Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
Response.Write "<TD>" & rs.Fields.Item("F_KUBUN") & "</TD>"
If rs.Fields.Item("F_NO") = 0 Then '0の全体かチェック
Response.Write "<TD>全体</TD>"
Else
Response.Write "<TD>" & rs.Fields.Item("F_NO") & "</TD>" 'NO表示
End If
Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>"
Response.Write "</TR>"
'次のレコードにポインタを移動する
rs.MoveNext 'これを忘れると悲惨なことに、、、
Loop
Response.Write "</TABLE>" 'テーブルは終わりです
'開いていたレコードセットを閉じる
rs.Close
'データベースも閉じようよ
db.Close
'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
Set db = Nothing
End Sub |
%>
ポイントは、
~~~~~~~~~~~~
'頭で、入力パラメーターの文字数をチェックする
strWHERE = "Where "
と初期値を代入
If Request.QueryString("ASP") = "on" Then
strWHERE = strWHERE & "F_KUBUN = 'ASP' "
End If
チェックボックスがonだったら、
条件としてF_KUBUN='ASP'を追加
同じく、VBAのチェックがされているか
If Request.QueryString("VBA") = "on" Then
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
もう1つのポイントが↑ここで、
初めの代入では、ORがいらないので、このIF文で調整してます。
strWHERE が "Where "の初期値以外なら、
"Where F_KUBUN = 'ASP'"に 'OR' を+する
その後、
strWHERE = strWHERE & "F_KUBUN = 'VBA' "
でVBAの条件式を追加してます。
End If
下記の2つの区分も同様に処理します。
If Request.QueryString("GUCHI") = "on" Then
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = 'GUCHI' "
End If
If Request.QueryString("24H") = "on" Then
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = '24H' "
End If
条件文が作成されたか、チェックして、パラメータ無しで作成されていない場合は
無し(空白)にします。
'Where文が生成されたかチェックする
If strWHERE = "Where " Then 'そのままだったら条件文を消す
Response.Write "<b>条件がありませんでした</b><hr>"
strWHERE = "" '条件無しに強引にする
Else
Response.Write "作成した条件[<b>" & strWHERE & "</b>]<hr>"
End If
'表示の関数を呼ぶ(外側に出したかったので)
Call DATA_PRINT(strWHERE)
作成した文字列を渡し、SQL文を作り、データを表示してます。
まぁ、単純に
Where F_KUBUN = 'ASP' OR F_KUBUN = 'VBA'
とSQLで使用する文字列を作成しただけでした。
/*
* 3.繰り返しで条件を取り出してみよう SplitとUBoundを使用
*/
区分が4つだったからまだいいけど、
strWHERE = "Where "
If Request.QueryString("ASP") = "on" Then
strWHERE = strWHERE & "F_KUBUN = 'ASP' "
End If
If Request.QueryString("VBA") = "on" Then
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = 'VBA' "
End If
If Request.QueryString("GUCHI") = "on" Then
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = 'GUCHI' "
End If
If Request.QueryString("24H") = "on" Then
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = '24H' "
End If
って処理、バカらしいよね(笑)
10個の条件選択だったら、長いよねIf文好きだよね三流君は。
ちっ、そこまで言われちゃ、キライなFor文でも使ってみるか。
入力フォームの作りを
<FORM ACTION="test046-2.asp" METHOD="GET">
<font color="blue">表示させたい区分をチェック(選択)して下さい</font><br>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="ASP">ASP系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="VBA">VBA系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="GUCHI">愚痴系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="24H">コンビニ系へのご意見を表示<BR>
<INPUT TYPE="submit" VALUE="送信">←チェック後送信ボタンを押してください
</FORM>
と
項目をKUBUN1つにして、VALUEで値のパターンとして、
カンマ区切りでデータを貰えるようにします。
Request.QueryString("KUBUN")=ASP, GUCHI
と受取れます。
次にバラして、文字列の作成なので、
strWHERE = "Where " '初期値の代入
strBOX = Split(Request.QueryString("KUBUN"), ",") 'カンマで区切る
Split関数でカンマを条件に簡単にバラしてみました。
バラした個数が知りたいので、UBound関数で調べ、ループの回数に指定します。
'ループでデータを作成する
For i = 0 To UBound(strBOX) 'UBound使用インデックス最大値までループ
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = '" & Trim(strBOX(i)) & "' "
Next
無事、Where F_KUBUN = 'ASP' OR F_KUBUN = 'GUCHI'
と複数条件をループで作成できました。
http://www.ken3.org/cgi-bin/test/test046-2.asp
で実行可能です。
無指定の場合(選択無し)/複数指定/1つだけ指定など遊んでみてください。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>WHERE句 複数条件作成で SplitとUBoundを使用</title>
</head>
<body>
<h2>WHERE句 複数条件作成で SplitとUBoundを使用</h2>
test046-2.asp<br>
<hr>
Request.QueryString("KUBUN")=<%=Request.QueryString("KUBUN")%><br>
<% '頭で、入力パラメーターをチェックする
strWHERE = "Where " '初期値の代入
strBOX = Split(Request.QueryString("KUBUN"), ",") 'カンマで区切る
Response.Write "UBound(strBOX)=" & UBound(strBOX) & "<br>"
'ループでデータを作成する
For i = 0 To UBound(strBOX) 'UBound使用インデックス最大値までループ
Response.Write "strBOX(" & i & ")=" & strBOX(i) & "<br>"
If strWHERE <> "Where " Then strWHERE = strWHERE & " OR " '2個目〜
strWHERE = strWHERE & "F_KUBUN = '" & Trim(strBOX(i)) & "' "
Next
'Where文が生成されたかチェックする
If strWHERE = "Where " Then 'そのままだったら条件文を消す
Response.Write "<b>条件がありませんでした</b><hr>"
strWHERE = "" '条件無しに強引にする
Else
Response.Write "作成した条件[<b>" & strWHERE & "</b>]<hr>"
End If
'表示の関数を呼ぶ(外側に出したかったので)
Call DATA_PRINT(strWHERE)
%>
<HR>
<FORM ACTION="test046-2.asp" METHOD="GET">
<font color="blue">表示させたい区分をチェック(選択)して下さい</font><br>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="ASP">ASP系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="VBA">VBA系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="GUCHI">愚痴系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="24H">コンビニ系へのご意見を表示<BR>
<INPUT TYPE="submit" VALUE="送信">←チェック後送信ボタンを押してください
</FORM>
<hr>
関連項目<br>
<A href="test029-1.asp">db029.mdbへデータ追加する</a><br>
</body>
</html>
<% 'パラメータを受け取り、SQLを発行
Sub DATA_PRINT(strWHERE)
'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
Set db=Server.CreateObject("ADODB.Connection")
'.Provider?プロバイダー?通信会社?じゃなくって
'データアクセスにはJet.OLEDB.4.0を使うことを設定
db.Provider = "Microsoft.Jet.OLEDB.4.0"
'次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す
db.ConnectionString = Server.MapPath("db029.mdb")
'やっとデータベースを開ける
db.open
'SQL文を作る
strSQL = "Select * From KANSOU " '感想(KANSOU)テーブルから全項目(*)セレクト
strSQL = strSQL & strWHERE '作成した条件を使用する
strSQL = strSQL & "ORDER BY WriteTime DESC" '並べ替えは時間の降順
'オマケで画面にデータ表示
Response.Write "<hr>発行する(した)SQL文は<br><B><font color='green'>"
Response.Write strSQL & "</font></B><br>です<hr>"
'お約束のレコードセットの作成 SQL文の発行
Set rs = db.Execute(strSQL)
'データの表示をテーブルで行う
Response.Write "<TABLE Border='1'>"
'見出しをバカっぽく、そのまま書き込む
Response.Write "<TR>"
Response.Write "<TD>日付</TD>"
Response.Write "<TD>区分</TD>"
Response.Write "<TD>NO.</TD>"
Response.Write "<TD>感想</TD>"
Response.Write "</TR>"
'お約束のEOFまでループは(データが無くなるまでループ)、
Do While rs.EOF = False 'レコードセットの.EOFがFalseの間
Response.Write "<TR>" '内容を表示する、行開始のタグ<TR>
Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
Response.Write "<TD>" & rs.Fields.Item("F_KUBUN") & "</TD>"
If rs.Fields.Item("F_NO") = 0 Then '0の全体かチェック
Response.Write "<TD>全体</TD>"
Else
Response.Write "<TD>" & rs.Fields.Item("F_NO") & "</TD>" 'NO表示
End If
Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>"
Response.Write "</TR>"
'次のレコードにポインタを移動する
rs.MoveNext 'これを忘れると悲惨なことに、、、
Loop
Response.Write "</TABLE>" 'テーブルは終わりです
'開いていたレコードセットを閉じる
rs.Close
'データベースも閉じようよ
db.Close
'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
Set db = Nothing
End Sub |
%>
/*
* 4.WHERE句でIN演算子を使用する
*/
でも何かなぁ、まだバカっぽいんだよね。
何が?ループで回して条件作成、うまくいったよ。。。
作成されたSQL文って、
Select * From KANSOU
Where F_KUBUN = 'ASP'
OR F_KUBUN = 'VBA'
OR F_KUBUN = 'GUCHI'
OR F_KUBUN = '24H'
ORDER BY WriteTime DESC
でしょ。
まぁ条件が4つのうちどれかが一致したらだからねぇ、こんな感じなんだよキット。
日本語で素直に書くと
区分=ASP か 区分=VBA か 区分=GUCHI か 区分=24H のデータって条件かなぁ。
だったら普通、
区分がASP,VBA,GUCHI,24Hのどれか?って聞き方出来ないの?
そんなオレに出来ないのとか言われてもSQL分を判断するのはコンピュータだしねぇ。
だったら、a,b,cどれか?って条件の書き方できるか調べろよ。
はいはい。
あれ、IN演算子ってのがあるじゃん。
Select * From KANSOU
Where F_KUBUN IN ('ASP', 'VBA', 'GUCHI', '24H')
ORDER BY WriteTime DESC
って書き方できるみたいだよ。
サンプル書いて試せよ
人使いが荒いねぇ・・・
なんて小話は置いといて、
Where F_KUBUN IN ('ASP', 'VBA', 'GUCHI', '24H')
と
フィールド In (値1,値2....値n)
で、...のどれかだったらって判断できるみたいです。
<FORM ACTION="test046-3.asp" METHOD="GET">
<font color="blue">表示させたい区分をチェック(選択)して下さい</font><br>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="ASP">ASP系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="VBA">VBA系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="GUCHI">愚痴系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="24H">コンビニ系へのご意見を表示<BR>
<INPUT TYPE="submit" VALUE="送信">←チェック後送信ボタンを押してください
</FORM>
で、受取れる形式は、
Request.QueryString("KUBUN")=ASP, GUCHI
でしたね。
ASP, GUCHI を
IN ('ASP', 'GUCHI') に直したいので、
Replace関数を使用してみます。
moji = "IN ('" Replace(Request.QueryString("KUBUN"), ", ", "', '") & "')"
と
, (カンマとスペース)を
', '(シングルコーテーション+カンマ+スペース)に変換します。
If IsEmpty(Request.QueryString("KUBUN")) = True Then '条件無し
Response.Write "<b>条件がありませんでした</b><hr>"
strWHERE = "" '条件無しに強引にする
Else
'WHERE INを作成する
strKUBUN = Replace(Request.QueryString("KUBUN"), ", ", "', '")
strWHERE = "WHERE F_KUBUN IN ('" & strKUBUN & "') "
Response.Write "作成した条件[<b>" & strWHERE & "</b>]<hr>"
End If
で無事に
Select * From KANSOU
WHERE F_KUBUN IN ('ASP', 'VBA', 'GUCHI', '24H')
ORDER BY WriteTime DESC
を作成できました。
あとは、表示の関数でWHERE条件を受取りSQLを発行・・・と同じです。
http://www.ken3.org/cgi-bin/test/test046-3.asp?KUBUN=ASP&KUBUN=24H
でテストできます、いろいろとチェックして遊んでください。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>SQL文 SELECT WHERE IN演算子を使用する</title>
</head>
<body>
<h2>SQL文 SELECT WHERE IN演算子を使用する</h2>
test046-3.asp<br>
<hr>
Request.QueryString("KUBUN")=<%=Request.QueryString("KUBUN")%><br>
<% '頭で、入力パラメーターをチェックする
If IsEmpty(Request.QueryString("KUBUN")) = True Then '条件無し
Response.Write "<b>条件がありませんでした</b><hr>"
strWHERE = "" '条件無しに強引にする
Else
'WHERE INを作成する
strKUBUN = Replace(Request.QueryString("KUBUN"), ", ", "', '")
strWHERE = "WHERE F_KUBUN IN ('" & strKUBUN & "') "
Response.Write "作成した条件[<b>" & strWHERE & "</b>]<hr>"
End If
'表示の関数を呼ぶ(外側に出したかったので)
Call DATA_PRINT(strWHERE)
%>
<HR>
<FORM ACTION="test046-3.asp" METHOD="GET">
<font color="blue">表示させたい区分をチェック(選択)して下さい</font><br>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="ASP">ASP系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="VBA">VBA系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="GUCHI">愚痴系へのご意見を表示<BR>
<INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="24H">コンビニ系へのご意見を表示<BR>
<INPUT TYPE="submit" VALUE="送信">←チェック後送信ボタンを押してください
</FORM>
<hr>
関連項目<br>
<A href="test029-1.asp">db029.mdbへデータ追加する</a><br>
</body>
</html>
<% 'パラメータを受け取り、SQLを発行
Sub DATA_PRINT(strWHERE)
'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
Set db=Server.CreateObject("ADODB.Connection")
'.Provider?プロバイダー?通信会社?じゃなくって
'データアクセスにはJet.OLEDB.4.0を使うことを設定
db.Provider = "Microsoft.Jet.OLEDB.4.0"
'次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す
db.ConnectionString = Server.MapPath("db029.mdb")
'やっとデータベースを開ける
db.open
'SQL文を作る
strSQL = "Select * From KANSOU " '感想(KANSOU)テーブルから全項目(*)セレクト
strSQL = strSQL & strWHERE '作成した条件を使用する
strSQL = strSQL & "ORDER BY WriteTime DESC" '並べ替えは時間の降順
'オマケで画面にデータ表示
Response.Write "<hr>発行する(した)SQL文は<br><B><font color='green'>"
Response.Write strSQL & "</font></B><br>です<hr>"
'お約束のレコードセットの作成 SQL文の発行
Set rs = db.Execute(strSQL)
'データの表示をテーブルで行う
Response.Write "<TABLE Border='1'>"
'見出しをバカっぽく、そのまま書き込む
Response.Write "<TR>"
Response.Write "<TD>日付</TD>"
Response.Write "<TD>区分</TD>"
Response.Write "<TD>NO.</TD>"
Response.Write "<TD>感想</TD>"
Response.Write "</TR>"
'お約束のEOFまでループは(データが無くなるまでループ)、
Do While rs.EOF = False 'レコードセットの.EOFがFalseの間
Response.Write "<TR>" '内容を表示する、行開始のタグ<TR>
Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
Response.Write "<TD>" & rs.Fields.Item("F_KUBUN") & "</TD>"
If rs.Fields.Item("F_NO") = 0 Then '0の全体かチェック
Response.Write "<TD>全体</TD>"
Else
Response.Write "<TD>" & rs.Fields.Item("F_NO") & "</TD>" 'NO表示
End If
Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>"
Response.Write "</TR>"
'次のレコードにポインタを移動する
rs.MoveNext 'これを忘れると悲惨なことに、、、
Loop
Response.Write "</TABLE>" 'テーブルは終わりです
'開いていたレコードセットを閉じる
rs.Close
'データベースも閉じようよ
db.Close
'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
Set db = Nothing
End Sub |
%>
/*
* 5.終わりの挨拶 </HTML>
*/
今回は、
SQL文 SELECT WHERE句で複数条件を指定する方法
の小話でした。
ポイントは、
・OR を使用して条件を複数作ってみた
・WHERE句でIN演算子を使用して複数条件を選択する
ぐらいかなぁ。
入力処理の参考になれば幸いです。
素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。
掲示板 : http://www.ken3.org/asp/bbs-asp.html
ASP、VBScript勉強中の三流プログラマーのKen3でした。
----------------------------------
関連項目(ただのバックナンバー紹介)
----------------------------------
[No.45 HTML FORM INPUT TYPE="CHECKBOX" チェックボックスの入力]
http://www.ken3.org/backno/backno_asp10.html#45
で、
チェックボックスから値を受取る処理を数パターン書きました。
[No.21 文字列の置き換え、Replace関数を使用]
http://www.ken3.org/backno/backno_asp05.html#21
でReplace関数の説明を少し
[No.24 Split関数で配列作成、UBoundで個数の判断]
http://www.ken3.org/backno/backno_asp05.html#24
でSplit関数を使用して文字列分解とUBoundで個数の判断をやりました。
フィードバック
ASP系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告