高分求解一个小疑问

freeweb 2007-09-13 10:34:27
rs1.open ......,conn,1,3
rs1("")=request("")
rs1.update

response.Redirect "xxx.asp"

rs1.close
set rs1=nothing
conn.close
set conn=nothing

response.Redirect "xxx.asp"后面的关闭操作到底有没有生效?如果不起作用,该如何修改程序呢?放在response.Redirect "xxx.asp"之前是肯定不行的,程序会出错。
...全文
104 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeweb 2007-09-13
  • 打赏
  • 举报
回复
再次感谢一下!
freeweb 2007-09-13
  • 打赏
  • 举报
回复
问题解决!!!

总结一下:

1、记录集关闭操作必须放置在response.Redirect之前,才有可能执行。
2、在关闭记录集之前,必须判断一下:rs.state<>0

多谢各位朋友的热心帮助!让我更正一个大问题~结贴!!!
littlelam 2007-09-13
  • 打赏
  • 举报
回复
if IsObject(rs1) then
rs1.close
set rs1=nothing
end if
if IsObject(conn) then
conn.close
set conn=nothing
end if
toury 2007-09-13
  • 打赏
  • 举报
回复
直接用SQL吧

sql="UPDATE 表 SET 某字段='"&request("传值")&"' WHERE ...."
conn.execute sql
if conn.state<>0 then conn.close
set conn=nothing

response.Redirect "xxx.asp"
toury 2007-09-13
  • 打赏
  • 举报
回复
"这样的方式还是会出错,Insert_log 是SQL在存储过程,插入日志操作...."
---------------------------------------------------------------------
终于明白你的意思了.

我分析,这个错误是由于你用ADO和SQL语句同时操作一个表的更新才产生的;你可以做个测试:用ADO的rs记录集打开一个表,然后用conn.execute "..."语句去更新这个表,接下来你rs.close这个记录集, 这样的环境ADO是一定要报错的;

解决办法:不要交叉操作一个表的更新,或者用RECORDSET,用后关掉;或者直接用SQL语句
jingxiaoping 2007-09-13
  • 打赏
  • 举报
回复
看来问题原因不是出在跳转页面上面了。
toury 2007-09-13
  • 打赏
  • 举报
回复
不好意思,打错字了,更正:

这样处理:
(1): if rs1.state<>0 then rs1.close

(2):
rs1.open ......,conn,1,3
rs1("")=request("")
rs1.update

sql="UPDATE 表 SET 某字段='"&request("传值")&"' WHERE ...."
conn.execute sql
if conn.state<>0 then conn.close
set conn=nothing

response.Redirect "xxx.asp"



freeweb 2007-09-13
  • 打赏
  • 举报
回复
set rs3=server.CreateObject("adodb.recordset")
Sqlstr3="exec Insert_log '"&session("Zovy_user")&"','"&now()&"','添加网络广告 - "&request("Title")&"'"
rs3.open Sqlstr3,conn,1,1
response.Write "<script>alert('网站广告添加成功!');window.location='Admin_GG.asp';</script>"
rs3.close
set rs3=nothing

这样的方式还是会出错,Insert_log 是SQL在存储过程,插入日志操作
错误代码:
ADODB.Recordset (0x800A0E78)
对象关闭时,不允许操作。
toury 2007-09-13
  • 打赏
  • 举报
回复
[都会出现以下错误:
ADODB.Recordset (0x800A0E78)
对象关闭时,不允许操作。]
----------
那是由于 rs1根本没打开,所以你在rs1.close时报错

这样处理:
(1): if rs1.close<>0 then rs1.close

(2):
rs1.open ......,conn,1,3
rs1("")=request("")
rs1.update

sql="UPDATE 表 SET 某字段='"&request("传值")&"' WHERE ...."
conn.execute sql
conn.close
set conn=nothing

response.Redirect "xxx.asp"

freeweb 2007-09-13
  • 打赏
  • 举报
回复
不过不理解的就是你的response.redirect放到最下面为什么会出错。

我怀疑是数据库在更新时候有一个时间延迟,所以关闭数据库过快,可能会出现这样的问题。我用的数据库是SQL 2000  几乎都会出现上述错误。
freeweb 2007-09-13
  • 打赏
  • 举报
回复
闷了很久的一个小问题,那位兄弟答复一下。在线等候 立马结贴!
jingxiaoping 2007-09-13
  • 打赏
  • 举报
回复
你可以改成

rs1.open ......,conn,1,3
rs1("")=request("")
rs1.update

response.write "<script>location.href='xxx.asp';</script>"

rs1.close
set rs1=nothing
conn.close
set conn=nothing

这样的话下面的语句是会执行的。
不过不理解的就是你的response.redirect放到最下面为什么会出错。
freeweb 2007-09-13
  • 打赏
  • 举报
回复
多谢楼上回答,response.Redirect "xxx.asp" 放到最后,会出问题的。我经过反复测试过。

都会出现以下错误:
ADODB.Recordset (0x800A0E78)
对象关闭时,不允许操作。
孟子E章 2007-09-13
  • 打赏
  • 举报
回复
response.Redirect "xxx.asp"

放最后

28,391

社区成员

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

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