一个弄了很久都没办法搞定的问题,请各位帮一下忙。

lushaox 2005-08-19 12:45:52
以下代码所要实现的功能是:
学校
-化学系
01班
02班
生物系
01班
02班
代码如下:

while not adoquery2.eof do
begin
name:=adoquery2.FieldByName('sfzm').AsString;
ChiNode := TreeView1.Items.Add(RootNode,name);
for m:=1 to ADOQuery1.RecordCount do
while not adoquery1.eof do
begin
if name=adoquery1.FieldByName('sfzm').AsString then
begin
iChiNode := TreeView1.Items.AddChild(ChiNode,ADOQuery1.FieldByName('cdxh').AsString);
ADOQuery1.Next;
end;
end;
adoquery2.Next;
end;
但运行了一下出现了了这种情况:
学校
-化学系
01班
02班
生物系
01班
02班
02班
02班
02班
出现了多一次子结点的循环,麻烦各位给点指导指导,谢谢!

...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lushaox 2005-08-19
  • 打赏
  • 举报
回复
谢谢!问题解决。
lemon_wei 2005-08-19
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
RootNode : TTreeNode;
ChildNode : TTreeNode;
name : string;
begin
RootNode := TreeView1.Items.AddChild(nil, '学校');
while not AdoQuery2.Eof do
begin
name := AdoQuery2.FieldValues['sfzm'];
ChildNode := TreeView1.Items.AddChild(RootNode, name);
if not (AdoQuery1.Bof and adoquery1.Eof) then AdoQuery1.First;
while not AdoQuery1.Eof do
begin
if (name = AdoQuery1.FieldValues['sfzm']) then
begin
TreeView1.Items.AddChild(ChildNode, AdoQuery1.FieldValues['cdxh']);
end;
AdoQuery1.Next;
end;
AdoQuery2.Next;
end;
end;

-------------------------------
select * from 表2
order by sfzm,cdxh
-------------------
select * from 表1
order by sfzm
--------------------------------
测试通过
xixuemao 2005-08-19
  • 打赏
  • 举报
回复
一个SQL语句就可以实现的,老兄。

不用那么麻烦的。
rockswj 2005-08-19
  • 打赏
  • 举报
回复
怎么这么多循环??
看你的表结构应该是主从关系,你可以循环主表数据集,让从表跟着动,然后填充树

829

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧