用ASP程序实现两个循环,老是有问题,请高手帮助! ( 积分: 50 )

  • 主题发起人 chengcheng178
  • 开始时间
C

chengcheng178

Unregistered / Unconfirmed
GUEST, unregistred user!
用asp写的购物车的程序
rs是一个循环,rs5是一个循环
rs循环正常,rs5当加第一条记录时可以,(加入购物车),但加入第二条时 rs("cdname")就不能显示了,如果把第一条记录删除,第二条的记录可以显示,也就是只有一条记录才可以正常显示,请问这种循环的问题,应如何去写,请帮助,谢谢!
sub shoucang()
set rs=server.CreateObject("adodb.recordset")
dim rs5
set rs5=server.CreateObject("adodb.recordset")

rs.open "select xianhuo.*, shop_action.actionid,shop_action.bookid from xianhuo inner join shop_action on xianhuo.bookid=shop_action.bookid where shop_action.username='"&request.cookies("bookshop")("username")&"' and shop_action.zhuangtai=6",conn,1,1
if rs.eof And rs.bof then
Response.Write "
没有添加"
else
rs5.open "select * from cd_info where cdbianhao='"&rs("cdbianhao")&"'",conn,1,1
end if
'//html
response.write "<table width=96% border=0 align=center cellpadding=1 cellspacing=1 bgcolor=#FFFFFF>"
response.write "<tr><td width=7% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>选 择</font></div></td>"
response.Write "<td width=45% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>唱片编号</font></div></td>"
response.Write "<td width=45% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>唱片名称</font></div></td>"
response.Write "<td width=14% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>市场价</font></div></td>"
response.Write "<td width=13% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>会员价</font></div></td>"
response.Write "<td width=12% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>折 扣</font></div></td>"
response.Write "<td width=9% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>删 除</font></div></td></tr>"
do while not rs.eof
response.write "<tr><td bgcolor=#EFF5FE><div align=center><input name=bookid type=checkbox checked value="&rs("cdbianhao")&"
></div></td>"
response.write "<td bgcolor=#EFF5FE STYLE='PADDING-LEFT: 5px'><div align=left>"&rs("cdbianhao")&"</div></td>"
do while not rs5.eof
response.write "<td bgcolor=#EFF5FE STYLE='PADDING-LEFT: 5px'><div align=left>"&rs5("cdname")&"</div></td>"
rs5.movenext
loop
response.write "<td bgcolor=#EFF5FE><div align=center>"&formatnumber(rs("youhuijia"),2)&"元</div></td>"
response.write "<td bgcolor=#EFF5FE><div align=center><font color=#FF6600>"&formatnumber(rs("danjia"),2)&"元</font></div></td>"
response.write "<td bgcolor=#EFF5FE><div align=center>"&formatnumber(rs("zhekou")*100,2)&"%</div></td>"
response.write "<td bgcolor=#EFF5FE><div align=center>"

response.Write "<img src=images/trash.gif width=15 height=17 border=0></a></div></td></tr>"
rs.movenext
loop
rs.close
set rs=nothing

response.write "</div></td></tr></form></table>"
end sub
 
用asp写的购物车的程序
rs是一个循环,rs5是一个循环
rs循环正常,rs5当加第一条记录时可以,(加入购物车),但加入第二条时 rs("cdname")就不能显示了,如果把第一条记录删除,第二条的记录可以显示,也就是只有一条记录才可以正常显示,请问这种循环的问题,应如何去写,请帮助,谢谢!
sub shoucang()
set rs=server.CreateObject("adodb.recordset")
dim rs5
set rs5=server.CreateObject("adodb.recordset")

rs.open "select xianhuo.*, shop_action.actionid,shop_action.bookid from xianhuo inner join shop_action on xianhuo.bookid=shop_action.bookid where shop_action.username='"&request.cookies("bookshop")("username")&"' and shop_action.zhuangtai=6",conn,1,1
if rs.eof And rs.bof then
Response.Write "
没有添加"
else
rs5.open "select * from cd_info where cdbianhao='"&rs("cdbianhao")&"'",conn,1,1
end if
'//html
response.write "<table width=96% border=0 align=center cellpadding=1 cellspacing=1 bgcolor=#FFFFFF>"
response.write "<tr><td width=7% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>选 择</font></div></td>"
response.Write "<td width=45% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>唱片编号</font></div></td>"
response.Write "<td width=45% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>唱片名称</font></div></td>"
response.Write "<td width=14% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>市场价</font></div></td>"
response.Write "<td width=13% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>会员价</font></div></td>"
response.Write "<td width=12% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>折 扣</font></div></td>"
response.Write "<td width=9% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>删 除</font></div></td></tr>"
do while not rs.eof
response.write "<tr><td bgcolor=#EFF5FE><div align=center><input name=bookid type=checkbox checked value="&rs("cdbianhao")&"
></div></td>"
response.write "<td bgcolor=#EFF5FE STYLE='PADDING-LEFT: 5px'><div align=left>"&rs("cdbianhao")&"</div></td>"
do while not rs5.eof
response.write "<td bgcolor=#EFF5FE STYLE='PADDING-LEFT: 5px'><div align=left>"&rs5("cdname")&"</div></td>"
rs5.movenext
loop
response.write "<td bgcolor=#EFF5FE><div align=center>"&formatnumber(rs("youhuijia"),2)&"元</div></td>"
response.write "<td bgcolor=#EFF5FE><div align=center><font color=#FF6600>"&formatnumber(rs("danjia"),2)&"元</font></div></td>"
response.write "<td bgcolor=#EFF5FE><div align=center>"&formatnumber(rs("zhekou")*100,2)&"%</div></td>"
response.write "<td bgcolor=#EFF5FE><div align=center>"

response.Write "<img src=images/trash.gif width=15 height=17 border=0></a></div></td></tr>"
rs.movenext
loop
rs.close
set rs=nothing

response.write "</div></td></tr></form></table>"
end sub
 
do while not rs5.eof
response.write "<td bgcolor=#EFF5FE STYLE='PADDING-LEFT: 5px'><div align=left>"&rs5("cdname")&"</div></td>"
rs5.movenext
loop
请大家关键看这几行语句的所放的位置和写法有什么问题
 
从你的代码中可以看出,你的rs与rs5应该是主从关系,即rs循环一次,rs5需要重新取记录,可能多条,然后循环rs5,将rs5中的记录循环显示出来。
如果上述判断正确的话,你的错误为:
if rs.eof And rs.bof then
Response.Write "
没有添加"
//else
//无须再次打开rs5
//rs5.open "select * from cd_info where cdbianhao='"&rs("cdbianhao")&"'",conn,1,1
end if
'//html
response.write "<table width=96% border=0 align=center cellpadding=1 cellspacing=1 bgcolor=#FFFFFF>"
....
response.Write "<td width=9% bgcolor=#5F95D3><div align=center><font color=#FFFFFF>删 除</font></div></td></tr>"
do while not rs.eof
response.write "<tr><td bgcolor=#EFF5FE><div align=center><input name=bookid type=checkbox checked value="&rs("cdbianhao")&"
></div></td>"
response.write "<td bgcolor=#EFF5FE STYLE='PADDING-LEFT: 5px'><div align=left>"&rs("cdbianhao")&"</div></td>"
///应在这儿打开rs5
rs5.open "select * from cd_info where cdbianhao='"&rs("cdbianhao")
do while not rs5.eof
response.write "<td bgcolor=#EFF5FE STYLE='PADDING-LEFT: 5px'><div align=left>"&rs5("cdname")&"</div></td>"
rs5.movenext
loop
。。。。。
rs.movenext
loop
rs.close
set rs=nothing

response.write "</div></td></tr></form></table>"
 
当rs循环一次,就从rs5中取一条记录cdname(只是一条记录,不是多条记录,它的表是cd_info)
谢谢你的回复,但我按你的执行出现以下问题:
ADODB.Recordset 错误 '800a0e79'
对象打开时,操作不被允许。
/subuser0.asp, 行36
行36是 rs5.open "select * from cd_info where cdbianhao='"&rs("cdbianhao")

 
忘了在打开之前关闭了:
rs5.close //增加关闭数据集代码
rs5.open "select * from cd_info where cdbianhao='"&rs("cdbianhao")
do while not rs5.eof
 
谢谢你的回复,我已经解决!
 
晚了,不过为了分数我要重复一下。
你的rs5是根据rs的值生成的,所以应该将rs5的open放到rs的循环之内执行,这样就可以保证rs5的每次sql语句根据不同的rs的值生成。
具体代码就是TYZhang所说的。
 
顶部