プロが教えるわが家の防犯対策術!

こんばんは。
初歩的なことなんですがどうしても解決できないので書き込みしました。

VBScriptで検索結果をランダムで取得し、
表示するプログラムを作成してみたんですが
うまく動作しません。

以下がソースです。

SQL = ""
SQL = SQL & "select NAME" & vbCrlf
SQL = SQL & " from TBL" & vbCrlf

'実行
Set rs = conn.Execute(SQL)

'レコードカウント取得~検索結果14件
rsCnt = rs.RecordCount

'ここで変数を最大値で設定できないのでしょうか?
'ためしに実数(今回は14)を挿入すると動作しました。
'理想はrs.RecordCountで配列指定したいのですができないです。
'これをするとrs.RecordCountに-1が返ってきてエラーが出ます。
ReDim strName(rsCnt)

'1から14の配列を取得する
intIdx=1
Do until rs.Eof
strName(intIdx)=rs("NAME")
intIdx=intIdx+1
rs.MoveNext
Loop

'データ表示
For intCnt = 1 to rsCnt
'この中でRnd関数を使ってみました。
'配列で実数を使用した場合、ここまで来るのですが
'その結果をランダムで表示したかったので
'RandomizeとRnd関数を使用しましたが
'重複データが出てきてしまいます。
'
Randomize
index=Rnd*rsCnt+1

以上なんですが解決方法があれば
是非ご指導お願いします。

Takeshi Takahashi 2002/02/06

A 回答 (2件)

↓のように辞書配列を用いれば出来ますよ。



Set dictData = Server.CreateObject("Scripting.Dictionary")
Randomize
do while dictData.count <> 14
index=Int((14) * Rnd) + 1
if Not dictData.Exists(index) Then dictData.Add index,strName(index)
loop


akeys = dictData.keys
for i = 0 to dictData.count - 1
Response.Write dictData.item(akeys(i)) & <BR>
Next
    • good
    • 0

補足です



「Execute」メソッドを実行しても Recordset は返されません
「OpenRecordset」メソッドで行ってください
    • good
    • 0

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