以前这样的嵌套算法用过很多次,这次却怎么也搞不懂问题出在了那里,唯一和以前不同的时,以前两个嵌套循环是在两个不同的表中,这次是在同一个表中循环,难道是第二次循环就把循环的记录指针定位在了最后一行,之后再返回第一循环时不再按以前的循环顺序依次Next下去(第二次的循环对于第一次记录指针也起作用),所以第一次循环无效了。那如果是这样的话应当是怎样的解决,算法是怎样。
procedure TCCSmainfrm.TreeView1DblClick(Sender: TObject);
var
olg:Toutlookgroup;
Sl:Tstrings;
prostr:string; //设置了一个查询和对比判断时要用到字符的参数
begin
case treeview1.Selected.AbsoluteIndex of //这里取treeview选择的项 1:begin
prostr:='';
with datamodule1.ADOStock do //这里主要作用是一、取的查询字符,并在这个表中循环取这个查询字符
begin
close;
sql.Clear;
sql.Add('select * from stocklist');
open;
while not eof do //这里开始循环取查询字符,
begin
if fieldbyname('name').asstring<>prostr then //当这个取的查询的字符不相等时,开始取值显示在
advoutlooklist1表中
begin
prostr:=fieldbyname('name').AsString;
Olg:=advoutlooklist1.AddGroup(prostr);
with datamodule1.ADOStock do
begin
close;
sql.Clear;
sql.Add('select * from stocklist where name='+quotedstr(prostr));
open;
while not eof do //这是第二个循环,将查询到的数据显示在advoutlooklist1上
begin
Sl:=advoutlooklist1.AddItem(olg); //在上面群组名下面开始逐项添加ITEM
sl.Add('');
sl.Add(fieldbyname('adress').AsString);
sl.Add(fieldbyname('Floor').AsString);
sl.Add(fieldbyname('overtime').AsString);
sl.Add(fieldbyname('amount').AsString);
sl.Add(fieldbyname('outamount').AsString);
sl.Add(fieldbyname('proID').AsString);
next; //第二个循环完成 end; //添加ITEM项while结束 end; //查找的With结束
end;
next; //这里返到第一个循环出问题了,返不回了,到这里就结束,不再循环了,不解啊要,不知那里有问题了
end; //添加群组号判断While 结束
end; //With结束 end;
procedure TCCSmainfrm.TreeView1DblClick(Sender: TObject);
var
olg:Toutlookgroup;
Sl:Tstrings;
prostr:string; //设置了一个查询和对比判断时要用到字符的参数
begin
case treeview1.Selected.AbsoluteIndex of //这里取treeview选择的项 1:begin
prostr:='';
with datamodule1.ADOStock do //这里主要作用是一、取的查询字符,并在这个表中循环取这个查询字符
begin
close;
sql.Clear;
sql.Add('select * from stocklist');
open;
while not eof do //这里开始循环取查询字符,
begin
if fieldbyname('name').asstring<>prostr then //当这个取的查询的字符不相等时,开始取值显示在
advoutlooklist1表中
begin
prostr:=fieldbyname('name').AsString;
Olg:=advoutlooklist1.AddGroup(prostr);
with datamodule1.ADOStock do
begin
close;
sql.Clear;
sql.Add('select * from stocklist where name='+quotedstr(prostr));
open;
while not eof do //这是第二个循环,将查询到的数据显示在advoutlooklist1上
begin
Sl:=advoutlooklist1.AddItem(olg); //在上面群组名下面开始逐项添加ITEM
sl.Add('');
sl.Add(fieldbyname('adress').AsString);
sl.Add(fieldbyname('Floor').AsString);
sl.Add(fieldbyname('overtime').AsString);
sl.Add(fieldbyname('amount').AsString);
sl.Add(fieldbyname('outamount').AsString);
sl.Add(fieldbyname('proID').AsString);
next; //第二个循环完成 end; //添加ITEM项while结束 end; //查找的With结束
end;
next; //这里返到第一个循环出问题了,返不回了,到这里就结束,不再循环了,不解啊要,不知那里有问题了
end; //添加群组号判断While 结束
end; //With结束 end;
解决方案 »
- ???????????从delphi6到delphi2007一直困扰我的问题???????????????????
- 如何实现类似超级终端的功能(Delphi)
- 请教高手,Editplus中Html工具栏中颜色下拉框、表格下拉框的实现方法?
- 请问我要创建文件、夹删除文件夹、把文件夹改名,用Delphi怎么现实。我找的方法只在win3.1中有用,但我想要在win32中能用的函数
- 生活很无聊
- 基础性问题:关于下拉列表的问题,
- 请问那里有delphi7.0免费的电子书籍??
- 线上等答案 !!着急啊 !!!
- xe5出来了,可是它的android开发却缺少很多单元。怎么解决?坑爹呀。
- 网管好帮手,WinRoute 日志分析器,1.0版免费提供,以后的版本可能要考虑注册哦!快来一份吧!
- delphi7开发控件,怎样调试
- 关于类的事件
用两个数据分部用在不同的循环中
换一个
事先将name存入TStringList,遍历TStringList进行操作。