根據資料表的內容生成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。以...