我的数据库内容为下
bmid bmmc fbmid
01 总部
0101 一部 01
0102 二部 01
0103 三部 01
010101 一部一室 0101
010102 一部二室 0102
010201 二部一室 0201
010202 二部二室 0202数据库字段说明
bmid:部门序号
bmmc:部门名称
fbmid:上级部门序号上面的数据库我要显示在树形控件中,式样如下:
总部
|--一部
|——一部一室
|——一部二室
|--二部
|——二部一室
|——二部二室
|--三部请问这样的代码怎么写
bmid bmmc fbmid
01 总部
0101 一部 01
0102 二部 01
0103 三部 01
010101 一部一室 0101
010102 一部二室 0102
010201 二部一室 0201
010202 二部二室 0202数据库字段说明
bmid:部门序号
bmmc:部门名称
fbmid:上级部门序号上面的数据库我要显示在树形控件中,式样如下:
总部
|--一部
|——一部一室
|——一部二室
|--二部
|——二部一室
|——二部二室
|--三部请问这样的代码怎么写
delphi6+oracle9i --不使用遞歸:
//Add all NOdes ONce,and the pre_no of the root node must be '0'
procedure P_AddAllNode(TableName,KeyField,ParentField,DisplayField,PrarentFilter,RootName : string;TV : TTreeView);
var
Node,Node_tmp:TTreeNode;
NodeText,NodeText_tmp:string;
TV_tmp : TTreeView;
Query : TADOQuery;
begin
Query:=TADOQuery.Create(nil);
TV_tmp := TTreeView.Create(nil);
TV_tmp.Parent := TV.Parent;
TV_tmp.Visible := false;
with Query do
begin
Connection := Pubconn;
Close;
SQL.Clear;
SQL.Add('SELECT '+KeyField+','+ParentField+','+DisplayField+' from '+
TableName+' START WITH '+PrarentFilter+' CONNECT BY '+
ParentField+'=PRIOR '+KeyField);
Open;
TV.Items.Clear;
TV_tmp.Items.Clear;
Node:=TV.Items.Add(nil,'[0]'+RootName);//Add Root Node
Node_tmp:=TV_tmp.Items.Add(nil,'');
while not eof do
begin
NodeText:='['+FieldByName(KeyField).AsString+']'+FieldByName(DisplayField).AsString;
NodeText_tmp:=FieldByName(ParentField).AsString;
if (FieldByName(ParentField).AsString=GetNodeKey(Node)) then//Filiation
begin
Node:=TV.Items.AddChild(Node,NodeText);
Node_tmp:=TV_tmp.Items.AddChild(Node_tmp,NodeText_tmp);
end
else
if (FieldByName(ParentField).AsString=Node_tmp.Text) then//Brother
begin
Node:=TV.Items.Add(Node,NodeText);
Node_tmp:=TV_tmp.Items.Add(Node_tmp,NodeText_tmp);
end
else begin //Not Direct Relation
while Node.Parent<>nil do
begin
Node:=Node.Parent;
Node_tmp:=Node_tmp.Parent;
if (FieldByName(ParentField).AsString=Node_tmp.Text) then
begin
Node:=TV.Items.Add(Node,NodeText);
Node_tmp:=TV_tmp.Items.Add(Node_tmp,NodeText_tmp);
Break;
end;
end;
end;
Next;
end;
TV.Selected.Index
end;
Query.Close;
Query.Free;
TV_tmp.Free;
end;
begin
Result:=copy(WideString(vNode.Text),2,pos(WideString(']'),WideString(vNode.Text))-2);
end;節點的text形如:[節點id]節點名稱