关于网友提出的“ 死循环的问题”问题疑问,本网通过在网上对“ 死循环的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 死循环的问题描述:
with form1.Table1 do
begin
pinming := edit1.Text ;
first;
if locate('品名',pinming,[]) then
begin
min := form1.Table1.FieldValues['进价'] ;
max := form1.Table1.FieldValues['进价'] ;
next;
while not eof do
begin
if locate('品名',pinming,[]) then
If FieldValues['进价']>max then
max := form1.Table1.FieldValues['进价']
else if FieldValues['进价']<>
min := form1.Table1.FieldValues['进价'];
next;
end;
解决方案1:
如果能够locate数据的话就肯定是死循环了
因为locate是从表中第一条记录开始搜索的,并不是从当前记录向后的
所以你的如下代码将导致死循环
while not eof do
begin
if locate('品名',pinming,[]) then
If FieldValues['进价']>max then
max := form1.Table1.FieldValues['进价']
else if FieldValues['进价']<>
min := form1.Table1.FieldValues['进价'];
next;
end;
如果你想要求出最大进价和最小进价的话,
可用Sql语句得到:
query.close;
query.sql.clear;
query.sql.add('select max(进价) as 最大进价, min(进价) as 最小进价 from table');
query.sql.add('where 品名='''+pinming+'''');
query.sql.add('group by 品名');
query.open;