关于递归中的问题

zzhcsdn 2003-10-09 10:13:58
表名:tbtest
id parid
10001 10000
10002 10000
10003 10001
10004 10001
10005 10004
10006 10004
10007 10006
10008 10006
10009 10006
10010 10004
10011 10004
10012 10000
10013 10012
10014 10013
10015 10013
10016 10013

id=10000
function tree(id)
set rs=new adodb.recordset
sql="select * from tbtset where parid=" & id
rs.open sql,cn,1,1
while not rs.eof
call tree(rs("id"))
rs.movenext
wend
end function
当做到id=10001,再调用call tree(10001)来但到 parid=10001的记录时
程序会再次调用tree(id)这个function 并且会建rs对象,当循环结束后,rs.eof=true
跳出回到上一循环继续执行时报错,提示rs已经为eof,可是我在做select * from tbtset where parid=10000时才下移了一条记录啊,只递归调用的tree(id)中的rs到底了啊,此程序在ASP中是正常的,但在VB中就报上面的错,不知道是什么原因,请高手指点一下。
...全文
60 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
subzero 2003-10-12
  • 打赏
  • 举报
回复
正是因为是public的,才会出错,还没明白吗?vb和asp是不同的,必须注意变量作用域
射天狼 2003-10-10
  • 打赏
  • 举报
回复
你这个如果实现递归的话,你只申请内存,而没释放内存,一定会把内存用尽的.
zzhcsdn 2003-10-10
  • 打赏
  • 举报
回复
我明白VB中RS不能使用的原因,但如果同样的代码写在ASP中却可以使用,不知道什么原因。
strongfisher 2003-10-10
  • 打赏
  • 举报
回复
主要原因是你这个实现不了递归
因为你在调用下一个rs的时候你已经把原来的那个给销毁了
所以它不能形成递归
不知道讲明白没有
zzhcsdn 2003-10-10
  • 打赏
  • 举报
回复
I know,其中定义的语句没有在这里写,是public的。
另外,这仅是写了个例子主要是方便别人看的,所以我没有rs.close和set rs=nothing,
感谢您的提示。
我只是对出现这种问题感觉到不可思议,想了解出错原因
subzero 2003-10-10
  • 打赏
  • 举报
回复
不知道你在哪里定义的,从你描述的错误看来应该是变量作用域的问题,你在tree内定义rs变量试试。
说到这个递归问题,不知道你是要显示什么,如果数据量很大或流量很大的话,最好不要用递归算法,尤其对于asp来说,这需要消耗大量的系统资源,很容易当机。
另外,多句嘴,tree函数里面没有对rs对象的关闭和销毁,这是造成内存泄漏的主要问题。

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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