資料庫表TUniTreeView樹的快速生成

2021-10-17 18:53:08 字數 1349 閱讀 2410

根據資料表的內容生成tunitreeview樹狀結構,通常的做法就是從頂級開始,然後逐項遞迴查詢遍歷生成。這種方法在實現上容易做到,也很容易想到,但是效率比較低,因為資料庫的檢索(sql語句需要解釋執行,而且是對資料庫檔案進行操作)還是比較耗時的,尤其是樹的層次較多,節點較多的情況。這裡介紹的方法是以空間換取時間,只進行一次資料庫檢索,提取出全部資料,然後一次生成tunitreeview樹狀結構。通過sql語句,讓返回的記錄按照父節點id、節點id進行排序,這樣保證每次當前要新增的節點記錄的父節點都已經新增到了tunitreeview樹中,剩下的工作就是如何在treeview樹中找到父節點。採用了乙個排序的tstringlist列表,通過排序列表採用二分查詢的快速效能,就能夠很快地查詢到當前要新增節點的父節點,從而插入到tunitreeview樹的正確位置。 

源**如下(假定資料表名稱為ftree,欄位有id, parentid, name):

procedure maketree(query: tuniquery; treeview: tunitreeview);

varlist: tstringlist;

node: tunitreenode;

index: integer;

begin

treeview.items.beginupdate;

trytreeview.items.clear;

list := tstringlist.create;

trylist.sorted := true;

while not query.eof do

begin

if query.fieldbyname('parentid').asinteger = 0 then

node := treeview.items.addchild(nil, query.fieldbyname('name').asstring)

else

begin

index := list.indexof(query.fieldbyname('parentid').asstring);

node := treeview.items.addchild(tunitreenode(list.objects[index]), query.fieldbyname('name').asstring);

end;

list.addobject(query.fieldbyname('id').asstring, node);

query.next;

end;

finally

list.free;

end;

finally

treeview.items.endupdate;

end;

end;

SQL查詢資料庫資訊, 資料庫表名, 資料庫表資訊

sql查詢資料庫資訊,資料庫表名,資料庫表資訊 以下例子,在sql server 中可以直接執行,預設資料庫為master 獲取資料庫的所有使用者名稱 select from sysusers where islogin 1 1.獲取所有的資料庫名 select name from master.s...

資料庫表 行 資料庫鎖定

1如何鎖乙個表的某一行 settransaction isolation level read uncommitted select from table rowlock where id 1 2鎖定資料庫的乙個表 select from table with holdlock 加鎖語句 sybas...

資料庫 資料庫表連線Join

一條sql join語句對應著關係代數裡的乙個join操作,它對關聯式資料庫裡乙個或多個表的列進行合併。ansi標準的sql規定了5種型別的join inner,left outer,right outer,full outer和cross。除此之外乙個表能夠對自身進行連線,即self join。以...