• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    樹型結構在ASP中的簡單解決

    發布: 2007-7-14 19:37 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 12次 | 進入軟件測試論壇討論

    領測軟件測試網 樹型結構在我們應用程序中還是很常見的,比如文件目錄,BBS,權限設置,部門設置等。這些數

    據信息都采用層次型結構,而在我們現在的關系型數據庫中很難清淅表達。那么要在程序中遇到樹型

    結構問題該如何處理呢?

      最近筆者通過一個ASP權限管理的程序輕松解決了一這問題,現在將其整理出來以饗讀者。

      首先,要將層次型數據模型轉化為關系型數據模型。也就是說如何在我們的ACCESS,SQL SERVER

    ,ORACLE等關系型數據庫中設計這個數據結構。
      拿個實例來講吧,譬如下面一個數據:

    文檔管理 1
    |----新建文檔 2
    |----文檔修改 3
    |----文檔歸檔 4
    | |----查看歸檔信息 5
    | |----刪除歸檔信息 6
    | | |----刪除歷史文檔 7
    | | |----刪除正式文檔 8
    |----系統管理 9
    |----用戶管理 10
    人事管理 11
    行政管理 12
    財務管理 13

      這是一個很典型的層次型結構數據,那么大家想一想,如何將其通過二維表的形式來表達呢?初

    看上去很難,是吧?墒亲屑毻魄靡环是有門路可鉆的。

      可以這樣,將上面所有的權限視為一個權限字段,那么這個權限字段肯定是要有一個ID值的。我

    們再給這個關系型數據表再強行加一個字段——隸屬ID字段,也就是表明這個權限是屬于哪一級權限

    之下的,即這個ID值隸屬于哪一個ID值。比如:“查看歸檔信息”權限ID值為“5”,它是隸屬于“文

    檔歸檔”權限之下的,那么它的隸屬ID字段的值就應該是“4”。OK,如果這一點能理解的話,那么我

    們的關系轉化工作也就算基本完成了。

      下面我們就開始設計這張關系型數據表(以Sql Server 7.0 為例):

    +-----------+-----------+-----------+-----------+----------+
      | 字段名 | 字段含義 | 字段類型 | 字段大小 | 字段屬性 |
    +-----------+-----------+-----------+-----------+----------+
    | SelfID | 權限ID | Int | 4 | PK |
    | PowerName | 權限名  | Varchar | 50 | Not Null |
    | PowerInfo | 權限信息 | Varchar | 500 | |
    | BelongID | 隸屬ID | Int | 4 | |
    +-----------+-----------+-----------+-----------+----------+

      好了,結構設計好你就可以輕松輸入你的測試數據了。

      然后,我們就針對如何在網頁中模仿層次結構顯示這功能的ASP程序,這也是最關鍵的一步了。

    程序清單:powerlist.asp

    <%
    '數據庫連接
    set conn=Server.CreateObject("ADODB.Connection")
    conn.open "driver={SQL Server};server=chaiwei;DATABASE=chaiwei;UID=sa;PWD="

    '打開所有父層數據
    set rs=Server.CreateObject("ADODB.Recordset")
    rs.Open "select * from powers where belongid is null order by powerid",conn,1,3

    '層次數表態變量賦初值
    format_i=1

    '列表主程序段
    do while not rs.eof

    '打印父層數據信息
    response.write "<a href='powerlist.asp?SelfID=" & rs("powerid") & "&BelongID=" & rs("belongid") & "'>" & rs("powername") & "</a>"
    response.write "<br>"

    '子程序調用,子層數據處理
    Call ListSubPower(rs("powerid"))

    rs.movenext

    loop

    '關閉父層數據集
    rs.close
    set rs=nothing


    '子層數據處理子程序
    Sub ListSubPower(id)

    '打開隸屬于上層 powerid 的所有子層數據信息
    set rs_sub=Server.CreateObject("ADODB.Recordset")
    rs_sub.Open "select * from powers where belongid=" & id & " order by powerid",conn,1,3

    '列子層數據
    do while not rs_sub.eof

    '層次數表態變量遞進累加
    format_i=format_i+1

    '循環縮進格式控制,因為頂層與二層不需要縮進,所以從第三層開始引用此程序段
    for i=format_i to 3 step -1
    response.write " |"
    response.write " "
    next

    '打印子層數據信息
    response.write " |----"
    response.write "<a href='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
    set rs_sub=nothing
    End Sub
    %>

      powerlist.asp程序中,我們先打開頂層數據,在循環中顯示出來;然后又設計一個子程序ListSubPower,通過遞歸算法在循環中調用,以此來打開子層數據信息,并且在子程序內部循環中又反復調用自己,以此來逐層展開深層數據。
      另外,在程序中還用了一個靜態變量format_i來控制縮進顯示格式。

      本文就樹型結構在數據設計、程序控制方面做簡單嘗試,目的在于拋磚引玉,希望讀者通過本文得到更多啟示。


    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>