- 在线时间
- 0 小时
- 最后登录
- 2005-2-2
- 注册时间
- 2004-5-13
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 64 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 20
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   15.79% 该用户从未签到
 |
我想实现这样的功能,遍历tree中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~
# g" ], w' z' c4 Z/ e4 E$ i) a" Lprocedure Trs.TreeView1Click(Sender: TObject);
* b: ^9 c9 K: R& X& Z& ?1 Ivar node: TTreeNode;
+ L1 R% p1 E6 t" \7 P% P* z strnode:string;7 c: ]0 C: d5 H" g) }
label ok;. d4 A" V$ m: W9 d, S, D
label haschild;7 n: q' I5 ]+ A: ^
label nextnode; a5 ~( M' R. z2 c3 Y# `
begin6 o v$ I i8 L0 l* n1 t
node:=treeview1.TopItem;
9 Z5 d o, k i5 u' b+ ?) Uhaschild: node:=getfirstchild(node);
3 i6 n: ]( ?% U' X# |6 _' t2 V# | strnode:=node.Text;
8 Q, e n! h% E) U& ^ dm.qtree.Close;
0 L c% X% V; v- o+ b dm.qtree.SQL.Clear;
# H: A) X% ~9 }+ v" v dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';- q7 i4 j- l3 i( k7 i
dm.qtree.Open; //取得该部门下所有员工姓名
8 d; l' B$ H z if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)& p; Y' J _; D. O! v# N
begin //将所有员工姓名都作为子节点添加 G+ S& e" _% W- N1 D/ z, }
repeat
! s% A3 Z" U. C* R strnode:=dm.qtree.fieldbyname('empname').AsString;7 R4 n; b/ [$ h' X5 [$ a4 W
treeview1.Items.AddChild(node,strnode);. r) E7 k- Z9 s& b* h) Y7 F/ P
dm.qtree.Next;7 T+ I1 ~9 d0 r( B
until dm.qtree.Eof;2 ^7 e9 {* _* p$ Q; |
end;8 e# A R. B* o2 ~% ], x2 C
if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个) D3 m2 [9 `" H- K" N! I* h
begin; T2 v0 y! i* `; p8 C, q+ P
nextnode: node:=node.getNextSibling; //取得下一个同级节点6 n$ m% E: @0 O4 @5 X
goto haschild;- J: v" a1 i: V6 Y' Z) V0 s
end9 i. T0 L6 W/ c& N# D! E; ^! y
else
# ^7 u( J, j! I2 m begin# f p4 n1 ~" \: C9 N) Q* ]
if node.Index =treeview1.Items.Count then goto ok
( Z; G3 k; K7 d8 l$ B else goto nextnode;
9 D: ^% v& N' _ Z5 Z, O! J end;
. J# o( Z t; h7 [9 A1 T7 Bok:null;( J- a2 b4 O: F2 L* Q, L% ?7 X( m
end; |
zan
|