"对象关闭时,不允许操作"问题

Shi_ZQ 2012-09-04 05:29:49
代码如下:

if request("usertype")=" " then
usertype=" "
else
usertype=request.Form("usertype")
end if
dim conn,rs,sql
dim index
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("db/xxdb.mdb")
conn.Open "provider=microsoft.jet.oledb.4.0;data source=" & DBPath

Set rs = Server.CreateObject("ADODB.Recordset")
if usertype="sales" then
index=0
Set rs=conn.execute("Select * from login where salesname is not null")

elseif … …
elseif … …
elseif … …
end if

… …

<%
if request("usertype")<>" " then
do until rs.EOF %>

最后一行处报错。
求教各位大神!!!
...全文
937 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
scscms太阳光 2012-09-21
  • 打赏
  • 举报
回复
orderID应该是数字吧?
把sql=sql & " WHERE orderID='" & cid & "'"改成:
sql=sql & " WHERE orderID=" & cid
Shi_ZQ 2012-09-21
  • 打赏
  • 举报
回复
今天不知怎么又出现了这个问题,一直没调试成功,求助!!!代码如下
dim conn,rs,sql
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("db/xxdb.mdb")
conn.Open "provider=microsoft.jet.oledb.4.0;data source=" & DBPath
Set rs = Server.CreateObject("ADODB.Recordset")

cid=session("cid")
Semail=session("S_email")


sql="UPDATE OrderInfo SET "
sql=sql & "verify='" & Request.Form("verify") & "',"
sql=sql & "verifytime='" & now() & "',"
sql=sql & "express_NO='" & Request.Form("express_NO") & "',"
sql=sql & "express_co='" & Request.Form("express_co") & "',"
sql=sql & "v_staff='" & vname & "'"
sql=sql & " WHERE orderID='" & cid & "'"
rs.Open sql,conn,1,2
if rs.eof OR rs.bof then //此处报错
response.write("审核失败!<br><br><a href='verify01.asp'>返回>>")
rs.Close
Set rs=nothing
conn.Close
Set conn=nothing
response.end
elseif not rs.eof then
pred=request.Form("predate")
pre=split(pred,",")
sman=request.Form("salesman")
sm=split(sman,",")
end if
rs.Close
Set rs=nothing
conn.Close
Set conn=nothing
Shi_ZQ 2012-09-05
  • 打赏
  • 举报
回复
谢谢六楼和三楼,问题解决了!
努力的老孙 2012-09-05
  • 打赏
  • 举报
回复
6楼 xzy21com说的很详细了,
Dogfish 2012-09-05
  • 打赏
  • 举报
回复
对象已经close了。所以,楼主要看看在哪里不小心关闭了。
hookee 2012-09-05
  • 打赏
  • 举报
回复
查一下 If 语句走的是哪一个分支,可能是那个分支的 rs没有打开.
scscms太阳光 2012-09-05
  • 打赏
  • 举报
回复
conn.execute(sql)常常用在更新或者删除里,而你的是用在筛选里,这很少见(因为没什么作用)
如果我没理解错的话,你是想按条件来打开数据库,所以你应该把
Set rs=conn.execute("Select * from login where salesname is not null")
改成:
Rs.open "Select * from login where salesname is not null",Conn,1,1

这样下面的elseif条件里都可以分别按条件打开不同的数据库:
elseif
Rs.open "Select * from xxxxx",Conn,1,1
elseif
Rs.open "Select * from xxxxx",Conn,1,1
............
那么下面判断rs.EOF时就不会出错了。
Shi_ZQ 2012-09-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
rs=conn.execute(sql) 指的是马上执行sql,执行完后自动关闭对象rs,所以下面再调用rs.EOF时就会报对象已经闭关不准操作。
[/Quote]

那请问如何才能避免这种情况?执行完sql后下面我还会用到rs,应该怎么写语句?谢谢大神!
scscms太阳光 2012-09-04
  • 打赏
  • 举报
回复
rs=conn.execute(sql) 指的是马上执行sql,执行完后自动关闭对象rs,所以下面再调用rs.EOF时就会报对象已经闭关不准操作。
  • 打赏
  • 举报
回复
Set rs = Server.CreateObject("ADODB.Recordset")
if usertype="sales" then
index=0
Set rs=conn.execute("Select * from login where salesname is not null")
这里明显有错误啊

rs设置2次明显有问题

28,390

社区成员

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

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