sql语句出错是?对象关闭时,不允许操作。

时间:2022-05-25 23:37:43
主要的顺序是这样的:我在同个页面里打开了两个表,没关系的吧?
有两个参数是获取同个url的id的,也没问题吧?
只是执行的时候for i=1 to rs_show.recordcount 报错:“对象关闭时,不允许操作。”
<%
dim sql
sql="select * from article where id="&cint(request.querystring("id"))
set rs=getSqlRecordset(sql,"database/mydb.mdb","article")
%>‘’用来显示内容的

<% 
dim sql_show,pid
pid=request.querystring("id")
sql_show="select * from reply where id="&pid
set rs_show=getsqlrecordset(sql_show,"database/mydb.mdb","reply")
for i=1 to rs_show.recordcount‘这句被报错

%>‘’用来显示留言的
<%
rs_show.movenext
if rs_show.eof then exit for
next
%>

<%
rs.close
set rs=nothing
rs_show.close
set rs_show=nothing

%>

13 个解决方案

#1


getsqlrecordset 贴出来。

#2


<%
rs.close
set rs=nothing
rs_show.close
set rs_show=nothing

%>
改成
<%
rs_show.close
set rs_show=nothing
rs.close
set rs=nothing
%>

#3


getsqlrecordset是什么东东?

#4


不好意思,让大家迷惑了,getsqlrecordset是打开sql和数据库的函数
内容如下:
function getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")
getSqlRecordset.open sql,conn,1,3
end function

#5


引用 2 楼 ziziszj 的回复:
<% 
rs.close 
set rs=nothing 
rs_show.close 
set rs_show=nothing 

%> 
改成 
<% 
rs_show.close 
set rs_show=nothing 
rs.close 
set rs=nothing 
%> 

结果是一样的。
即使我把这两句都删了也是一样的结果,执行到那里就出错了

#6


...
怎么没人回了,吃饭去先

#7


把FOR 改成 do while not rs_show.eof 试试。

#8


引用 4 楼 gamehome007 的回复:
不好意思,让大家迷惑了,getsqlrecordset是打开sql和数据库的函数 
内容如下: 

VBScript codefunction getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")

不明白你为什么要这样写!

#9


引用 4 楼 gamehome007 的回复:
不好意思,让大家迷惑了,getsqlrecordset是打开sql和数据库的函数 
内容如下: 

VBScript codefunction getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")

这样定义
set rs_show=getsqlrecordset(sql_show,"database/mydb.mdb","reply")
然后这样调用明显错误

#10


function getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")
getSqlRecordset.open sql,conn,1,3
end function

改成
function getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set rs_show=server.CreateObject("adodb.recordset")
rs_show.open sql,conn,1,3
end function


set rs_show=getsqlrecordset(sql_show,"database/mydb.mdb","reply")
这句改成
getsqlrecordset(sql_show,"database/mydb.mdb","reply")

#11


引用 10 楼 chinmo 的回复:
VBScript codefunction getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")
getSqlRecordset.open sql,conn,1,3
end function


改成 

VBScript codefunct…

本来那个函数是我从书中得来的,是为了方便多次调用,现在用你这种方法的话就只能用一次了啊?
再研究会...

#12


rs.open sql,constr1,1,1打开记录集

#13


嘿嘿,解决了,那个函数应该没错的。
我很安份地把那rs_show打开数据库写成最正常的形式
set rs_show=server.CreateObject("adodb.recordset")
rs_show.open sql_show,conn,1,3
测试后提示数据类型不匹配,才发现reply中的id,我定义成了文本...
现在改成数字就成了。
汗,谢谢大家了!!

#1


getsqlrecordset 贴出来。

#2


<%
rs.close
set rs=nothing
rs_show.close
set rs_show=nothing

%>
改成
<%
rs_show.close
set rs_show=nothing
rs.close
set rs=nothing
%>

#3


getsqlrecordset是什么东东?

#4


不好意思,让大家迷惑了,getsqlrecordset是打开sql和数据库的函数
内容如下:
function getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")
getSqlRecordset.open sql,conn,1,3
end function

#5


引用 2 楼 ziziszj 的回复:
<% 
rs.close 
set rs=nothing 
rs_show.close 
set rs_show=nothing 

%> 
改成 
<% 
rs_show.close 
set rs_show=nothing 
rs.close 
set rs=nothing 
%> 

结果是一样的。
即使我把这两句都删了也是一样的结果,执行到那里就出错了

#6


...
怎么没人回了,吃饭去先

#7


把FOR 改成 do while not rs_show.eof 试试。

#8


引用 4 楼 gamehome007 的回复:
不好意思,让大家迷惑了,getsqlrecordset是打开sql和数据库的函数 
内容如下: 

VBScript codefunction getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")

不明白你为什么要这样写!

#9


引用 4 楼 gamehome007 的回复:
不好意思,让大家迷惑了,getsqlrecordset是打开sql和数据库的函数 
内容如下: 

VBScript codefunction getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")

这样定义
set rs_show=getsqlrecordset(sql_show,"database/mydb.mdb","reply")
然后这样调用明显错误

#10


function getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")
getSqlRecordset.open sql,conn,1,3
end function

改成
function getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set rs_show=server.CreateObject("adodb.recordset")
rs_show.open sql,conn,1,3
end function


set rs_show=getsqlrecordset(sql_show,"database/mydb.mdb","reply")
这句改成
getsqlrecordset(sql_show,"database/mydb.mdb","reply")

#11


引用 10 楼 chinmo 的回复:
VBScript codefunction getSqlRecordset(sql,filename,tablename)
dim conn
on error  resume next
set conn=server.CreateObject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;"&"data source="&server.MapPath(filename)
conn.open

set getSqlRecordset=server.CreateObject("adodb.recordset")
getSqlRecordset.open sql,conn,1,3
end function


改成 

VBScript codefunct…

本来那个函数是我从书中得来的,是为了方便多次调用,现在用你这种方法的话就只能用一次了啊?
再研究会...

#12


rs.open sql,constr1,1,1打开记录集

#13


嘿嘿,解决了,那个函数应该没错的。
我很安份地把那rs_show打开数据库写成最正常的形式
set rs_show=server.CreateObject("adodb.recordset")
rs_show.open sql_show,conn,1,3
测试后提示数据类型不匹配,才发现reply中的id,我定义成了文本...
现在改成数字就成了。
汗,谢谢大家了!!