<SQL SELECT文WHERE句を使って条件検索>
こんにちは、Ken3です。
最近、SQL?しかやってないとお思いのアナタ、
残念ながら今回も、
SELECT文のWHERE句の説明を軽くです。
といっても、たいしたことないのでご安心を。
/*
* 1.区分を指定してデータを表示したい
*/
データベース名:db029.mdb
テーブル名:KANSOU
フィールド
ID オートナンバー型
F_KUBUN テキスト型 ASP,VBA,GUCHI,24Hと4つの区分
F_NO 整数型 0:は全体に対して、1〜はX話にする
F_MEMO テキスト型 一言メッセージ
WriteTime 日付型 書き込み日付
上記、データベースがあって、
http://www.ken3.org/cgi-bin/test/test029-1.asp
でいままで書き込まれた感想を表示しています。
今まで書き込まれたご意見・感想
日付 区分 NO. 感想
2003/01/02 20:45:28 24H 全体 ssssss
2003/01/02 20:45:02 GUCHI 全体 テスト
2003/01/02 20:45:02 GUCHI 全体 テスト
2003/01/02 19:19:02 24H 全体 テスト
2003/01/02 17:33:37 GUCHI 全体 愚痴は聞きたくないよね
2003/01/02 17:32:51 VBA 全体 チョットなぁ
24HやGUCHIなど、データが混ざっているので、
今回は、指定したデータのみを表示させる、
早い話が、条件を付けてデータを絞ってみたいと思います。
/*
* 2.SELECT文のWHERE句
*/
やり方は、すごい簡単で、
SELECT文のWHERE句
を使います。
なんて、いきなり言われても?ですよね。
書き方は、
SELECT 項目名 From テーブル名
WHERE 条件
とIF文で書いてる条件みたいに普通に書けます。
VBAのデータだけを取りたい時は(言い方を変えるとVBAを条件にデータを抽出)
SELECT * FROM Select * From KANSOU WHERE F_KUBUN = 'VBA'
みたいな感じでOKです。
/*
* 3.区分を条件にデータを検索する
*/
WHERE句を使ってみたいと思います
固定の処理だとつまらないので、検索条件を?KUBUN=VBAと渡して表示してみます。
http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=VBA
http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=ASP
http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=GUCHI
http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=24H
で、動作するようにします。
-- test030-1.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>SQL SELECT文で WHERE句を使ってみた</title>
</head>
<body>
<h2>SQL SELECT文で WHERE句を使ってみた</h2>
test030-1.asp<br>
<hr>
<% '頭で、入力パラメーターの文字数をチェックする
strKUBUN = Request.QueryString("KUBUN") '変数に代入(気分によって)
If Len(strKUBUN) = 0 Then
Response.Write "パラメーターを入力して下さい。<br>" 'エラーメッセージの表示
Else 'データが入力されていたら、
'パラメータがあったら、表示の関数を呼ぶ(外側に出したかったので)
Call TEST_PRINT(strKUBUN)
End If 'If文もここで終わり
%>
<HR>
終了です。<br>
<A href="test030-1.asp?KUBUN=ASP">test030-1.asp?KUBUN=ASPのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=24H">test030-1.asp?KUBUN=24Hのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=VBA">test030-1.asp?KUBUN=VBAのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=GUCHI">test030-1.asp?KUBUN=GUCHIのデータを確認する</a><br>
</body>
</html>
<% 'パラメータを受け取り、SQLを発行
Sub TEST_PRINT(strKUBUN)
'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 & "WHERE F_KUBUN = '" & strKUBUN & "' " '条件は区分が一致
strSQL = strSQL & "ORDER BY WriteTime DESC" '並べ替えは時間の降順
'中身を確認で表示
Response.Write "発行するSQL文は[" & strSQL & "]です。<BR>"
'お約束のレコードセットの作成 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
%>
ポイントは特に無いんだけど
^^^^^^^^^^^^^^^^^^^^^^^^^^
<% '頭で、入力パラメーターの文字数をチェックする
strKUBUN = Request.QueryString("KUBUN") '変数に代入(気分によって)
If Len(strKUBUN) = 0 Then
Response.Write "パラメーターを入力して下さい。<br>" 'エラーメッセージの表示
Else 'データが入力されていたら、
'パラメータがあったら、表示の関数を呼ぶ(外側に出したかったので)
Call TEST_PRINT(strKUBUN)
End If 'If文もここで終わり
%>
URLに付けたパラメータを読みたいので、
Request.QueryString("KUBUN")
で、区分を取出してます。
<A href="test030-1.asp?KUBUN=ASP">test030-1.asp?KUBUN=ASPのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=24H">test030-1.asp?KUBUN=24Hのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=VBA">test030-1.asp?KUBUN=VBAのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=GUCHI">test030-1.asp?KUBUN=GUCHIのデータを確認する</a><br>
は、自分自身を違うパラメータで呼んでます。
そんなことも出来るんだなぁ程度に思っててください。
SQL文の作成
^^^^^^^^^^^^^^
ADOの接続関係はバックナンバーを見てもらって、
今回の追加メイン、SQL SELECT文のWHERE句です
'SQL文を作る
strSQL = "Select * From KANSOU " '感想(KANSOU)テーブルから全項目(*)セレクト
strSQL = strSQL & "WHERE F_KUBUN = '" & strKUBUN & "' " '条件は区分が一致
strSQL = strSQL & "ORDER BY WriteTime DESC" '並べ替えは時間の降順
えっ、こんなんで、、、って言うくらい簡単に、
strSQL = strSQL & "WHERE F_KUBUN = '" & strKUBUN & "' "
で作成してます。
Select * From KANSOU WHERE F_KUBUN = 'ASP' ORDER BY WriteTime DESC
を発行します。
シングルコーテーションで囲っているのは文字列だからで、
数値は、ID = 10 とか、ID > 100なんて書き方です。
あとは、発行したSQLが返したレコードセットを処理してます。
/*
* 4.終わりの挨拶
*/
今回は、
SQLのSELECT文のWHERE句を使用して、
条件を絞ってみました(データを抽出してみました)
テストは、
http://www.ken3.org/cgi-bin/test/test030-1.asp
で、出来ます。
素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。
ASP、VBScript勉強中の三流プログラマーのKen3でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。

下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
広告:
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]