|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的办理|树型布局树型布局在我们使用程序中仍是很罕见的,好比文件目次,BBS,权限设置,部门设置等。这些数
据信息都接纳条理型布局,而在我们如今的干系型数据库中很难清淅表达。那末要在程序中碰到树型
布局成绩该怎样处置呢?
比来笔者经由过程一个ASP权限办理的程序轻松办理了一这成绩,如今将其收拾出来以飨读者。
起首,要将条理型数据模子转化为干系型数据模子。也就是说怎样在我们的ACCESS,SQLSERVER
,ORACLE等干系型数据库中计划这个数据布局。
拿个实例来说吧,比如上面一个数据:
文档办理1
|----新建文档2
|----文档修正3
|----文档回档4
||----检察回档信息5
||----删除回档信息6
|||----删除汗青文档7
|||----删除正式文档8
|----体系办理9
|----用户办理10
人事办理11
行政办理12
财政办理13
这是一个很典范的条理型布局数据,那末人人想想,怎样将其经由过程二维表的情势来表达呢?初
看上往很难,是吧。但是细心斟酌一番仍是有路径可钻的。
能够如许,将下面一切的权限视为一个权限字段,那末这个权限字段一定是要有一个ID值的。我
们再给这个干系型数据表再强行加一个字段――从属ID字段,也就是标明这个权限是属于哪一级权限
之下的,即这个ID值从属于哪个ID值。好比:“检察回档信息”权限ID值为“5”,它是从属于“文
档回档”权限之下的,那末它的从属ID字段的值就应当是“4”。OK,假如这一点能了解的话,那末我
们的干系转化事情也就算基础完成了。
上面我们就入手下手计划这张干系型数据表(以SqlServer7.0为例):
+-----------+-----------+-----------+-----------+----------+
| 字段名|字段寄义| 字段范例|字段巨细|字段属性|
+-----------+-----------+-----------+-----------+----------+
|SelfID|权限ID|Int|4|PK|
|PowerName|权限名 |Varchar|50|NotNull|
|PowerInfo|权限信息|Varchar|500||
|BelongID|从属ID|Int|4||
+-----------+-----------+-----------+-----------+----------+
好了,布局计划好你就能够轻松输出你的测试数据了。
然后,我们就针对怎样在网页中仿照条理布局显现这功效的ASP程序,这也是最关头的一步了。
程序清单:powerlist.asp
<%
数据库毗连
setconn=Server.CreateObject("ADODB.Connection")
conn.open"driver={SQLServer};server=chaiwei;DATABASE=chaiwei;UID=sa;PWD="
翻开一切父层数据
setrs=Server.CreateObject("ADODB.Recordset")
rs.Open"select*frompowerswherebelongidisnullorderbypowerid",conn,1,3
条理数亮相变量赋初值
format_i=1
列表主程序段
dowhilenotrs.eof
打印父层数据信息
response.write"<ahref=powerlist.asp?SelfID="&rs("powerid")&"&BelongID="&rs("belongid")&">"&rs("powername")&"</a>"
response.write"<br>"
子程序挪用,子层数据处置
CallListSubPower(rs("powerid"))
rs.movenext
loop
封闭父层数据集
rs.close
setrs=nothing
子层数据处置子程序
SubListSubPower(id)
翻开从属于下层powerid的一切子层数据信息
setrs_sub=Server.CreateObject("ADODB.Recordset")
rs_sub.Open"select*frompowerswherebelongid="&id&"orderbypowerid",conn,1,3
列子层数据
dowhilenotrs_sub.eof
条理数亮相变量递进累加
format_i=format_i+1
轮回缩进格局把持,由于顶层与二层不必要缩进,以是从第三层入手下手援用此程序段
fori=format_ito3step-1
response.write"|"
response.write""
next
打印子层数据信息
response.write"|----"
response.write"<ahref=powerlist.asp?SelfID="&rs_sub("powerid")&"&BelongID="&rs_sub("belongid")&">"&rs_sub("powername")&"</a>"
response.write"<br>"
递回挪用子程序自己,对子层数据举行渐渐处置
ListSubPower(rs_sub("powerid"))
rs_sub.movenext
loop
条理数亮相变量递退累减
format_i=format_i-1
封闭子层数据集
rs_sub.close
setrs_sub=nothing
EndSub
%>
powerlist.asp程序中,我们先翻开顶层数据,在轮回中显现出来;然后又计划一个子程序ListSubPower,经由过程递回算法在轮回中挪用,以此来翻开子层数据信息,而且在子程序外部轮回中又重复挪用本人,以此来逐层睁开深层数据。
别的,在程序中还用了一个静态变量format_i来把持缩进显现格局。
本文就树型布局在数据计划、程序把持方面做复杂实验,目标在于举一反三,但愿读者经由过程本文失掉更多启发。
</p>想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的 |
|