1.首先看一下我的資料庫結構:
id : int
group_name : int
parent_id : int
不用解釋,相信大家一看就明白。
2.delphi中新建乙個datemodel,命名為dm,和乙個窗體frmmain
在dm中放入tadoconnection,和乙個tadodataset,並連線上資料庫。
在frmmain上放入乙個ttreeview.
3.我的建立樹結構的單元檔案**:
unit buildtreeunit;
inte***ce
uses
db, adodb, comctrls,dialogs;
// 定義樹結點對資料庫表記錄對應的結構體
type
pnode = ^tnode;
tnode = record
fid:integer; // 記錄的id號
fbm:tbookmark; // 定位記錄的指標(書籤)
end;
function buildtree(dataset: tadodataset; tv: ttreeview; selffield,selfname,parentfield:string):boolean;
implementation
function buildtree(dataset: tadodataset; tv: ttreeview; selffield,selfname,parentfield:string):boolean;
function findkey(aindex: integer; ffirst:boolean): boolean;
begin
result:=dataset.locate(parentfield,aindex,[locaseinsensitive]);
end;
function findnext(aindex: integer): boolean;
begin
dataset.next;
if dataset.eof then
result:=false
else
result:=dataset.fieldvalues[parentfield]=aindex;
if not result then dataset.prior;
end;
function getchildnode(index: integer; anode: ttreenode):integer;
varmynode:pnode;
node:ttreenode;
begin
if findkey(index,true) then
begin
new(mynode);
with dataset do
begin
mynode^.fid :=fieldvalues[selffield];
mynode^.fbm :=getbookmark;
end;
node:=tv.items.addchild(anode,dataset.fieldvalues[selfname]);
node.data:=mynode;
result:=1;
while findnext(index) do
begin
new(mynode);
with dataset do
begin
mynode^.fid :=fieldvalues[selffield];
mynode^.fbm :=getbookmark;
end;
node:=tv.items.addchild(anode,dataset.fieldvalues[selfname]);
node.data:=mynode;
result:=result+1;
end;
endelse
result:=0;
end;
procedure buildme(aindex: integer; anode: ttreenode);
varnodenum:integer;
node:ttreenode;
i:integer;
begin
nodenum:=getchildnode(aindex,anode);
if nodenum>0 then
begin
if anode=nil then node:=tv.items.getfirstnode
else
node:=anode.getfirstchild;
for i:=1 to nodenum do
begin
buildme(pnode(node.data)^.fid,node);
node:=anode.getnextchild(node);
end;
end;
end;
// 組合部份
begin
showmessage('here');
if (dataset=nil) or (dataset.active =false) then
result:=false
else if (tv=nil) then
result:=false
else begin
tv.items.clear;
buildme(0,nil);
result:=true;
end;
end;
end.
4.呼叫:
buildtree(dm.dsgroup_,tv,'id','group_name','parent_id');
用資料庫實現樹型結構
做 的時候有時需要實現乙個樹形列表,類似目錄那樣的。最好的建立方法就是採用指向父節點的指標的結構建立表。表的結構如下 表名為xx 字段 型別 null 預設 注釋 cidint 11 否 主鍵 pid int 11 否 0 父類別的cid,0表示該項為頂層類別。name varchar 64 否 類...
組織機構樹型資料庫結構
之前做的乙個系統,裡面涉及乙個組織機構,之前也做過,之前做得非常簡單普遍 資料庫表結構主要是乙個主鍵id,名稱name,乙個父級外來鍵parent id 比如id name parent id 1 汕頭公司 null 2 計算機中心 1 3 人事部 1 類似這樣,相信大家都能想到,新增,修改都很方便...
關係型資料庫 非關係型資料庫
關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...