注册 登录
编程论坛 ASP技术论坛

SUB 调用疑问

kira007 发布于 2008-07-16 18:28, 1351 次点击
请教个问题
在 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
%>
13 回复
#2
multiple19022008-07-16 18:42
确认一下这个rs指的是同一个rs……
#3
kira0072008-07-16 19:14
是的,同一个RS
#4
multiple19022008-07-16 19:28
那我只能说……这个很诡异……
#5
kira0072008-07-16 19:48
还是说SUB() 不支持 这样使用
#6
tianyu1232008-07-16 19:55
过程中创建的对象,只能在过程中使用,当调用过程完毕后,对象就失效了

就像是过程级变量与脚本级变量的生命周期是不一样的
#7
tianyu1232008-07-16 20:01
在过程外声明rs对象就好了
dim rs

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
#8
kira0072008-07-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
#9
multiple19022008-07-16 20:29
问题不在这里。

难道说你没有定义变量?
难道rs在Set之前没有定义?
#10
multiple19022008-07-16 20:31
[bo][un]tianyu123[/un] 在 2008-7-16 19:55 的发言:[/bo]

过程中[bo]创建的对象[/bo],只能在过程中使用,当调用过程完毕后,对象就失效了

就像是过程级变量与脚本级变量的生命周期是不一样的


这个创建指的是Dim的过程,而绝对不是Set的过程,所以楼主的情况可能是没有定义rs变量,在过程内Set的时候创建了rs变量,离开过程之后自然rs就作废了。

Sub是绝对支持这样使用的。
#11
kira0072008-07-16 20:44
谢谢
能否按照您说的 修正下我的代码呢
#12
multiple19022008-07-16 20:48
如上面tianyi123牛所说,在使用之前定义变量。

其实这个问题很严重,涉及你的编程习惯。
如果你真的没有定义变量的习惯,从现在一定要纠正。不定义变量会造成未预料的后果。
#13
kira0072008-07-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
#14
multiple19022008-07-16 21:56
见12楼。
1