第一条记录数量不够的话取下一条记录,  加在判断里面就死循环了,
adoquery。next不加在判断里面就遍历所有记录()with ADOQuery2 do
  begin
    close;
    SQL.Clear;
    SQL.Add('Select * FROM tb_buy1 where commodityname like :p and specs like :p1 and level like :p2 and companyname like :p3');
     Parameters.ParamByName('p').Value:=trim(combobox2.text);
     Parameters.ParamByName('p1').Value:=trim(combobox3.text);
     Parameters.ParamByName('p2').Value:=trim(combobox4.text);
     Parameters.ParamByName('p3').Value:=trim(combobox5.text);
    open;//查找符合要求的记录 (这里我一共就三条记录,符合的也是三条,并不是记录太多速度慢)
        s1:=strtofloat(edit9.Text);//自己输入的数量
     while not adoquery2.Eof do
  begin
     s:=  adoquery2.fieldbyname('number').Asfloat;
  s3:=    adoquery2.fieldbyname('price').Asfloat;
  if(s<s1)    then begin//数量过大
    cb:=cb+s*s3
    s1:=s1-s;
    adoquery2.Next  ;
  end
  else begin   
   s4:=s1*s3;
   cb:=cb+ s4;
  end;   
  end;  edit13.text:= FormatFloat('0.0',cb)
    end;

解决方案 »

  1.   

     while not adoquery2.Eof do
      begin
      s:= adoquery2.fieldbyname('number').Asfloat;
      s3:= adoquery2.fieldbyname('price').Asfloat;
      if(s<s1) then begin//数量过大
      cb:=cb+s*s3
      s1:=s1-s;
      end
      else begin   
      s4:=s1*s3;
      cb:=cb+ s4;
      break;//跳出循环
      end;
      adoquery2.Next ;//这个最好放在这里
      end;
      

  2.   

    adoquery放这里 他就失去判断功能了 无论是否已经满足数量 他都会遍历所有记录  我希望的是满足条件了就不进入下一条记录了
     
      

  3.   

    满足条件了就不进入下一条记录了 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    在你判断满足条件了的语句后,需加一条跳出循环语句Break;//跳出While循环语句
      

  4.   

    抱歉看错了 没看到break   现在正确了 谢谢了