- 在线时间
- 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中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~
, e& ^( y' p! d+ A3 \: |6 iprocedure Trs.TreeView1Click(Sender: TObject);
$ i' t7 l: w; l1 ]var node: TTreeNode;
F: w. J! \, m" P strnode:string;( K. P' J( U8 A- A: o; a, z" Z d
label ok;
% A4 l$ j% v) H* \* X% m2 S7 [ label haschild;8 j8 E' s j& d& F; r; H6 B8 Z& G
label nextnode;
, P/ Z0 E; i2 Nbegin% A' h1 J! _$ ?/ J d* H) z
node:=treeview1.TopItem;
h4 |2 J5 V5 ^/ |- ~6 f) T' whaschild: node:=getfirstchild(node);
) R& y4 T2 y+ J% b" @* Q strnode:=node.Text; T9 |8 B2 S5 ~) @/ y2 A# ^
dm.qtree.Close;
: q7 M& K' f' S& J( q0 @ dm.qtree.SQL.Clear;6 W# F, q1 |+ ?
dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';
: R6 k' q X w5 d6 w dm.qtree.Open; //取得该部门下所有员工姓名3 }- |3 R4 B) [8 L2 v9 [
if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)6 ]% t4 X- G4 A9 ^
begin //将所有员工姓名都作为子节点添加8 t* p2 e3 g( v* e" F) \4 M
repeat
, [/ m9 P/ k; w3 v, a9 e( |, ^1 v, e strnode:=dm.qtree.fieldbyname('empname').AsString;
1 k. m: D4 p% O treeview1.Items.AddChild(node,strnode);6 j( G0 v$ Z4 `9 C, W7 Y- F) i' J
dm.qtree.Next;5 Y9 [3 S4 `) h" s O: p& H
until dm.qtree.Eof;: r4 Y/ J, G- H, K
end;
6 p1 t) i. e$ @$ Z L0 @& G if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个% l8 R. E8 W$ m
begin
1 A& X9 }/ T/ J! l; i/ ]5 Unextnode: node:=node.getNextSibling; //取得下一个同级节点
! |# j- M; K0 O7 w: ]" m goto haschild;
$ A7 G% S9 P7 p; u7 A3 X end
" X, \9 u" P3 y" ]* F+ d else) o1 |; }& P( r, _% p2 f
begin
2 e7 M$ ]7 x, }6 u# e if node.Index =treeview1.Items.Count then goto ok
' p. @+ G$ h$ K% Q' T8 s0 D L else goto nextnode;9 W/ u$ a2 {2 o3 g. L6 U
end;+ `9 S5 N9 C' r/ d
ok:null;
) u, q( R5 K2 N$ l* s) _2 H( c3 \end; |
zan
|