dポイントプレゼントキャンペーン実施中!

データベースから値を取得するコードを作っているのですがアルゴリズムがよくわからなくて困っています。
class name
_____
A   山田
A   鈴木
A   高橋
B   佐藤 
C   山本
C   田中
_____
というデータからブラウザへ
<table><tr>
<th>A</th><td>山田</td><td>鈴木</td><td>高橋</td>
</tr></table>
<table><tr>
<th>B</th><td>佐藤</td>
</tr></table>
<table><tr>
<th>C</th><td>山本</td><td>田中</td>
</tr></table>
というふうに出力したいんですがよい方法を教えてください。

A 回答 (3件)

データベースのテーブルの値を表示させたいということですが、データベースへの接続はうまくいっているのでしょうか?DBの種類やサーバーの構成(WEBサーバーとDBサーバーが別れているとか)の環境の説明をしてもらったほうが良いとは思いますが・・・



接続がうまくいっているとしたら、ASP内のソースの問題ですね。
僕の場合ですが、WEBサーバーとDB(オラクル)サーバーが別の構成です。
global.asa内に、DB接続用のApplication変数を設定します。

Sub Application_OnStart

Application("ORA")="Provider=MSDAORA.1;Password=パスワーード;User ID=ユーザーID;Data Source=DBサーバー名"
Application("ORAR")="領域名"

End Sub

ここで、WEBのディレクトリに入ってきたときに、DBとの接続に必要な情報をApplibcation変数に代入しておきます。
********ここまでglobal.asa*************************

データを表示させたいASPページ内で

<%@ Language=VBScript %>
<%
'【テーブルデータ一覧】
'---DB接続
Set OraDB = Server.CreateObject("ADODB.Connection")
OraDB.Open Application("ORA")
%>
<HTML>
<HEAD></HEAD>
<BODY><TABLE>
<%
'---SQL分の作成、
sSql="select フィールド1,フィールド2 from " _
& Application("ORAR") & ".テーブル名"
'---SQLの実行、レコードセットを用意
set rs=OraDB.Execute(sSql)
'---SQL実行の結果レコードがあれば、レコードの先頭に行きループ開始
if rs.eof=false then
rs.movefirst
do while rs.eof=false
'---レコードの最後までResponse.writeでデータを書き出し、次のレコードへ移動する。
Response.write "<TR><TD>" & rs("フィールド1") & "</TD>"
Response.write "<TD>" & rs("フィールド2") & "</TD></TR>"
rs.movenext
loop
else
Response.write "レコードがありません"
end if
'---レコードセットを開放します。
set rs=nothing
%>
</TABLE>
</BODY>
<%
'---データベースとの接続終了
set OraDB=nothing
%>
</HTML>

わかりにくいかもしれませんけど、参考までに・・・
    • good
    • 0
この回答へのお礼

みなさんご解答ありがとうございました。大変参考になりました。

お礼日時:2002/06/01 21:09

kumagoro-さんの指摘のとおり、パッと見て回答したのでSQLの文が間違っていました。


kumagoro-さんの回答のようにしたほうが良いと思います。
それで、補足なのですが、kumagoro-さんの回答では

A 山田 鈴木 高橋
A 山田 鈴木 高橋
A 山田 鈴木 高橋
B 佐藤
C 山本 田中
C 山本 田中

と表示されるのでは?

sql1 = "SELECT class FROM TableName ORDER BY class"の部分は

Distinctを加え重複データを表示しないようにするか、group by でグループ化しないといけないのではないでしょうか。

sql1 = "SELECT DISTINCT class FROM TableName ORDER BY class"
sql1 = "SELECT class FROM TableName GROUP BY class ORDER BY class"

間違っていたらごめんなさい。
    • good
    • 0

ichanさんの回答では


A 山田
A 鈴木
A 高橋
B 佐藤
C 山本
C 田中
となりますよね。

ですが、arusuさんは
A 山田 鈴木 高橋
B 佐藤
C 山本 田中
としたいのですね?
それでしたら以下のようにしてみてはいかがでしょうか?

(注)レコードセットを開く部分は省略してあります。rs1にはsql1が、rs2にはsql2が対応すると考えて下さい。


sql1 = "SELECT class FROM TableName ORDER BY class"

Do Until rs1.EOF

  Response.Write "<TABLE>"
  Response.Write "<TR>"
  Response.Write "<TH>" & rs1("class") & "</TH>"

  sql2 = "SELECT name FROM TableName WHERE class = '" & rs1("class") & "'"

  Do Until rs2.EOF
    Response.Write "<TD>" & rs2("name") & "</TD>"
    rs2.MoveNext
  Loop

  rs2.Close
  Set rs2 = Nothig

  Response.Write "</TR>"
  Response.Write "</TABLE>"

  rs1.MoveNext
Loop

rs1.Close
Set rs1 = Nothig
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!