kira007 发布留言 2008-7-16 18:28
SUB 调用疑问
请教个问题
在 sub_config.asp 页面有 以下一个查询程序段如下
Sub Table_Select(str_table,str_select,str_where,str_by)
sql="select "&str_select&" from "&str_table&" "&str_where&" "&str_by&" "
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
(如果把输出数据写在 sub...end sub 之间是可以显示数据的)
end Sub
在seting.asp 中调用时 却不能显示数据,调用数据如下,是怎么一回事?
<% call Table_Select("websetting","webtitle,webkey,webinfo","","")
response.write rs(0) &"\"&rs(1) &"\"& rs(2)
rs.close
set rs=nothing
%>
multiple1902 发布留言 2008-7-16 18:42
确认一下这个rs指的是同一个rs……
kira007 发布留言 2008-7-16 19:14
是的,同一个RS
multiple1902 发布留言 2008-7-16 19:28
那我只能说……这个很诡异……
kira007 发布留言 2008-7-16 19:48
还是说SUB() 不支持 这样使用
tianyu123 发布留言 2008-7-16 19:55
过程中创建的对象,只能在过程中使用,当调用过程完毕后,对象就失效了
就像是过程级变量与脚本级变量的生命周期是不一样的
tianyu123 发布留言 2008-7-16 20:01
在过程外声明rs对象就好了
dim rsSub Table_Select(str_table,str_select,str_where,str_by)
sql="select "&str_select&" from "&str_table&" "&str_where&" "&str_by&" "
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
(如果把输出数据写在 sub...end sub 之间是可以显示数据的)
end Sub
kira007 发布留言 2008-7-16 20:27
终于纠正了,原来是 局部和全局变量的问题
只要把set rs=server.createobject("adodb.recordset") 放到Sub Table_Select 外面就可以了。
这样自就可以简约代码了。请高手别笑话.......
set rs=server.createobject("adodb.recordset")
Sub Table_Select(str_table,str_select,str_where,str_by)
sql="select "&str_select&" from "&str_table&" "&str_where&" "&str_by&" "
rs.open sql,conn,1,1
end Sub
multiple1902 发布留言 2008-7-16 20:29
问题不在这里。
难道说你没有定义变量?
难道rs在Set之前没有定义?
multiple1902 发布留言 2008-7-16 20:31
[un]tianyu123[/un] 在 2008-7-16 19:55 的发言:[/bo]
过程中创建的对象[/bo],只能在过程中使用,当调用过程完毕后,对象就失效了
就像是过程级变量与脚本级变量的生命周期是不一样的 |
这个创建指的是Dim的过程,而绝对不是Set的过程,所以楼主的情况可能是没有定义rs变量,在过程内Set的时候创建了rs变量,离开过程之后自然rs就作废了。
Sub是绝对支持这样使用的。
kira007 发布留言 2008-7-16 20:44
谢谢
能否按照您说的 修正下我的代码呢
multiple1902 发布留言 2008-7-16 20:48
如上面tianyi123牛所说,在使用之前定义变量。
其实这个问题很严重,涉及你的编程习惯。
如果你真的没有定义变量的习惯,从现在一定要纠正。不定义变量会造成未预料的后果。
kira007 发布留言 2008-7-16 20:53
那么 应该如何修正我的代码
Sub Table_Select(str_table,str_select,str_where,str_by)
sql="select "&str_select&" from "&str_table&" "&str_where&" "&str_by&" "
set rs_select=server.createobject("adodb.recordset")
rs_select.open sql,conn,1,1
end Sub
multiple1902 发布留言 2008-7-16 21:56
见12楼。
页: [1]