- 在线时间
- 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中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~
7 m# w* D! j! vprocedure Trs.TreeView1Click(Sender: TObject);; X; a% e l$ |
var node: TTreeNode;
) E- O7 j# _4 x strnode:string;+ |* n1 J3 f9 G& y# G L( m- Q
label ok;
! |# T0 }/ r* t+ p7 Q% E label haschild;/ i: P! J6 q. _* U1 b, V
label nextnode;* P. V# k4 J: ~+ L0 q# _& B
begin$ ]) t- a b' F4 o1 p2 U% X
node:=treeview1.TopItem;
; c+ _1 X1 S' D$ U" v5 rhaschild: node:=getfirstchild(node);
' Z4 M2 C) w" O1 Q+ s: Y6 E strnode:=node.Text;
: }) J) h- N9 L8 `7 ?" ]6 Q dm.qtree.Close;, h: }( Y; Z& N7 j |. u
dm.qtree.SQL.Clear;
6 u4 I$ j& h, f0 | H" v: E& U. U+ `& F dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';+ Q/ d, ]) m/ z' b
dm.qtree.Open; //取得该部门下所有员工姓名) \7 `" O7 e$ s& H7 w8 l) H/ V% {! ^
if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)
5 d' {5 q& C. R# v. o" \ begin //将所有员工姓名都作为子节点添加- w8 t7 Z' c( A/ ~. g2 ]
repeat
3 U) {: R% P6 O( Q9 a strnode:=dm.qtree.fieldbyname('empname').AsString;
* F9 ?5 n" W. L; T/ [ treeview1.Items.AddChild(node,strnode);
1 p' J* i u% ^& ^! K dm.qtree.Next;
2 D1 q& f9 Y- B' j; B( z until dm.qtree.Eof;
/ M# L" i" Y, q1 Z n2 j! h; J& }4 K end;8 j! i' E9 B" ?: H+ @6 b
if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个' j2 f) O" ?$ {- P- D9 } e- r
begin! ]) V1 K+ V |8 I9 R; x; T
nextnode: node:=node.getNextSibling; //取得下一个同级节点 ?' ^: _8 `* T
goto haschild;$ Q9 I9 i5 d& h& r" o0 G. l2 ~
end
6 N1 W) d1 R4 g else9 w7 ?/ u0 i. ~1 r" {
begin
. D; p& l1 ~3 E7 Z if node.Index =treeview1.Items.Count then goto ok
8 n3 m$ T- R3 L else goto nextnode; p# C0 u% C' g" x& W( }, X6 r
end;* m/ x; y0 T7 D% g) F$ j& [
ok:null;4 C; o. }. `8 l% j
end; |
zan
|