根據資料庫結構生成TreeView

2021-06-25 17:59:54 字數 2340 閱讀 6541

現在大多數的方法是採用遞迴,但這種操作會頻繁的去select資料庫,降低了執行效率,稍微改動一些,效果會好不少,這裡介紹一種方法,即一次性select出所有資料,然後按照parentid排序,逐條新增到treeview,新增前,先遍歷treeview,查詢他的上一級節點,遍歷treeview可比select資料快啊,下面看**:

資料表結構,最頂級parentid值我用的是-1,大家也可以用其他值,但要保證最頂級parentid值最小,層次越深,parentid越大

[delphi]view plain

copy

procedure

tuioperate

.filltree(treeview: ttreeview);  

varfindq: tadoquery;  

node: ttreenode;  

//這個方法是根據記錄的id字段值,查詢treeview上的父節點

function

findparentnode(id:integer):ttreenode;  

vari:integer;  

begin

result := nil

;  for

i := 0to

treeview

.items

.count - 1do

begin

//比較node的data值和記錄的id值

ifinteger(treeview

.items[i].data) = id 

then

begin

result := treeview.

items[i];  

break;  

end;  

end;  

end;  

begin

findq := tadoquery.

create(

nil);  

findq.

connection := controler

.dataconnect

.connection; 

//這裡的connection指向你的資料連線

trytreeview.

items

.beginupdate;  

treeview.

items

.clear;  

//選出所有記錄,並按parentid排序,這樣可以保證先新增頂級節點,在下級記錄新增時,總能找到父節點

findq.

sql.

text := 

'select * from [catalog] order by parentid,id'

;  findq.

open;  

while

notfindq

.eof 

dobegin

//如果是最頂級,直接新增到treeview

iffindq

.fieldbyname(

'parentid'

).asinteger = -

1then

//將id值,儲存在node的data中,以便查詢用

treeview.

items

.addobject(

nil,findq

.fieldbyname(

'catalogname'

).asstring,pointer(findq

.fieldbyname(

'id'

).asinteger))  

else

begin

//查詢上級節點

node := findparentnode(findq.

fieldbyname(

'parentid'

).asinteger);  

ifnode <> 

nilthen

treeview.

items

.addchildobject(node,findq

.fieldbyname(

'catalogname'

).asstring,pointer(findq

.fieldbyname(

'id'

).asinteger));  

end;  

findq.

next;  

end;  

finally

findq.

free;  

treeview.

items

.endupdate;  

end;  

end;  

根據資料庫生成 sql insert 資料

create procedure dbo.uspoutputdata tablename sysname as declare column varchar 1000 declare columndata varchar 1000 declare sql varchar 4000 declare x...

根據資料庫模組生成sql,pojo等

1 連線資料庫取得表中欄位名和型別。參考 2 生成 pojo sql 的模組 pojo.vm 注意 attr.getcolumntype 中getcolumntype 是定義好的類中方法。public class classname implements serializable private a...

django根據資料庫生成模型類

databases options test python manage.py inspectdbpython manage.py inspectdb 表名 models.py模型名 可根據自己需求進行修改 讓django管理模型 將meta下的managed false刪掉,如果保留這個,那麼以後...