下标越界的问题???

xuwei214 2008-12-15 08:08:02
以下程序,老是提示"
错误类型:
Microsoft VBScript 运行时错误 (0x800A0009)
下标越界: '1'
/renzi/02.asp, 第 41 行
"
-------------------------------------------------------------------------------
<%
dim conn,connstr
set conn = Server.CreateObject("ADODB.Connection")
connstr="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=e:/renzi/rz/db/sjk/m/renzi.mdb;UID=;PWD=;"
conn.Open connstr
set rs=server.createobject("adodb.recordset")
sql="SELECT * FROM renzi ORDER BY id DESC"
rs.open sql,conn,1,3
%>
<%
If Not rs.EOF Or Not rs.BOF Then %>
<%
dim c
dim i
c=(renzi_total)
dim arrayid()
redim arrayid(c)
rs.movefirst
for i = 1 to c
arrayid(i)=rs.fields.item("id").value
rs.movenext
next
%>
<%
dim arraynum
Randomize
arraynum=Int(c* Rnd(now()) + 1)
%>
<% end if %>
<%
rs.close
set rs = Nothing
%>
<%
dim conn1,connstr1
set conn1 = Server.CreateObject("ADODB.Connection")
connstr1="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=e:/renzi/rz/db/sjk/m/renzi.mdb;UID=;PWD=;"
conn1.Open connstr1
set rs=server.createobject("adodb.recordset")
sql="SELECT * FROM renzi WHERE id = " + Replace(arrayid(arraynum), "'", "''") + "" '第41行
rs.open sql,conn1,1,3
%>
-----------------------------------------------------------------
<%=(rs.Fields.Item("hanzi").Value)%>
-------------------------------------------------------------------
<%
rs.close
ser rs=nothing
%>
------------------------------------------------------------------------------
设计思路是定义一个数组,依次写入表中记录的ID值.然后从数组中随机读出一个ID,达到从表中随机选取一条记录的目的.
第41行是
sql="SELECT * FROM renzi WHERE id = " + Replace(arrayid(arraynum), "'", "''") + ""
请各位看看,怎么回事??
谢谢
...全文
79 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2008-12-15
  • 打赏
  • 举报
回复
对了,在适当的地方还得补一个 end if.
-晴天 2008-12-15
  • 打赏
  • 举报
回复
这句错了:
response.write rs.Fields.Item("hanzi")
一般习惯写法是:
response.write rs("hanzi")
简洁.我把后面删了,没注意你前头还有.
-晴天 2008-12-15
  • 打赏
  • 举报
回复
试试:
<% 
dim conn,connstr,c
set conn = Server.CreateObject("ADODB.Connection")
connstr="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=e:/renzi/rz/db/sjk/m/renzi.mdb;UID=;PWD=;"
conn.Open connstr
set rs=server.createobject("adodb.recordset")
sql="SELECT id FROM renzi"
rs.open sql,conn,1,3

If Not rs.EOF Or Not rs.BOF Then
Randomize
c=int((rs.RecordCount-1)*rnd)+1

rs.move c
id=rs("id")
rs.close

sql="SELECT * FROM renzi WHERE id =" & id
rs.open sql,conn,1,3

response.write rs.Fields.Item("hanzi")

rs.close
ser rs=nothing
conn.close
set conn=nothing
%>

1.第一次查询获得id,由于是要随机,所以根本不用排序.
2.用RecordCount获得记录集的记录数,取最小为1最大为它的随机数.
3.用move 方法移到随机所指的记录,取id
4.用rs重新打开一个记录集,id为指定值.
-晴天 2008-12-15
  • 打赏
  • 举报
回复
c=(renzi_total)
这里的renzi_total是在哪定义的?
-晴天 2008-12-15
  • 打赏
  • 举报
回复
同样的连接对象,没有必要定义两个.一个连接对象可以执行多个命令,获取多个不同的数据集.

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧