一共建一四个表
表一Punit: Pid Pname
表二UUnit: Uid Pid Uname
表三Iunit: Iid Uid Iname
表四Lunit: Id Iid text
XXXX系统
|
Pname
Pname
Pname
|--Uname
|--Uname
|--Iname
|--text他们的关系是这样的大家谁能帮帮我。
表一Punit: Pid Pname
表二UUnit: Uid Pid Uname
表三Iunit: Iid Uid Iname
表四Lunit: Id Iid text
XXXX系统
|
Pname
Pname
Pname
|--Uname
|--Uname
|--Iname
|--text他们的关系是这样的大家谁能帮帮我。
select Pname, Uname, Iname, text from 表一,表二, 表三, 表四
where (表一.Pid = 表二.Pid) and (表二.Uid = 表三.Uid) and (表三.Iid = 表四.Iid)
Group by Pname然后
Query1.First;
while not Query1.Eof do
begin
//再这里把给Treeview1加一个Pname结点
//在加一个Uname子结点
//.....................
end;
procedure P_AddNodes(vSql:string);
var
Node,Node_tmp:TTreeNode;
NodeText,NodeText_tmp:string;
begin
Query:=TADOQuery.Create(nil);
with Query do
begin
Connection:=APP.ADOQuery.Connection;
Close;
SQL.Clear;
SQL.Add(vSql);
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;
end;
Query.Free;
TV_tmp.Items.Clear;
end;function GetNodeKey(vNode: TTreeNode): string;
begin
Result:=copy(WideString(vNode.Text),2,pos(WideString(']'),WideString(vNode.Text))-2);
end;