読者です 読者をやめる 読者になる 読者になる

三流君のソースコード置き場

三流プログラマーが作成したコードが置いてあります。あまり参考にならないと思いますがヨロシクお願いします。

SQL文 SELECT WHERE句でIN演算子を使用して複数条件を選択する

ASP SQL

元の三流解説は、
三流君ASP:SQL文 SELECT WHERE句でIN演算子を使用して複数条件を選択する
↑を見て、笑ってやってください。
ブログに過去のソースコードをアップして、ブログの検索機能で利用してます(利用予定です)
※古くさいコードが多いです・・・



ソースコード

<%@LANGUAGE=VBScript%>
<html>
<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis">
<title>SQL SELECT文で WHERE句 条件をOrでつなげ複数にしてみた</title>
</head>
<body>
<h1>SQL SELECT文で WHERE句 条件をOrでつなげ複数にしてみた</h1>
test046-1.asp<br>
<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>
<%  '頭で、入力パラメーターの文字数をチェックする
  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
%>

↑をテスト実行する→ http://www.ken3.org/cgi-bin/test/test046-1.asp?ASP=on&GUCHI=on実行する



SQL WHERE句 複数条件作成で SplitとUBoundを使用 ソースコード

<%@LANGUAGE=VBScript%>
<html>
<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis">
<title>SQL WHERE句 複数条件作成で SplitとUBoundを使用</title>
</head>
<body>
<h1>SQL WHERE句 複数条件作成で SplitとUBoundを使用</h1>
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
%>

↑をテスト実行する→ http://www.ken3.org/cgi-bin/test/test046-2.asp?KUBUN=VBA&KUBUN=GUCHI実行する



SQL文 SELECT WHERE IN演算子を使用する ソースコード

<%@LANGUAGE=VBScript%>
<html>
<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis">
<title>SQL文 SELECT WHERE IN演算子を使用する</title>
</head>
<body>
<h1>SQL文 SELECT WHERE IN演算子を使用する</h1>
test046-3.asp<br>
<hr>
Request.QueryString("KUBUN")で<%=Request.QueryString("KUBUN")%><br>
と、パラメータをもらったら<br>
WHERE IN演算子を使用して、SQL文を作成してます<br>
※文字列フィールドなので、Replace関数で細工してますが、<br>
  複数項目を選択する場合は便利です<br>
<hr>
<%  '頭で、入力パラメーターをチェックする
  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
%>

↑をテスト実行する→ http://www.ken3.org/cgi-bin/test/test046-3.asp?KUBUN=ASP&KUBUN=24H実行する


三流君ASPでフォーム関係の解説とサンプル
三流君ASPでADO MDB接続関係の解説とサンプル
三流君ASPでADO Excel接続関係の解説ページとサンプル
三流君ASPでADO CSV接続関係の解説ページとサンプル
三流君ASPでテキストファイル関係の解説とサンプルページ
三流君ASP VBScript関数の解説とサンプル



三流君ASPで遊ぶ、失敗する