<テーブルをつなげて商品名を取得する方法>
こんにちは、三流プログラマーのKen3です。 前回は、リレーションを知らない?な人が作った(三流プログラマーの私(笑)) 小計・合計の表示プログラムでした。 今回は、チョットだけ進化させて、テーブルをつなげて見たいと思います。/* * 1.今回のキッカケ */
前回の、商品名表示を組み込んだ表 http://www.ken3.org/cgi-bin/test/test072-4.asp で、商品マスターから商品名を検索して、表示させました。 '商品コードを受け取り、商品名を返す関数を作成する
Function get_sname(strCODE)
strSQL = "Select 商品名 From T_商品 Where 商品CD='" & strCODE & "'"
Set rs_master = db.Execute(strSQL) 'SQL文の発行
If rs_master.EOF = True Then 'データ無し?
get_sname = strCODE & "はエラーです"
Else
get_sname = rs_master("商品名").Value
End If
rs_Master.Close 'クローズ
Set rs_master = Nothing 'と開放で後始末・・・
End Function |
↑作成したテーブルイメージ
T_商品 テーブル
商品CD
商品名
↑作成したテーブルイメージ
なにも条件を指定しないで、2つのテーブルをFrom句に書いてみました。
Set rs = db.Execute("Select * From T_月別売上, T_商品")
と、SQL文でレコードセットを作成してみた
さて、どうなるでしょう?
http://www.ken3.org/cgi-bin/test/test073-1.asp
でテスト結果をみると、
T_月別売上.商品CD
A1 に対して、同じデータが6行作成され、
T_商品.商品CDがA1,A2,A3,B1,B2,B3となってます
T_月別売上.商品CD A2も同様に6行データが作成されてます。
あらら、A1はA1同士つなげた商品名がほしいのにね・・・
Select * From T_月別売上, T_商品
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
だと、2つのテーブルの内容をセレクトしてくれるけど、
作成されたレコードセットのイメージはかなり違うなぁ・・・
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>テストで2つのテーブルデータを指定</title>
</head>
<body>
<h2>テストで2つのテーブルデータを指定</h2>
なにも条件を指定しないで、2つのテーブルをFrom句に書いてみました。<br>
Set rs = db.Execute("Select * From T_月別売上, T_商品")<br>
と、SQL文でレコードセットを作成してみた<br>
<hr>
<%
'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("db072.mdb")
db.open 'やっとデータベースを開ける
'お約束のレコードセットの作成 T_月別売上,T_商品を指定
Set rs = db.Execute("Select * From T_月別売上, T_商品")
'データの表示をテーブルで行う
Response.Write "<TABLE Border='1'>"
'見出しを(フィールド名を)そのまま書き込む
Response.Write "<TR>"
For Each fld_A In Rs.Fields 'フィールドのアイテムに対してループ
Response.Write "<TH>" & fld_A.Name & "</TH>"
'↑.Nameでフィールド名を表示する
Next
Response.Write "</TR>"
'お約束のEOFまでループは(データが無くなるまでループ)、
Do While rs.EOF = False 'レコードセットの.EOFがFalseの間
Response.Write "<TR>" '内容を表示する
For Each fld_A In Rs.Fields 'フィールドのアイテムに対してループ
Response.Write "<TD>" & fld_A.Value & "</TD>"
'↑.Valueでフィールドの値を表示する
Next
Response.Write "</TR>"
'次のレコードにポインタを移動する
rs.MoveNext 'これを忘れると悲惨なことに、、、
Loop
Response.Write "</TABLE>" 'テーブルは終わりです
rs.Close '開いていたレコードセットを閉じる
db.Close 'データベースも閉じようよ
Set db = Nothing 'お行儀よくオブジェクトも開放しましょう
%>
<hr>
終了です。<br>
</body>
</html>
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
項目別に記事をまとめました。
|
気になったジャンル↓を選択してください。 まぁ、基本はデータの受け取りかなぁ。 次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々 DBが使えるので、あまり使用しないけど、普通のテキストファイル処理 VBScriptでFormat関数が無いなど、微妙にVBAと違うけど ニガテな環境設定系など |
|
Blogとリンクほか: |