很多系統都有類似於如下的表結構(table1):
id name parentid
001 電子類 0
002 金屬類 0
003 電容電子 001
004 電阻電子 001
005 有色金屬 002
而且大家都習慣於用樹(treeview)來顯示,這樣就可以很好的顯示整個表的分類情況。但如果資料量多時會造成樹的生成比較慢,特別是用遞迴來實現時要訪問資料庫的次數很多(根據層數),用在三層中效果更加顯。在此提供乙個好的方法來生成樹形結構。
這個演算法只訪問一次資料庫,具體的實現如下:
1、一次性從資料庫中取出所有的資料,並按照parentid欄位進行排序,這樣就保證每一條資料的父節點都在它的前面。
2、取出第一條資料畫到樹中,在新增到樹中時先找到這條資料的父節點,如果沒有 則將此記錄直接作為樹的第一級節點
3、如果還有資料,則取出來執行第2步,直到沒有資料為止。
程式實現:
本程式將用乙個stlid的tstringlist變數來存放對應樹中每乙個節點的id值,用findparent函式來父節點。
function findparent(id:string):ttreenode;
vari:integer;
begin
result:=nil;
for i:=treeview1.items.count-1 downto 0 do
if stlid.strings[i]=id then
begin
result:=treeview1.items[i];
break;
end;
end;
//生成樹
procedure createtree;
vartmpnode:ttreenode;
begin
query1.close;
query1.sql.text:='select * from table1 order by parentid';
query1.open;
query1.first;
while not query1.eof do
begin
tmpnode:=treeview1.items.addchild(findparent(query1.fieldbyname('parentid').asstring),query1.fieldbyname('name').asstring);
stlid.add(query1.fieldbyname('id').asstring);//記錄id
query1.next;
end;
end;
Delphi中根據分類資料生成樹形結構的方法
很多系統都有類似於如下的表結構 表名 placename 該方法在層數多資料量大時,效率將會比較低。二 用資料記錄集的方法定位記錄,再迴圈結果集生成樹,具體方法如下 該方法只訪問一次資料庫,但是需要迴圈往復多次操作結果集。1 一次性從資料庫中取出所有的資料,並按照pid欄位進行排序,這樣就保證每一條...
Delphi中根據分類資料生成樹形結構的最優方法
很多系統都有類似於如下的表結構 table1 id name parentid 001 電子類 0 002 金屬類 0 003 電容電子 001 004 電阻電子 001 005 有色金屬 002 而且大家都習慣於用樹 treeview 來顯示,這樣就可以很好的顯示整個表的分類情況。但如果資料量多時...
根據資料表中資料,生成Powerpoint幻燈片
曾經有乙個問題,一直困擾我很久。由於工作的需要,經常需要把access資料表的內容,製作成powerpoint幻燈片,常常在做大量的單調的重複的簡單勞動。作為乙個程式設計的愛好者,最不願意做的就是這種簡單機械的事情。那麼,如何根據資料表中資料,生成powerpoint幻燈片呢?我的具體要求是這樣的 ...