ASP中递归查询Access可以执行到多少层?
Access数据库, 只有135条记录(也就是135层),Win2003 IIS6(AMD XP2000+ 512M)竟然无法执行,
大家有什么好的建议!
Sub Tree(UID,n)
Dim SQL,Rs
Dim FatherID
If MNum(UID)=False Then Exit Sub
SQL="Update [Member] Set n=n+"&n&",m=m+1 Where ID="&UID
conn.Execute(SQL)
SQL="Select FatherID From [Member] Where ID="&UID
Set Rs=conn.Execute(SQL)
SQL=""
If Rs.Eof Then
Exit Sub
Else
FatherID=Rs("FatherID")
End If
Rs.Close
Set Rs=Nothing
UpHarvest FatherID,n
End Sub
问题点数:70、回复次数:9Top
1 楼liangyr()回复于 2006-03-15 04:43:53 得分 0
简化
Sub Tree(UID)
Dim SQL,Rs
Dim FatherID
SQL="Select FatherID From [Member] Where ID="&UID
Set Rs=conn.Execute(SQL)
If Not(Rs.Eof) Then
FatherID=Rs("FatherID")
End If
Rs.Close
Set Rs=Nothing
tree FatherID
End SubTop
2 楼yjbnew(伟大的光荣的正确的ASP千岁千岁千千岁)回复于 2006-03-15 08:02:53 得分 0
135层好像太多了吧!Top
3 楼shown_james(咖啡)回复于 2006-03-15 08:34:22 得分 0
缓存问题吧
response.flush+response.buffer=falseTop
4 楼netdust(静时常思己过,闲谈勿论人非)回复于 2006-03-15 08:36:52 得分 0
你的程序好像有错误
-------
递归调用时未判断FatherID的赋值情况,也就会无限的调用下去,自然多少都不够了Top
5 楼liangyr()回复于 2006-03-15 16:19:51 得分 0
If MNum(UID)=False Then Exit Sub
就是FatherID的判断了,MNum是专门判断函数,我在实际程序中监测,只能执行到120层,Top
6 楼netdust(静时常思己过,闲谈勿论人非)回复于 2006-03-15 17:54:54 得分 20
函数欠套最多可以执行129层
可以用下面的程序测试一下
-----
<%
dim i
i=0
f()
sub f()
i=i+1
response.write i&"<br>"
f()
end sub
%>Top
7 楼liangyr()回复于 2006-03-15 18:00:39 得分 0
netdust老大有什么办法解决呢?Top
8 楼netdust(静时常思己过,闲谈勿论人非)回复于 2006-03-15 18:39:11 得分 50
你看看这样写是不是能行 (我没测试,也许有错误)
-------
Sub Tree(UID,n)
Dim SQL,Rs
Set rs = Server.CreateObject("Adodb.Recordset")
While True
If MNum(UID)=False Then
Set rs=Nothing
Exit Sub
End If
SQL="select FatherID,n,m from [Member] Where ID="&UID
rs.Open sql,conn,1,2
If Not Rs.Eof Then
UID=Rs("FatherID")
rs("n")=rs("n")+n
rs("m")=rs("m")+1
rs.Update()
Else
UID="no"
End If
Rs.Close()
WEnd
End SubTop
9 楼liangyr()回复于 2006-03-15 22:54:44 得分 0
可以通过了Top




