- 在线时间
- 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中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~" l! N9 x) H: B+ R: f, ?7 \
procedure Trs.TreeView1Click(Sender: TObject);
1 y* H$ R- f% }$ V! I- k% L0 j; U* jvar node: TTreeNode;
; D m8 w. h8 [& A: M/ s# o* M strnode:string;
. i, Q3 y+ x+ L label ok;0 C( a) S1 P6 R9 i) L/ h
label haschild;, ]6 j" O( c$ C5 U9 @
label nextnode;
' o3 `% x& M9 }1 Hbegin" O% V, z! \# O B% X. W" X
node:=treeview1.TopItem;- ~6 z# C8 g# f
haschild: node:=getfirstchild(node);
! O( r8 y' k7 T! W/ F! G strnode:=node.Text;: x- x+ x2 h+ F" Y% W9 o q
dm.qtree.Close;
/ B3 w6 u) }0 E dm.qtree.SQL.Clear;5 V% A: }" L! J1 h m
dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';. c# d5 O2 a3 Z/ J' Q5 B% ^
dm.qtree.Open; //取得该部门下所有员工姓名
' h% E% {4 h" P7 j# e) S if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)! g+ r$ X' M5 A
begin //将所有员工姓名都作为子节点添加 q8 b# k9 z9 x- j% {. P2 n
repeat$ W5 c1 @1 Y& O
strnode:=dm.qtree.fieldbyname('empname').AsString;3 \( n- y( u+ y" t- r7 f2 P0 i/ c
treeview1.Items.AddChild(node,strnode);/ [5 h0 n) m5 G1 t
dm.qtree.Next;% I0 { {$ o* K1 C
until dm.qtree.Eof;, @/ ]8 x, M8 M7 U" d
end;: K4 M* c/ O' D) ~ R/ ~0 N$ b# M
if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个. v/ B8 F3 t" k) e
begin6 W* Z2 ^" ?6 p! ]7 A! F
nextnode: node:=node.getNextSibling; //取得下一个同级节点4 q! G* A# p3 Z p
goto haschild;+ X+ l3 O9 o0 G
end
d) i% [# p' Q" Z. n. M else
. S j- ^; O1 X/ z5 ?$ } begin
5 `: ^8 N8 i* s if node.Index =treeview1.Items.Count then goto ok
, t6 I$ Y4 ?- ^ else goto nextnode;2 t, `3 z1 R2 j1 C
end;
6 e* j# l; D5 k5 }ok:null;
. Z5 U2 [5 _( q$ l. @0 h0 fend; |
zan
|