DBTree 1.3.2
1.3.2的修改
- 對(duì) InsertNode進(jìn)行了修改,不會(huì)再發(fā)生傳送的節(jié)點(diǎn)id有錯(cuò)誤而默認(rèn)插入到根下的行為。 (出于安全考慮而去掉)
- 完善了SubTree函數(shù)
- 添加了path函數(shù)可以得到路徑
- 添加了alterNode可以修改節(jié)點(diǎn)名稱(chēng)以及在兄弟節(jié)點(diǎn)中的位置。
許可:GUN LGPL
測(cè)試地址:http://lxbzj.com/product/dbtree/index.asp
DBTree使用說(shuō)明
目錄
簡(jiǎn)介
DBTree是database tree的縮寫(xiě)。意思是數(shù)據(jù)庫(kù)中的樹(shù)形結(jié)構(gòu)。
DBTree是一個(gè)勇于數(shù)據(jù)庫(kù)服務(wù)器環(huán)境中的,在數(shù)據(jù)庫(kù)中記錄樹(shù)形數(shù)據(jù)結(jié)構(gòu)的快速解決方案,即人們通常說(shuō)的無(wú)限級(jí)目錄問(wèn)題,本文檔統(tǒng)稱(chēng)為樹(shù),而且是樹(shù)結(jié)構(gòu)在數(shù)據(jù)庫(kù)中的實(shí)現(xiàn)。
DBTree包含了各種不同的版本:asp+access、等等。
特點(diǎn)
通常情況下,樹(shù)在數(shù)據(jù)庫(kù)中實(shí)現(xiàn)的時(shí)候采用的是樹(shù)的雙親表示法,設(shè)一個(gè)編號(hào)字段id,和一個(gè)父親編號(hào)字段parent_id,來(lái)實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)。這種數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)是:操作簡(jiǎn)單,幾乎不用維護(hù),然而優(yōu)點(diǎn)帶來(lái)的問(wèn)題是對(duì)樹(shù)進(jìn)行遍歷的時(shí)候系統(tǒng)開(kāi)銷(xiāo)極大,需要進(jìn)行遞歸操作,因此不能夠無(wú)限制的增加樹(shù)的深度。普遍采用了異步讀取的方式來(lái)減少系統(tǒng)開(kāi)銷(xiāo)。一些改進(jìn)的方法也避免不了這一問(wèn)題。
在絕大多數(shù)情況下,服務(wù)器上要求對(duì)樹(shù)的遍歷任務(wù)占據(jù)了對(duì)樹(shù)的操作的任務(wù)的大部分,可見(jiàn)如果針對(duì)數(shù)遍歷來(lái)做優(yōu)化能極大地提高效率減輕服務(wù)器負(fù)擔(dān)。
或者還是采用雙親表示法,采用異步讀取才減輕系統(tǒng)開(kāi)銷(xiāo),但是這樣依然不能解決例如樹(shù)的深度、路徑、刪除等的問(wèn)題
在本程序中采用了更適應(yīng)遍歷的數(shù)的表示結(jié)構(gòu)。能極大地降低系統(tǒng)開(kāi)銷(xiāo),也能很優(yōu)秀的解決一些樹(shù)的高級(jí)操作,更適應(yīng)于數(shù)據(jù)庫(kù)。
如何使用
使用本程序,需要預(yù)先準(zhǔn)備一個(gè)數(shù)據(jù)庫(kù),且設(shè)置好數(shù)據(jù)庫(kù)聯(lián)接。
1.數(shù)據(jù)庫(kù)的定義:
| 字段名 | 字段類(lèi)型 | 必填 | 默認(rèn)值 | 其他 | 索引 | 說(shuō)明 |
|---|---|---|---|---|---|---|
| id | 數(shù)字 | 自動(dòng)編號(hào) | 有(無(wú)重復(fù)) | 節(jié)點(diǎn)的唯一編號(hào) | ||
| p_id | 長(zhǎng)整型 | 是 | 0 | 節(jié)點(diǎn)父親編號(hào)值 | ||
| name | 文本 | 新建文件夾 | 不允許為空字符串 | 節(jié)點(diǎn)名稱(chēng) | ||
| porder | 長(zhǎng)整型 | 有(有重復(fù)) | 節(jié)點(diǎn)的先序排序號(hào) | |||
| dep | 長(zhǎng)整型 | 1 | 節(jié)點(diǎn)深度值 | |||
| del | 布爾 | Flase | 是否刪除 | |||
| 附注:字段名僅僅為默認(rèn)的字段名,如果您不指定其他的字段名的話(huà),程序就假定您的字段和表名名為默認(rèn)的。 | ||||||
2.在需要使用的頁(yè)面使用服務(wù)器包含命令:<!--#include file="dbtree.asp" -->
3.初始化一個(gè)對(duì)象實(shí)例,然后初始化數(shù)據(jù)庫(kù)聯(lián)接字符串和其他變量
<%@ LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<% option explicit 'TRANSACTION = Required%>
<!--#include file="dbtree.asp" -->
<%
Dim MM_btree_STRING '數(shù)據(jù)庫(kù)聯(lián)接字符串
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 '指定聯(lián)接字符串
tree.table="tree"'制定表名
tree.id="id"'制定列名
tree.p_id="p_id"
tree.porder="porder"
%>
4接下來(lái)就可以對(duì)樹(shù)進(jìn)行各種操作了:
實(shí)例:
1.將樹(shù)顯示為列表:
<%
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 "移動(dòng)"
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 "恢復(fù)"
msg =tree.undel(request.Form("undel"))
end select
4.API
整個(gè)程序是一個(gè)類(lèi),提供插入、移動(dòng)、刪除、顯示、輸出為列表控件等接口,以后功能還會(huì)不斷完善。
| 函數(shù)名 | 功能 |
| insertNode(int node_pid, str node_name) |
插入一個(gè)節(jié)點(diǎn)作為給出節(jié)點(diǎn)的孩子節(jié)點(diǎn)。
參數(shù):
|
| MoveNode(src_id,des_id) | 移動(dòng)節(jié)點(diǎn)和他的子樹(shù),參數(shù):src_id源節(jié)點(diǎn)id;des_id:目標(biāo)節(jié)點(diǎn)id(注意暫時(shí)不能將一個(gè)節(jié)點(diǎn)移動(dòng)到根下(0)) |
| DelNode(id,confirm) | 刪除節(jié)點(diǎn)和子樹(shù),參數(shù):id節(jié)點(diǎn)id;confirm:是否直接刪除true/false。 |
| undel(id) | 恢復(fù)沒(méi)有直接刪除的節(jié)點(diǎn) |
| string OutPutOption(root_id,selected_id,show_root,rel_deep) |
將樹(shù)輸出為類(lèi)表控件的選項(xiàng),即<option>標(biāo)簽 參數(shù):
|
| Display(root_id,rel_deep,menu_tag,item_tag,options) | 功能:讀出并且按模板標(biāo)簽生成顯示內(nèi)容,替換標(biāo)簽有:{id},{name},{porder},{auto},{pid}
|
| SubTree(node_id,order,rel_deep,with_root,with_del) | 取得子目錄記錄集
|
| AlterNode(node_id,new_name,step) |
修改節(jié)點(diǎn)信息
|
| 程序還在改進(jìn)中,有些接口還待調(diào)整 | |
©linzsoft.com2006-05-26
相關(guān)文章
asp 下產(chǎn)生任意位數(shù)隨機(jī)密碼的代碼
asp 下產(chǎn)生任意位數(shù)隨機(jī)密碼的代碼...2007-08-08
asp二維數(shù)組實(shí)例中的使用方法總結(jié)
筆者對(duì)asp編程不是很熟悉,而且好長(zhǎng)不用記不清了。這一次,需要保存asp的二維數(shù)組為asp文件,使用include 指令文件引用后,直接調(diào)用。使用過(guò)程中發(fā)現(xiàn)asp的二維數(shù)組相關(guān)資料很少,而且介紹簡(jiǎn)單模糊,現(xiàn)結(jié)合使用實(shí)例做個(gè)簡(jiǎn)單筆記。2023-06-06
Microsoft VBScript 運(yùn)行時(shí)錯(cuò)誤 錯(cuò)誤 ''800a0005'' 無(wú)效的過(guò)程調(diào)用或參數(shù): ''chr''
Asp附件無(wú)法上傳或報(bào)"Microsoft VBScript 運(yùn)行時(shí)錯(cuò)誤 錯(cuò)誤 '800a0005' 無(wú)效的過(guò)程調(diào)用或參數(shù): 'chr' "的處理辦法2010-03-03
對(duì)于ASP編碼問(wèn)題的深入研究與最終解決方案
對(duì)于ASP編碼問(wèn)題的深入研究與最終解決方案...2007-05-05
ASP轉(zhuǎn)換格林威治時(shí)間函數(shù)DateDiff()應(yīng)用
ASP提供了一個(gè)叫 DateDiff() 的函數(shù),這個(gè)函數(shù)可以返回一個(gè)時(shí)間差的秒,那就是說(shuō)我們放進(jìn)去一個(gè)格林威治標(biāo)準(zhǔn)時(shí)間與現(xiàn)在的時(shí)間對(duì)比一下返回秒就OK2014-06-06

