程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> 關於ASP編程 >> DBTree 1.3.2

DBTree 1.3.2

編輯:關於ASP編程

1.3.2的修改

  1. 對 InsertNode進行了修改,不會再發生傳送的節點id有錯誤而默認插入到根下的行為。 (出於安全考慮而去掉)
  2. 完善了SubTree函數
  3. 添加了path函數可以得到路徑
  4. 添加了alterNode可以修改節點名稱以及在兄弟節點中的位置。

許可:GUN LGPL


測試地址:http://lxbzj.com/product/dbtree/index.asp

DBTreeDBTree使用說明

目錄

  1. 簡介
  2. 特點
  3. 如何使用

 

簡介

DBTree是database tree的縮寫。意思是數據庫中的樹形結構。

DBTree是一個勇於數據庫服務器環境中的,在數據庫中記錄樹形數據結構的快速解決方案,即人們通常說的無限級目錄問題,本文檔統稱為樹,而且是樹結構在數據庫中的實現。

DBTree包含了各種不同的版本:asp+access、等等。

特點

通常情況下,樹在數據庫中實現的時候采用的是樹的雙親表示法,設一個編號字段id,和一個父親編號字段parent_id,來實現樹形結構。這種數據結構的特點是:操作簡單,幾乎不用維護,然而優點帶來的問題是對樹進行遍歷的時候系統開銷極大,需要進行遞歸操作,因此不能夠無限制的增加樹的深度。普遍采用了異步讀取的方式來減少系統開銷。一些改進的方法也避免不了這一問題。

在絕大多數情況下,服務器上要求對樹的遍歷任務占據了對樹的操作的任務的大部分,可見如果針對數遍歷來做優化能極大地提高效率減輕服務器負擔。

或者還是采用雙親表示法,采用異步讀取才減輕系統開銷,但是這樣依然不能解決例如樹的深度、路徑、刪除等的問題

在本程序中采用了更適應遍歷的數的表示結構。能極大地降低系統開銷,也能很優秀的解決一些樹的高級操作,更適應於數據庫。

如何使用

使用本程序,需要預先准備一個數據庫,且設置好數據庫聯接。

1.數據庫的定義:

數據庫中表(Tree)的定義(access) 字段名 字段類型 必填 默認值 其他 索引 說明 id 數字     自動編號 有(無重復) 節點的唯一編號 p_id 長整型 是 0     節點父親編號值 name 文本 新建文件夾 不允許為空字符串   節點名稱 porder 長整型     有(有重復) 節點的先序排序號 dep 長整型 1     節點深度值 del 布爾 Flase     是否刪除 附注:字段名僅僅為默認的字段名,如果您不指定其他的字段名的話,程序就假定您的字段和表名名為默認的。

2.在需要使用的頁面使用服務器包含命令:<!--#include file="dbtree.asp" -->

3.初始化一個對象實例,然後初始化數據庫聯接字符串和其他變量

<%@ LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<% option explicit 'TRANSACTION = Required%>
<!--#include file="dbtree.asp" -->
<%
Dim MM_btree_STRING '數據庫聯接字符串
MM_btree_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "&server.mappath("tree.mdb")
%>
<%
dim tree
set tree=new DBtree
tree.conn=MM_btree_STRING '指定聯接字符串
tree.table="tree"'制定表名
tree.id="id"'制定列名
tree.p_id="p_id"
tree.porder="porder"
%>

4接下來就可以對樹進行各種操作了:

實例:

1.將樹顯示為列表:

<%
Dim arr1(1,0),arr2(1,0),cache
arr1(0,0) = "<ul>"
arr1(1,0) = "</ul>"
arr2(0,0) = "<li>{name}"
arr2(1,0) = "</li>"
cache = tree.display(0,-1,arr1,arr2,"relative")
response.write(cache)
%>

2.插入,刪除等

select case request.Form("submit")
case "移動"
msg =tree.moveNode(request.Form.Item("src"),request.Form.Item("des"))
case "刪除"
msg =tree.delNode(request.Form("node"),false)
case "永久刪除"
msg =tree.delNode(request.Form("node"),true)
case "恢復"
msg =tree.undel(request.Form("undel"))
end select

3.其他的操作請參見實例

4.API

整個程序是一個類,提供插入、移動、刪除、顯示、輸出為列表控件等接口,以後功能還會不斷完善。


API 函數名  功能 insertNode(int node_pid, str node_name)
插入一個節點作為給出節點的孩子節點。

參數:

  • node_pid 樹中節點的id,0表示插入到根下
  • str節點的名稱默認為新建文件夾;
MoveNode(src_id,des_id) 移動節點和他的子樹,參數:src_id源節點id;des_id:目標節點id(注意暫時不能將一個節點移動到根下(0))  DelNode(id,confirm)  刪除節點和子樹,參數:id節點id;confirm:是否直接刪除true/false。 undel(id)  恢復沒有直接刪除的節點 string OutPutOption(root_id,selected_id,show_root,rel_deep)  

將樹輸出為類表控件的選項,即<option>標簽

參數:

  • root_id 樹根(Root)編號,默認值為0
  • selected_id 列表選項的默認中選項
  • show_root 是否允許顯示根(Root)這一行記錄
  • rel_deep 顯示的相對深度 -1 顯示所有 0 :只顯示根 1 顯示1層
Display(root_id,rel_deep,menu_tag,item_tag,options)   功能:讀出並且按模板標簽生成顯示內容,替換標簽有:{id},{name},{porder},{auto},{pid}
  • 參數:root_id 根的id ,0表示全部顯示
  • rel_deep 要顯示的相對深度。1層2層等等
  • menu_tag 菜單標簽 數組
  • item_tag 項目標簽 數組
  • menu_tag 與item_tag 必須為形如arr(1,n)的數組,即必須都是二維數組、第一維必須是1第二維存儲各級標簽
  • arr(0,n)存儲開始標簽,arr(1,n)存儲結束標簽,結束標簽不能含有需要替換的內容
  • menu_tag(x,0),item_tag(x,0)用來存儲默認的模板標簽參見使用實例
  • option:參數 ,可用值:relative
SubTree(node_id,order,rel_deep,with_root,with_del)   取得子目錄記錄集
  • node_id 節點id
  • 排序: "asc" "desc"
  • rel_deep 相對要顯示的深度 1僅顯示1層 -1顯示所有深度 0 僅顯示根 如此類推
  • with_root(true/false) 記錄集是否包含根
  • with_del(true/false) 記錄集是否包含標記為刪除的記錄
AlterNode(node_id,new_name,step)

修改節點信息

  • node_id節點id
  • new_name新的名稱
  • step 要移動的位置
程序還在改進中,有些接口還待調整

 

©linzsoft.com2006-05-26

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved