我现在有一个dbgrid1显示的数据表,字段名分别为product,part,class(级别),price,amount等。想通过BberechnenClick的方法实现对amount里面内容
循环相加(控制条件为query1.FieldByName('class').AsString=combobox1.Text)
我现在这个程序肯定是循环出现问题了,每次执行之后,就判断第一条记录中
class内容是否和combobox相同,相同就执行,不相同就为0了。我也不知道自己有没有把问题说清楚,不清楚的话我把具体数字列出吧。procedure TForm1.BberechnenClick(Sender: TObject);
var sum:real;
    i:integer;
begin
  Query1.DisableControls;
  Query1.first;
  sum:=0;
  for i:=0 to query1.RecordCount-1 do
  begin
     if query1.FieldByName('class').AsString=combobox1.Text
     then
     begin
         while not Query1.eof do
         begin
         sum:=sum+Query1.FieldByName('Amount').AsFloat;
         Query1.next;
         end;
        Query1.EnableControls;
         Edit3.Text:=FloatToStr(sum*strtofloat(edit1.Text));
     end
     else
         edit3.Text:='0'
  end;
end;

解决方案 »

  1.   

    procedure TForm1.BberechnenClick(Sender: TObject);
    var sum:real;
        i:integer;
    begin
      Query1.DisableControls;
      Query1.first;
      sum:=0;
      begin
         if query1.FieldByName('class').AsString=combobox1.Text
         then
         begin
             while not Query1.eof do
             begin
             sum:=sum+Query1.FieldByName('Amount').AsFloat;
             Query1.next;
             end;
            Query1.EnableControls;
             Edit3.Text:=FloatToStr(sum*strtofloat(edit1.Text));
         end
         else
             edit3.Text:='0'
    end;
    最外层的循环我觉得完全没有必要吖
      

  2.   

    procedure TForm1.BberechnenClick(Sender: TObject);
    var sum:real;
        i:integer;
    begin
      Query1.DisableControls;
      Query1.first;
      sum:=0;
      for i:=0 to query1.RecordCount-1 do
      begin
         if query1.FieldByName('class').AsString=combobox1.Text
         then
         begin
             while not Query1.eof do
             begin
             sum:=sum+Query1.FieldByName('Amount').AsFloat;
             end;
            Query1.EnableControls;
            Edit3.Text:=FloatToStr(sum*strtofloat(edit1.Text));
            Query1.next;
         end
         else
           edit3.Text:='0'
      end;
    end;
      

  3.   

    可能是我没把问题描述清楚,我的combobox里有三项,分别是first,second,third,
    dbgrid里class比如纵向依次是first     amount里有30   要对三个级别的数分别求和,
                               first               50
                               third               89
                               second              78
                               first               21
                               third               10
    该怎么做?可能我上面的思路根本就不好,有更好的方法,请帮帮我。谢谢菜菜和凌然。
      

  4.   

    你可以再用一个TQuery对该表进行操作
    Query2.Sql.Text:='select Sum(amount) Form 表名 Where Class=Combobox1.text';
      

  5.   

    我写了这么一个procedure,还是用的query1,可以吗,还是我必须重新用一个Tquery.
    procedure TForm1.BberechnenClick(Sender: TObject);
    begin
    query1.Close;
    query1.SQL.Clear;
    query1.SQL.Text:='select Sum(preis) Form product Where class=combobox1.text';
    query1.Open;
    edit3.Text:=query1.SQL.Text;
    end;
    但是还是不能得到我想要的结果,我是个delphi的新手,这是我们的作业,一定要完成
    这个作业才能参加考试。急死我了,请大家帮帮忙,谢了!