@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

配列の数値分、Do While not〜

1
投稿者投稿内容
わさび
会議室デビュー日: 2003/12/05
投稿数: 12
投稿日時: 2009-01-29 15:09
よろしくお願い致します。
VbScriptで下記のコードを記述しました。
内容は配列の数値分、Do While not〜で情報を抜き出したいのです。
具体的には下記になります。
----------------------

SQL="SELECT * FROM xzy WHERE((x.x='"& Request.QueryString("x) &"'))"
set rs=db.Execute(SQL)


SQL="SELECT * FROM abc WHERE((a.a='"& Request.QueryString("a") &"'))"
set rs1=db.Execute(SQL)

a = rs1("a")
b = split(a,",")

For i = 0 To Ubound(b)

Do While not rs.EOF

<%=rs("id")%>

rs.MoveNext
Loop

Next

------------------------
Ubound(b)=2です。
rs("Id")=11,12です。

処理結果を
1112 1112 1112
としたいのですが
実際は
1112
となってしまいます。
この書き方は無効なのでしょうか?他に方法はありますでしょうか?
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2009-01-29 16:02
FORのループは0−2だけど
その中で利用しているrsは一回目のループで
既にEOFになっているため
二回目以降のループではDO WHILEは一度も行われません。

Recordsetの取り扱いと出力のループを別にするか
MoveFirstなんかで戻るかしないといけません。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-01-29 16:14
> For i = 0 To Ubound(b)
で 3 回同じ処理が走りますが
2 回目と 3 回目は rs が EOF になっているから何も出ないんだと思います。
毎回 MoveFirst すればいいんじゃないでしょうか。

それにしても解読するのが大変です。

---------------------------------------------------
コード:

For i = 0 To 2
    Do While not rs.EOF
        Response.Write rs("id")
        rs.MoveNext
    Loop
Next


rs は ADODB.Recordse オブジェクトで
rs の全レコードの「id」列を 3 回出力させようとしていますが
1 回しか出力されません。
---------------------------------------------------

っていう感じに書いた方がわかり易いです。
For より上の事って質問にあまり関係ないですし。
わさび
会議室デビュー日: 2003/12/05
投稿数: 12
投稿日時: 2009-01-29 16:37
ありがとうございます。
助かりました!
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-01-29 19:28
質問事項には関係ないけど

SQL Injection や Script Injection の脆弱性があるんじゃない?放っておいていいのかな?
わさび
会議室デビュー日: 2003/12/05
投稿数: 12
投稿日時: 2009-01-30 13:14
え!どういうことでしょう?
ごん太
大ベテラン
会議室デビュー日: 2002/07/30
投稿数: 182
お住まい・勤務地: 森の中
投稿日時: 2009-01-30 13:27
((x.x='"& Request.QueryString("x) &"'))

((a.a='"& Request.QueryString("a") &"'))
の部分の事では?
1

スキルアップ/キャリアアップ(JOB@IT)