現在大多數的方法是採用遞迴,但這種操作會頻繁的去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刪掉,如果保留這個,那麼以後...