- 在线时间
- 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中的节点。树是单位的部门结构树,节点是其中部门,已经添加好的。我想遍历树中所有节点,如果没有子节点说明是单位中的最小部门,然后查询改部门的员工并添加到该部门以下。下面的代码,一直都出错,好像是内存读取错误。请帮忙,三拜~~~
9 r: Z$ Y! y% y6 p: b& Q2 _ Wprocedure Trs.TreeView1Click(Sender: TObject);
+ P9 q2 n* F* R2 m6 Ovar node: TTreeNode;
) [, K# q% y: c$ E- f' K* v1 p strnode:string;
! h1 x& f4 [' W% } label ok;$ F8 ?8 ]: Z7 U) f
label haschild;
" R' d8 k1 M; N; ?7 F6 `% } label nextnode;
" I" `! }) @. j& tbegin
$ c. A/ w+ E4 E# A% i5 |' x; k node:=treeview1.TopItem;0 z% D' J! \' Z; P) `2 |9 k
haschild: node:=getfirstchild(node);4 X4 @+ E2 |$ G5 `3 G# u
strnode:=node.Text;
0 u4 c; k: |: B: [0 y+ X dm.qtree.Close;8 V# q3 \; K2 a0 w* H) z
dm.qtree.SQL.Clear;( H/ m0 {( @5 j, L# h
dm.qtree.SQL.Text:='select empname from empbasic where depid='+''''+strnode+'''';& C' e: q" [' c0 W' s8 S2 }
dm.qtree.Open; //取得该部门下所有员工姓名6 s9 n ?" c; W
if not(dm.qtree.IsEmpty) then //如果记录非空(即该部门下有员工)( l: J* x& p( \( ~
begin //将所有员工姓名都作为子节点添加$ H. P4 {- L$ o( r) a5 S
repeat, @ r* y& |3 z; s1 r
strnode:=dm.qtree.fieldbyname('empname').AsString;. b: ~8 p- f+ c5 C9 J
treeview1.Items.AddChild(node,strnode); U# K8 W: T, a+ [+ f# J8 c6 {+ |
dm.qtree.Next;
$ k# O( A- F- W% k4 r6 A* k until dm.qtree.Eof;$ h% s( e q; t& f7 `9 e
end;- I+ l* P. X: G+ N) C
if not(node.IndexOf(node.Parent)=node.Parent.Count -1) then //如果当前节点不是同级节点最后一个: C6 j: h/ `7 u; M
begin- b* N- p$ _$ r8 ^
nextnode: node:=node.getNextSibling; //取得下一个同级节点
6 {2 U5 i. n( ^/ C& u goto haschild;
( [+ b0 O# \6 w6 B; h& w7 ^ end
1 t8 h4 t+ y1 A7 M/ V0 {( J else
+ Q: ^, a4 Y& @1 k begin
; U4 Q9 B7 \9 C: \0 t8 A if node.Index =treeview1.Items.Count then goto ok
% z6 x' v/ \5 P W else goto nextnode;
; {( `9 A& n' l( c end;+ J0 ?( z# Y& L3 f4 {; _
ok:null;* S' X" n% c% G& p% p5 y
end; |
zan
|