プロが教える店舗&オフィスのセキュリティ対策術

以下のようなテーブルがあります。
BookID,CategoryIDは一意な値です。
BooksDataをある条件で抽出するSQLを発行した際、
例えば300番のBookIDにはCategoryIDが複数あると
結果は300のレコードが複数分表示されます。
BooksIDが同じ値の場合、nextして、重複しない値になるまでnextさせ、結果としてBooksIDの値が重複しない結果を表示したいと考えております。
しかし、内側にあるDoWhile-Loop文で不明なエラーとなります。外側のDoWhile-Loop文をコメントアウトされると正常にnextできているようです。原因について推測できることはございますでしょうか。

[BooksData]
BookID
ISBN
Title
[BooksCategory]
BookID
CategoryID
[BooksM_Category]
CategoryID
CategoryName


Do While Not rs1.EOF
'BooksDataを表示
Response.Write("BookID:")
Response.Write(rs1("BookID")&"<br>")
'300番がはいっている
bid = rs1("BookID")

'ここでエラーになる
Do Until rs1("BookID") > bid
rs1.MoveNext
'最初のDoWhile-Loopをコメントアウトされると301が表示される。
'Response.Write(rs1("BookID"))
Loop
Loop

A 回答 (2件)

って、間違えてた。

。。汗
最後にEnd If入れてください!
    • good
    • 0

'データが取得できたら、出力


If rs1.EOF = False then
'先頭のIDを比較用に確保
bid = rs1("BookID")
'1行目のタイトルを出力
Response.Write("BookID:")
'1行目のBooksDataを出力
Response.Write(rs1("BookID")&"<br>")

'データ件数分ループ
Do Until rs1.EOF
'確保したIDと現在行のIDを比較
'→一致する場合は出力しない
If rs1("BookID") <> bid then
'違う場合
'比較用ID確保
bid = rs1("BookID")
'タイトル出力
Response.Write("BookID:")
'BooksDataを出力
Response.Write(rs1("BookID")&"<br>")
End If
'次のデータへ
rs1.MoveNext
Loop


でいけるかと。
でも、BookIDだけを出力させるSQLを組んでいるのであれば、
SELECT DISTINCTすれば済むだけかと。
前段がよくわからないので、とりあえずロジックで対応してみました。
間違えてたら自己責任で直してください(^^;;;
    • good
    • 0
この回答へのお礼

DISTINCTであっさりうまくいきました!
SQLとASPの勉強中なもので、半日悩んでました。
ありがとうございました。

お礼日時:2004/12/21 16:06

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