- 在线时间
- 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中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~, j* ]/ ?, a$ p1 r4 W2 q8 t2 T
procedure Trs.TreeView1Click(Sender: TObject);3 K6 D: d% @; O" F3 v; p+ R
var node: TTreeNode;* t! w% {7 Z( w0 S# g" M u, o; C
strnode:string;9 B! H' u1 d4 V. Y
label ok;0 k6 M) R. L; ?+ I+ ]$ v; C' n9 }
label haschild;
; o4 o' A" F! F$ E0 J3 T label nextnode;
4 D. T, y4 U6 S3 y6 _. N% Ubegin
/ p7 p/ y+ P* P2 E3 h node:=treeview1.TopItem;
1 t% d; q! }4 r1 X$ P/ d. C9 b3 ^haschild: node:=getfirstchild(node);( |- C% h" k% w, ?. E
strnode:=node.Text;
2 Y+ _; E! F# J" P( H; { dm.qtree.Close;
& r- }# W$ X" c4 \* R2 P dm.qtree.SQL.Clear;
0 T2 }" ^# ^0 o H' \3 L* _3 T dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';
' J1 F, P) L$ |1 _( `, B dm.qtree.Open; //取得该部门下所有员工姓名2 J% k# W1 u4 |& N; q$ z; w
if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)
% H- B7 M/ H9 {9 G: @ begin //将所有员工姓名都作为子节点添加+ ]3 A( _2 L( W, Q
repeat! p: ]; X4 S! |( K3 R9 N; Y
strnode:=dm.qtree.fieldbyname('empname').AsString;' c# p2 r& i }9 y
treeview1.Items.AddChild(node,strnode);9 P9 A" [. u2 e1 b9 n
dm.qtree.Next;
: b, o) G+ O ]/ g8 Z! I until dm.qtree.Eof;
h, N& [/ S/ h: i* E end;) A& `- `2 i8 H' K" b6 p
if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个8 a" ]9 g; E+ U3 [# n
begin3 Z" N' ^* J0 q7 ]
nextnode: node:=node.getNextSibling; //取得下一个同级节点
" d' K9 b" V/ W1 L% Z- h! D- D6 ? goto haschild;0 u' j4 X2 X2 F8 A* M
end' s) o: c0 q$ c' w' t4 C
else
- G9 U' u1 u7 r2 u begin3 V9 V$ L4 e. p+ I8 \/ j
if node.Index =treeview1.Items.Count then goto ok, D0 g% N9 P) ^) g" N
else goto nextnode;4 T- ~: } ^1 t2 F' B* }
end;1 {" Y6 F3 D! |+ _ @1 g5 T& {
ok:null;
6 G# w0 A) s: d7 c. Send; |
zan
|