ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text :='SELECT COUNT(*) as aa FROM SELLTB WHERE OUTDATE = #'+DateToStr(NOW)+'#';
  ADOQuery1.Open;
  int :=ADOQuery1.fieldbyname('aa').AsInteger;
 
  SUM :=0;
  SUM1:=0;
  SUM2:=0;  FOR i:=0 TO int-1 DO
  BEGIN
  Label8.Caption :=DateToStr(NOW);
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  sql:='SELECT PRICE,price_Query FROM SELLTB WHERE OUTDATE = #'+DateToStr(NOW)+'#';
  ADOQuery1.SQL.Add(sql);
  ADOQuery1.Open;
  SUM1 :=ADOQuery1.fieldbyname('PRICE').AsInteger;
  SUM2 :=ADOQuery1.fieldbyname('price_Query').AsInteger;
  ADOQuery1.Active :=True;
  SUM :=SUM+(SUM1 * SUM2);
END;  Label2.Caption :=inttostr(SUM);帮忙看一下,好像循环没有执行,SUM也无法进行累加,请问需要怎么修改呢?谢谢!
目的:查询出所有符合指定日期的记录,计算出每条记录中PRICE * price_Query的值SUM,然后全部SUM累加起来。

解决方案 »

  1.   

    ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text :='SELECT (PRICE * price_Query) as cSUM FROM SELLTB WHERE OUTDATE = #'+DateToStr(NOW)+'#';
      ADOQuery1.Open;Label2.Caption :=ADOQuery1.fieldbyname('cSUM).AsInteger;
      

  2.   

    F7单步运行看看,int值是多少,如果是0
    那就是where条件不成立,查询不到数据给你一个简单的方法:Label8.Caption :=DateToStr(NOW);
    {这个结果只有日期,如果要时间,就使用DateTimeToStr(NOW);}
    With ADOQuery1 Do
    Begin
    Close;
    SQL.Text:='SELECT Sum(PRICE*price_Query) FROM SELLTB WHERE OUTDATE='+Quotedstr(DateToStr(Date));
    Open;
    Label2.Caption :=FloatToStr(Fields[0].AsFloat);
    Close;
    End;
      

  3.   

    跟蹤下代碼,show下int變量的值是多少?
      

  4.   

    没有循环,可能是因为int为0;
    int为0,可能是因为ADOQuery1.SQL.Text :='SELECT COUNT(*) as aa FROM SELLTB WHERE OUTDATE = #'+DateToStr(NOW)+'#' 查询不到东西
      

  5.   

    加上断点跟踪看看,用ctrl+F5键查看参数的数值。
      

  6.   

    没循环,那肯定是int :=ADOQuery1.fieldbyname('aa').AsInteger中的
    int:=0了,设个断点跟下,就知道了。
      

  7.   

    楼上  kaikai_kk  方法是正确的。感谢回答的朋友!