数组的问题

gb_m4gic 2009-03-25 01:34:01

darry=split(did,",")


for i = 0 to ubound(darry)
if trim(darry(i))<>"" then
set rsd=server.CreateObject("adodb.recordset")
sqld="select Dprice from dishes where id='"&darry(i)&"'"
rsd.open sqld,open_conn(),1,1
pay(i)=trim(rsd("Dprice"))
end if
next

pay(i)=trim(rsd("Dprice"))
想通过darry的值循环获取Dprice,然后赋值给pay数组。但是pay类型不符合是什么原因。
...全文
110 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
gb_m4gic 2009-03-25
  • 打赏
  • 举报
回复
原来这样。谢谢藏*无限.
never exists 2009-03-25
  • 打赏
  • 举报
回复
用js输出下 看看i的值好了
response.write("<script>alert('"&i&"');</script>")
  • 打赏
  • 举报
回复
你在外面这样就不同了
这样i并不是取他的最大值了,而是取他的执行次数
gb_m4gic 2009-03-25
  • 打赏
  • 举报
回复

<%
did="1,2,3,4,5"
darry=split(did,",")
b=ubound(darry)
redim Dprice(b)
for i=0 to ubound(darry)
Dprice(i)=i
next

response.Write i&"<br>"
response.Write b&"<br>"
%>
  • 打赏
  • 举报
回复
我看你搞错吧

did="1,2,3,4,5"
darry=split(did,",")
'dim Dprice(),b
b=ubound(darry)
redim Dprice(b)
for i=0 to ubound(darry)
Dprice(i)=i
response.Write Dprice(i)&":"&i&"<br>"
next
gb_m4gic 2009-03-25
  • 打赏
  • 举报
回复
呵呵,所以我才觉得哪里不对噻。
  • 打赏
  • 举报
回复
i怎么可能比b大呢??

你会不会搞错?
gb_m4gic 2009-03-25
  • 打赏
  • 举报
回复
呵呵。问题是这样的。
darry=split(did,",")'darry里面有5个元素
dim Dprice(),b
b=ubound(darry)'那么这里的话b=4
for i = 0 to ubound(darry)这里的话ubound(darry)=4
问题出来了,输出i,却i=5。也就是说i=ubound(darry)+1了,
但是for i = 0 to ubound(darry)这里不是说了的i=0开始循环的吗?

  • 打赏
  • 举报
回复
darry=split(did,",")'
dim Dprice(),b
b=ubound(darry)'这里假设你的b=5
redim Dprice(b)'那么这里就是Dprice(5)
这里只是说明了Dprice(5)只能放5个元素,但是数组的长度是从0开始的
所以ubound(Dprice)等于4
那么你for i=0 to ubound(Dprice)
那么这里的i最大值等于4
gb_m4gic 2009-03-25
  • 打赏
  • 举报
回复
呵呵,这个我知道,所有才有这个问题。i也是从0开始循环的吧。循环到ubound(darry)。那i输出的值却比b大1.
比如darry有5个元素。输出b的话就是4,输出i的话却是5.为什么?
  • 打赏
  • 举报
回复
晕,你应该要了解的是数组

数组下标是从0开始而不是从1开始
gb_m4gic 2009-03-25
  • 打赏
  • 举报
回复
最上面的问题已经解决了。

darry=split(did,",")
dim Dprice(),b
b=ubound(darry)
redim Dprice(b)

for i = 0 to ubound(darry)
if trim(darry(i))<>"" then
set rsd=server.CreateObject("adodb.recordset")
sqld="select Dprice from dishes where id='"&darry(i)&"'"
rsd.open sqld,open_conn(),1,1
Dprice(i)=rsd("Dprice")
Total = rsd("Dprice")+Total
end if
next

现在的话就是我response出来i<>b。什么原因啊/这个for i = 0 to ubound(darry)是怎么处理的?从1开始循环?
gb_m4gic 2009-03-25
  • 打赏
  • 举报
回复
i也是从0到ubound(darry) ,ubound(darry)也是从0开始增加吧。比如5个元素的话,b也应该是0,1,2,3,4这样。那i也应该是从0开始递增的啊。i的话就会是5。
layers2323 2009-03-25
  • 打赏
  • 举报
回复
b=ubound(darry)
如果你的darry有5个元素,那么b=4。
vbs就是这样规定
  • 打赏
  • 举报
回复
但是如果你定义后,长度不一样的话,会提示你下标出错

而不是提示类型不符合
  • 打赏
  • 举报
回复
不明白

你原来的问题是由于你没有定义数组造成的

所以才提示类型不符合

gb_m4gic 2009-03-25
  • 打赏
  • 举报
回复
谢谢大家帮忙。问题自己已经解决。

darry=split(did,",")
dim Dprice(),b
b=ubound(darry)
redim Dprice(b)

for i = 0 to ubound(darry)
if trim(darry(i))<>"" then
set rsd=server.CreateObject("adodb.recordset")
sqld="select Dprice from dishes where id='"&darry(i)&"'"
rsd.open sqld,open_conn(),1,1
Dprice(i)=rsd("Dprice")
Total = rsd("Dprice")+Total
end if
next

有个疑问。为什么i和b的值不一样?i要比b大一个。难道i是从1开始循环的?
never exists 2009-03-25
  • 打赏
  • 举报
回复
pay(i)=trim(rsd("Dprice"))
改成 Dprice=Dprice&trim(rsd("Dprice"))&","
再用split分割好了
layers2323 2009-03-25
  • 打赏
  • 举报
回复
你在pay(i)=trim(rsd("Dprice"))
的地方换成 pay(i)= "1"
看看是否错,如果错,说明pay有问题,如果没错,说明后面的值有问题。
lingyun410 2009-03-25
  • 打赏
  • 举报
回复
类型不符合?没有下标越界?
你输出一个这两个数据,你定义的长度
你的darry的维数是由split来创建的
而没有看到你定义pay数据
<%
Response.Write("darry:"&UBound(darry))
Response.Write("<br />pay:"&UBound(pay))
%>
加载更多回复(2)

28,391

社区成员

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

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