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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

QASPでRecordCountが使用できない

Accessの100件のデータを10行づつブラウザに表示したいのですが、rs.PageCount、rsRecordCountなど色々と試しましたが正しい結果が得られず
困っています。

rs.AbsolutePage、Rs.PageSizなども試してみましたが、やはり結果は-1しか返されません。

Set db1=Server.CreateObject("ADODB.Connection")
db1.Provider="Microsoft.Jet.OLEDB.4.0"
db1.ConnectionString=Server.MapPath("../master.mdb")
db1.Mode=1
db1.Open
'
Set rs1=Server.CreateObject("ADODB.Recordset")
Rs1.Pagesize = 5
'
keyword = "ABC"
'
SQL1a = "SELECT top 5 * FROM dbFILE WHERE dbTABEL Like '%" & Keyword & "%'"
Set Rs1=db1.Execute(SQL1a)

Response.Write rs1.PageCount

このようなリストで試しています。よき方法があれば是非 教えて下さい。
最終的にはSQL 7.0に置き換える予定です。

宜しく、お願いします。

Accessの100件のデータを10行づつブラウザに表示したいのですが、rs.PageCount、rsRecordCountなど色々と試しましたが正しい結果が得られず
困っています。

rs.AbsolutePage、Rs.PageSizなども試してみましたが、やはり結果は-1しか返されません。

Set db1=Server.CreateObject("ADODB.Connection")
db1.Provider="Microsoft.Jet.OLEDB.4.0"
db1.ConnectionString=Server.MapPath("../master.mdb")
db1.Mode=1
db1.Open
'
Set rs1=Server.CreateObject("ADODB.Recordset")
Rs1.Pagesize ...続きを読む

Aベストアンサー

ヒントだけ

RecordCountプロパティはSupportsメソッドのadApproxPositionとadBookmarkが TrueだとRecordCountプロパティがサポートされます。

で、これらをサポートしているのがRecordsetオブジェクトのCursorTypeが「adOpenKeyset」または「adOpenStatic」を指定した時のみとなります。

上記ソースではCursorTypeが指定されていないため
カーソルタイプを指定していない状態(adOpenUnspecified)となり、RecordCountプロパティの結果が -1となっています。

なんか小難しい説明になりましたが、実際にMSDN等を参考に試行錯誤してみると、わかっていただけると思います。

参考になれば

QaspxにてVBAのようなEXECUTEメソッドは?

aspxにてVBAのようなEXECUTEメソッドは?
お世話になります。
aspxにてVBAのようなEXECUTEやVBScriptのようなEVALを扱いたいのです。
vb内にて

If num = 1 Then
Inq1.Src = "gazou/Inq-11.gif"
Else
Inq1.Src = "gazou/Inq-10.gif"
End If
If num = 2 Then
Inq2.Src = "gazou/Inq-21.gif"
Else
Inq2.Src = "gazou/Inq-20.gif"
End If
If num = 3 Then
Inq3.Src = "gazou/Inq-31.gif"
Else
Inq3.Src = "gazou/Inq-30.gif"
End If
If num = 4 Then
Inq4.Src = "gazou/Inq-41.gif"
Else
Inq4.Src = "gazou/Inq-40.gif"
End If
If num = 5 Then
Inq5.Src = "gazou/Inq-51.gif"
Else
Inq5.Src = "gazou/Inq-50.gif"
End If

という上記内容を
Dim Inq(5) As String
For i As Integer = 1 To 5
If i = num Then
Eval("Inq" & i & ".src = gazou/Inq-" & i & "1.gif" --------*
Else
Eval("Inq" & i & ".src= gazou/Inq-" & i & "0.gif" --------*
End If
Next
のようにするには-------*をどのような文にすればよいでしょうか?
よろしくお願いします。

aspxにてVBAのようなEXECUTEメソッドは?
お世話になります。
aspxにてVBAのようなEXECUTEやVBScriptのようなEVALを扱いたいのです。
vb内にて

If num = 1 Then
Inq1.Src = "gazou/Inq-11.gif"
Else
Inq1.Src = "gazou/Inq-10.gif"
End If
If num = 2 Then
Inq2.Src = "gazou/Inq-21.gif"
Else
Inq2.Src = "gazou/Inq-20.gif"
End If
If num = 3 Then
Inq3.Src = "gazou/Inq-31.gif"
Else
Inq3.Src = "gazou/Inq-30.gif"
End If
If num = 4 Then
Inq4.Src = "gazou/Inq-41.gif"
Else
Inq4.Src = "gazou/Inq-40.gi...続きを読む

Aベストアンサー

Inq ってのが何を指して、どういう状態にあるのかわからないので、TextBox にたとえて勝手に書きます。
ちなみに Windows フォームで実験してます。
フォーム上に TextBox1 ~ TextBox5 が既に配置されています。

Dim textBoxes() As System.Windows.Forms.TextBox
Dim num As Integer = 3
textBoxes = New System.Windows.Forms.TextBox(4) {Me.TextBox1, Me.TextBox2, Me.TextBox3, Me.TextBox4, Me.TextBox5}
For i = 1 To textBoxes.Length
  If i = num Then
    textBoxes(i - 1).Text = "gazou/Inq-" & i & "1.gif"
  Else
    textBoxes(i - 1).Text = "gazou/Inq-" & i & "0.gif"
  End If
Next

Inq ってのが何を指して、どういう状態にあるのかわからないので、TextBox にたとえて勝手に書きます。
ちなみに Windows フォームで実験してます。
フォーム上に TextBox1 ~ TextBox5 が既に配置されています。

Dim textBoxes() As System.Windows.Forms.TextBox
Dim num As Integer = 3
textBoxes = New System.Windows.Forms.TextBox(4) {Me.TextBox1, Me.TextBox2, Me.TextBox3, Me.TextBox4, Me.TextBox5}
For i = 1 To textBoxes.Length
  If i = num Then
    textBoxes(i - 1).Text = "g...続きを読む

Q『列名 '担当者CD' があいまいです。』

VS2005のASP.NETで開発しております。
ここで、SelectCommandにて、2つ目のテーブルより名称を参照しようとJOIN関数をしようしましたら『列名 '担当者CD' があいまいです。』とのエラーメッセージです。 これはどこが悪いのでしょうか?
いろいろ修正してみたのですが解りません。
解る方がおりましたらアドバイスを頂けないでしょうか?
よろしくお願いいたします。

Aベストアンサー

複数のテーブルから、同じ名前の列をとりだす場合、どちらのテーブルの値なのか特定できないため、このエラーがでます。
なので、担当者CDの前にテーブル名をつけましょう。

例えば以下のようなテーブルがふたつあるとして…
テーブル1
担当者CD
担当者名

テーブル2
ID
担当者CD

SELECT テーブル2.担当者CD
FROM テーブル2
INNER JOIN テーブル1
ON テーブル1.担当者CD=テーブル2.担当者CD
WHERE テーブル2.担当者CD='99999'
ORDER BY テーブル2.担当者CD

のように書きます。(列が多い場合は、テーブルに別名をつけてあげると、多少、楽できるかも)

Qasp.NET初心者です。「 ’Context’は’○○○’のメンバで

asp.NET初心者です。「 ’Context’は’○○○’のメンバではありません。」というエラーが出て困っています。
「Inherits」が原因のようなのですが、役割がいまいち分かりません。
ご教授よろしくお願いします。

【あ.aspx】
1行目:<%@ Page Language="VB" AutoEventWireup="false" CodeFile="answer.aspx.vb" Inherits="○○○" %>
・・・中略・・・
<!-- ヘッダー -->
<div id="header">
<h1><%=SiteMap.CurrentNode.Title%>!</h1>  ←sitemapで指定したタイトルをヘッダに表示。
</div>

=============================================================
【Web.siteMap】
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode
url="def.aspx"
title="Welcome"
description="homepage">
<siteMapNode
url="あ.aspx"
title="ようこそ"
description="あいう" /> ←何をいれてよいのでしょうか?
</siteMapNode>
</siteMap>

=============================================================
【Web.config】
<siteMap enabled="true">
<providers>
<add name="JaSiteMapProvider"
type="System.Web.XmlSiteMapProvider" siteMapFile="Web.sitemap" />
</providers>
</siteMap>

=============================================================

よろしくお願いします。

asp.NET初心者です。「 ’Context’は’○○○’のメンバではありません。」というエラーが出て困っています。
「Inherits」が原因のようなのですが、役割がいまいち分かりません。
ご教授よろしくお願いします。

【あ.aspx】
1行目:<%@ Page Language="VB" AutoEventWireup="false" CodeFile="answer.aspx.vb" Inherits="○○○" %>
・・・中略・・・
<!-- ヘッダー -->
<div id="header">
<h1><%=SiteMap.CurrentNode.Title%>!</h1>  ←sitemapで指定したタイトルをヘッダに表示。
</div>

==...続きを読む

Aベストアンサー

answer.aspx.vb の中で定義している○○○が
名前空間.クラス、あるいはソリューション.クラスに
なっていないと思います。クラス名を変更したのでは?
リファクタリングしても、この部分は更新されないので、
このエラーが出ます。リファクタリングのバグだと言い
たいですね。でも、直さないでしょうけど…

QADODB.Recordset エラー '800a0cc1' が出てしまいます。

はじめまして。SQL文について質問です。
以下の文で、
'2009/04/01 0:0:0'~'2009/04/21 23:59:59'の間にあるデータのうち
最も時間の古いものを取りたいのですが、エラーが出てしまいました。
ひととおり、調べたのですが、基本的すぎて分かりませんでした。
御指摘いただけるとうれしいです。

SELECT sID,KANJINAME,KANANAME,WARDNAME,subject,MAX(D_time) FROM Q_Reg1Data
WHERE ((D_time >= CDate('2009/04/01 0:0:0')) AND (D_time <= CDate('2009/04/21 23:59:59')))
GROUP BY sID,KANJINAME,KANANAME,WARDNAME,subject

ADODB.Recordset エラー '800a0cc1'

Aベストアンサー

データベースの相手は何ですか?Accessですか?Oracleですか?
ADOだからといって、相手のデータベースが解釈できない関数は使用できません。
⇒CDate関数を気にしています。

文面には相手のデータベースが書いてありませんので、以下は想像なので、失礼な点があるかもしれません。

CDate関数を使っているところからAccessかと思いますが、単にVBだからという勘違いはないでしょうか?

もし、相手のデータベースがOracleの場合は、
D_time>=TO_DATE('2009/04/01','YYYY/MM/DD') AND D_time<TO_DATE('2009/04/21','YYYY/MM/DD')

また、MySQLの場合は、
D_time>=DATE_FORMAT('2009/04/01','%Y/%m/%d') AND D_time<DATE_FORMAT('2009/04/21','%Y/%m/%d')

などと使い分ける必要があります。

ちなみに、
>最も時間の古いものを
MIN(D_time)では?

データベースの相手は何ですか?Accessですか?Oracleですか?
ADOだからといって、相手のデータベースが解釈できない関数は使用できません。
⇒CDate関数を気にしています。

文面には相手のデータベースが書いてありませんので、以下は想像なので、失礼な点があるかもしれません。

CDate関数を使っているところからAccessかと思いますが、単にVBだからという勘違いはないでしょうか?

もし、相手のデータベースがOracleの場合は、
D_time>=TO_DATE('2009/04/01','YYYY/MM/DD') AND D_time<TO_DATE('20...続きを読む


おすすめ情報