|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP是依赖组件的,能访问数据库的组件好多就有好多种,再有就是你微软的工具可是什么都要收钱的啊!因为事情缘故原由,触及到一个树状寄存纪录的表,请求程序中把树状表全体睁开,并输入响应的数据热荨S捎谏婕暗酱酥植僮鞯牡胤胶芏啵热缤缟系"论坛"就是典范的接纳树状寄存纪录的表,特此收拾出来与人人分享。
在良多材料都有先容睁开树状纪录的程序,可是良多是接纳递回的办法。我晓得,递回的办法逻辑对照复杂,实践操纵起来对照简单。可是递回有一个最年夜的弱点就是占用资本太多,速率太慢。假如在互联网的"论坛"上接纳此种办法,在表纪录良多的情形下将是一个十分严峻的成绩。上面的程序在笔者的事情中办理了一个年夜成绩并将使用于自己小站(yuking.126.com)的论坛。
我这里接纳速率十分快的仓库来完成这类操纵,可是操纵起来绝对而言难度加年夜。我们就以论坛纪录表为例解说这一历程,起首懂得一下表布局:
1、表布局(article)
selfint本纪录ID号
fatherint父纪录ID号
titlechar贴子题目
authorchar贴子作者
datetimedate发贴日期工夫
hitsint点击数
replyint复兴数
.....依据详细的情形我们还能够有更多的字段
1)关头申明:self是纪录本纪录的ID号,这应当是一个主动增加的字段,不充许反复。father是纪录本结点的父结点ID号的字段,若该纪录内容为"回贴"此字段值应当为"主贴"的ID号。若该纪录为"主贴"则它的父结点应当为"0"
2)以下两笔记录是父子纪录:
selffathertitleauthor.....
10谁能帮帮我三脚猫
21我能帮你甚么忙吗?网上飞
2、操纵办法
起首,我们读出一切父结点为"0"的纪录也就是"主贴",一切放进仓库中。然后输入位于栈顶的一笔记录("主贴")数据,并清空栈顶,栈下移一格。接着查找一切父结点为该栈项结点("主贴")的纪录("回贴"),也一切放于栈顶。注重到没有,就这两步我们就完成了把一条父纪录输入并睁开其子结点的事情。余下的事情只是顺次类推罢了了,直到栈为空为止。
固然实践操纵时大概还会有一些请求,好比请求失掉纪录的层数,复兴数等等成绩,我们只需略加改善就可以完成。
3、这里是收拾后的原代码
<%
setRS=server.CreateObject("ADODB.Recordset")
sql_text="select*fromarticlewherefather=0orderbydatetimedesc"
RS.Opensql_text,Bbs_ConnectionString查找一切父结点为0的结点,即"主贴"。
DimStack(100,8)界说仓库,我这里是100(8是指每一个栈元素分离寄存8个字段值)。可依据实践情形界说仓库巨细,能够按这个公式盘算"最多层数*最多睁开数"。
whilenotRs.eof
Stack(0,0)=RS("self")
Stack(0,1)=RS("father")
Stack(0,2)=RS("title")
Stack(0,3)=RS("author")
Stack(0,4)=RS("datetime")
Stack(0,5)=RS("hits")
Stack(0,6)=RS("reply")
Stack(0,7)=0
Top=1
dountilTop=0
Sql_text="select*fromarticlewherefather="&StackTop&"
RS1.OpenSql_text,MyConn查找一切父结点为栈顶结点的纪录
输入栈项元素,我这里是间接输入,实践做的时分能够发生表格等等效果
fori=0to7
Response.writestack(top-1,i)
next
ParentLevel=stack(top-1,7)清空仓库之前取得父纪录的层数
fori=0to7清空仓库项部
Stack(top-1,i)=""
next
Top=top-1栈顶向下挪动一格
将查找到的栈项结点"派生出"的全体子纪录存进仓库
WhilenotRS1.eof
Stack(Top,0)=RS1("self")
Stack(Top,1)=RS1("father")
Stack(Top,2)=RS1("title")
Stack(Top,3)=RS1("author")
Stack(Top,4)=RS1("datetime")
Stack(Top,5)=RS1("hits")
Stack(Top,6)=RS1("reply")
Stack(Top,7)=ParentLevel+1
Rs1.movenext
Top=Top+1栈项向上挪动
Wend
Rs1.close
loop
Rs.MoveNext挪动到下一笔记录
Wend
Rs.close
setRs=nothing
setRs1=nothing
%>
</p>优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合activeX功能强大,很多php做不到的asp+activeX能做到,例如银行安全控件 |
|