元の三流解説は、
三流君ASP:FORM CHECKBOXから受け取った値を使用してWHERE句の作成
↑を見て、笑ってやってください。
ブログに過去のソースコードをアップして、ブログの検索機能で利用してます(利用予定です)
※古くさいコードが多いです・・・
FORM CHECKBOX NAME=を個別に作成(Ifの嵐でWhere句を作成) ソースコード
<%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>FORM CHECKBOX NAME=を個別に作成(Ifの嵐でWhere句を作成)</title> </head> <body> <h1>FORM CHECKBOX NAME=を個別に作成(Ifの嵐でWhere句を作成)</h1> <FORM ACTION="test093-1.asp" METHOD="POST"> <font color="blue">CHECKBOX NAME=を個別に作成 Where句を作成するTEST</font><br> 表示したい・区分をチェックしてから検索ボタンを押してください<br> <INPUT TYPE="CHECKBOX" NAME="ASP">ASP<br> <INPUT TYPE="CHECKBOX" NAME="VBA">VBA<br> <INPUT TYPE="CHECKBOX" NAME="24H">コンビニ系<br> <INPUT TYPE="CHECKBOX" NAME="GUCHI">愚痴系<br> <INPUT TYPE="submit" VALUE="検索する"> </FORM> <% 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") 'データアクセスにはJet.OLEDB.4.0を使うことを設定 db.Provider = "Microsoft.Jet.OLEDB.4.0" '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す db.ConnectionString = Server.MapPath("db029.mdb") 'やっとデータベースを開ける db.open 'WHERE句を作成する strWHERE = "" '条件を初期化する '4つの区分をそれぞれ判断する If Request.Form("VBA") = "on" Then 'VBAの判断 If strWHERE = "" Then strWHERE = " Where F_KUBUN='VBA' " Else strWHERE = strWHERE & " Or F_KUBUN='VBA'" End If End If If Request.Form("ASP") = "on" Then 'ASPの判断 If strWHERE = "" Then strWHERE = " Where F_KUBUN='ASP' " Else strWHERE = strWHERE & " Or F_KUBUN='ASP'" End If End If If Request.Form("24H") = "on" Then '24Hの判断 If strWHERE = "" Then strWHERE = " Where F_KUBUN='24H' " Else strWHERE = strWHERE & " Or F_KUBUN='24H'" End If End If If Request.Form("GUCHI") = "on" Then 'GUCHIの判断 If strWHERE = "" Then strWHERE = " Where F_KUBUN='GUCHI' " Else strWHERE = strWHERE & " Or F_KUBUN='GUCHI'" End If End If 'SQL文を作成する (作成したWHERE句を組み合わせる) 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>メモ</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>" 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 'お行儀よくオブジェクトも開放しましょう %> <HR> 終了です。<br> If文の連続で何も考えないで作成してみました(オイオイ・・・)<br> <A href="test029-1.asp">データの登録(テストデータを増やす)</a><br> </body> </html>
↑をテスト実行する→http://www.ken3.org/cgi-bin/test/test093-1.asp← 実行する
ArrayとUboundで項目名を管理してWhere句を作成 ソースコード
<%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>FORM CHECKBOX NAME=を個別に作成(ArrayとUboundで項目名を管理してWhere句を作成)</title> </head> <body> <h1>FORM CHECKBOX NAME=を個別に作成(ArrayとUboundで項目名を管理してWhere句を作成)</h1> <FORM ACTION="test093-2.asp" METHOD="POST"> <font color="blue">CHECKBOX NAME=を個別に作成 Where句を作成するTEST</font><br> 表示したい・区分をチェックしてから検索ボタンを押してください<br> <INPUT TYPE="CHECKBOX" NAME="ASP">ASP<br> <INPUT TYPE="CHECKBOX" NAME="VBA">VBA<br> <INPUT TYPE="CHECKBOX" NAME="24H">コンビニ系<br> <INPUT TYPE="CHECKBOX" NAME="GUCHI">愚痴系<br> <INPUT TYPE="submit" VALUE="検索する"> </FORM> <% 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") 'データアクセスにはJet.OLEDB.4.0を使うことを設定 db.Provider = "Microsoft.Jet.OLEDB.4.0" '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す db.ConnectionString = Server.MapPath("db029.mdb") 'やっとデータベースを開ける db.open 'WHERE句を作成する strKUBUN = Array("VBA", "ASP", "24H", "GUCHI") '区分を配列にする strWHERE = "" '条件を初期化する '区分の数だけループさせる For n = 0 To Ubound(strKUBUN) If Request.Form(strKUBUN(n)) = "on" Then '区分n番目の項目がonか? If strWHERE = "" Then '初めの項目か?チェックする strWHERE = " Where F_KUBUN='" & strKUBUN(n) & "' " Else '2番目以降はorでつなぐ strWHERE = strWHERE & " Or F_KUBUN='" & strKUBUN(n) & "' " End If End If Next 'SQL文を作成する (作成したWHERE句を組み合わせる) 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>メモ</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>" 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 'お行儀よくオブジェクトも開放しましょう %> <HR> 終了です。<br> チェックボックスの項目名をArrayで文字列配列を作成して、<br> ループで回し、WHERE句を作成してみました(少しは進化した?)<br> <A href="test029-1.asp">データの登録(テストデータを増やす)</a><br> </body> </html>
↑をテスト実行する→http://www.ken3.org/cgi-bin/test/test093-2.asp← 実行する
Replaceで途中の,を置換 WHERE IN句を使用する ソースコード
<%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>FORM CHECKBOX VALUE=を個別に作成(Replaceで途中の,を置換 WHERE IN句を使用する)</title> </head> <body> <h1>FORM CHECKBOX VALUE=を個別に作成(Replaceで途中の,を置換 WHERE IN句を使用する)</h1> <FORM ACTION="test093-3.asp" METHOD="POST"> <font color="blue">FORM CHECKBOX VALUE=を個別に作成 Where句を作成するTEST</font><br> 表示したい・区分をチェックしてから検索ボタンを押してください<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="24H">コンビニ系<br> <INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="GUCHI">愚痴系<br> <INPUT TYPE="submit" VALUE="検索する"> </FORM> <% 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") 'データアクセスにはJet.OLEDB.4.0を使うことを設定 db.Provider = "Microsoft.Jet.OLEDB.4.0" '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す db.ConnectionString = Server.MapPath("db029.mdb") 'やっとデータベースを開ける db.open 'WHERE句を作成する strKUBUN = Request.Form("KUBUN") 'フォームから区分を受け取る If strKUBUN = "" Then '区分が選択されていなかったら strWHERE = "" 'データ無しの時は条件をカラにする Else ',を変換してWHERE句を作成する ' ASP, 24Hの文字を", "(カンマとスペース1つ)を','に変換する strWORK = Replace(strKUBUN, ", ", "','") '置き換える strWHERE = " Where F_KUBUN IN ('" & strWORK & "') " End If 'SQL文を作成する (作成したWHERE句を組み合わせる) 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>メモ</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>" 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 'お行儀よくオブジェクトも開放しましょう %> <HR> 終了です。<br> チェックボックスの項目名をArrayで文字列配列を作成して、<br> ループで回し、WHERE句を作成してみました(少しは進化した?)<br> <A href="test029-1.asp">データの登録(テストデータを増やす)</a><br> </body> </html>
↑をテスト実行する→http://www.ken3.org/cgi-bin/test/test093-3.asp← 実行する
Request.Form(xxx).Countで複数チェック ソースコード
<%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>FORM CHECKBOX VALUE=を個別に作成(Request.Form(xxx).Countで複数チェック)</title> </head> <body> <h1>FORM CHECKBOX VALUE=を個別に作成(Request.Form(xxx).Countで複数チェック)</h1> <FORM ACTION="test093-4.asp" METHOD="POST"> <font color="blue">FORM CHECKBOX VALUE=を個別に作成 Where句を作成するTEST</font><br> 表示したい・区分をチェックしてから検索ボタンを押してください<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="24H">コンビニ系<br> <INPUT TYPE="CHECKBOX" NAME="KUBUN" VALUE="GUCHI">愚痴系<br> <INPUT TYPE="submit" VALUE="検索する"> </FORM> <% 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") 'データアクセスにはJet.OLEDB.4.0を使うことを設定 db.Provider = "Microsoft.Jet.OLEDB.4.0" '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す db.ConnectionString = Server.MapPath("db029.mdb") 'やっとデータベースを開ける db.open 'WHERE句を作成する If Request.Form("KUBUN").Count > 0 Then '項目数をチェック '複数の時、1番目(最初の条件をまず代入) strWHERE = " Where F_KUBUN = '" & Request.Form("KUBUN")(1) & "' " '次の条件((2)から)をループで追加する For n = 2 To Request.Form("KUBUN").Count 'Orで条件をつなげる strWHERE = strWHERE & " Or F_KUBUN = '" & Request.Form("KUBUN")(n) & "' " Next Else strWHERE = "" 'データ無しの時は条件をカラにする End If 'SQL文を作成する (作成したWHERE句を組み合わせる) 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>メモ</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>" 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 'お行儀よくオブジェクトも開放しましょう %> <HR> 終了です。<br> チェックボックスの項目名をArrayで文字列配列を作成して、<br> ループで回し、WHERE句を作成してみました(少しは進化した?)<br> <A href="test029-1.asp">データの登録(テストデータを増やす)</a><br> </body> </html>
↑をテスト実行する→http://www.ken3.org/cgi-bin/test/test093-4.asp← 実行する
↑コードの三流解説は、
三流君ASP:FORM CHECKBOXから受け取った値を使用してWHERE句の作成
を見て、笑ってやってください。
ASPの解説 トップページは
三流君ASPで遊ぶ、失敗する
です。こちらもよろしく・・・