递归法创建部门树的问题(20分)

Y

yayiye

Unregistered / Unconfirmed
GUEST, unregistred user!
我想根据部门表生成部门树
部门表
deptid deptname parentid
1 部门1 0
2 部门2 1
3 部门3 1
OnFormCreate 中
var
begin
New(p);
p^:=0;
TreeNode:=tvDept.Items.AddChildObject(Nil,'根节点,p) ;
RefreshTreeViewDept(TreeNode); //递归生成部门职务树
end;
procedure RefreshTreeViewDept(TreeNode: TTreeNode);
var
p:^Integer;
ATreeNode:TTreeNode;
begin
p:=TreeNode.Data;
With Tempquery do
begin
Close;
Sql.Clear;
sql.Add('Select * from dept where parentid='+IntToStr(p^));
Open;
While not Eof do
begin
New(p);
p^:=FieldByName('deptid').AsInteger;
ATreeNode:=tvDept.Items.AddChildObject(TreeNode,FieldByName('deptname').AsString,p);
RefreshTreeViewDept(AtreeNode); //递归建树
Next;
end;
end;
end;
好像递归法有问题,建出的树不是正确的,请帮忙看看
 
Tempquery 如果你是放的控件,则递归时上次的查询将被关闭。
应该动态生成query
 
涉及到数据库的递归比较麻烦!

这段语句不行,会影响上一层:

Close;
Sql.Clear;
sql.Add('Select * from dept where parentid='+IntToStr(p^));
Open;

读到数组上处理吧!
 
要么修改一下
While not Eof do
begin
New(p);
p^:=FieldByName('deptid').AsInteger;
ATreeNode:=tvDept.Items.AddChildObject(TreeNode,FieldByName('deptname').AsString,p);
RefreshTreeViewDept(AtreeNode); //递归建树
Next;
end;
改成
While not Eof do
begin
New(p);
p^:=FieldByName('deptid').AsInteger;
ATreeNode:=tvDept.Items.AddChildObject(TreeNode,FieldByName('deptname').AsString,p);
// RefreshTreeViewDept(AtreeNode); //递归建树
Next;
end;
ATreeNode:=TreeNode.GetFirstChild;
while aTreeNode<>Nil do begin
RefreshTreeViewDept(AtreeNode);
ATreeNode:=ATreeNode.GetNextSibling
end;
 
帮你提一下
 
多人接受答案了。
 
顶部