我的主表信息是供应商,从表是具体的供货记录。
现在要实现这样一个功能:把每一个供应商一次合同的多种货物的金额统计,统计的值要写入主表供应商信息中。
我用的是:
     adqry4.Close;
     adqry4.SQL.Clear;
     adqry4.SQL.Add('select 表单号, sum(采购总额) as 合同金额 from WZ原料采购明细表 group by 表单号');
     adqry4.Open;
     adqry1.Edit;
     dbedt13.Text := adqry4.fieldbyname('合同金额').AsString;
     adqry1.Post;
这里dbedt13放的是主表供应商信息的合同金额。我得到的合同金额只有第一个供应商是对的,其他的供应商的合同金额均和第一个一样,也就是说后来的没有统计。????谢谢!

解决方案 »

  1.   

    刚用了for 循环,加了.next ,怎么还是不行
     for i:=1 to adqry1.RecordCount do
        begin
         adqry4.Close;
         adqry4.SQL.Clear;
         adqry4.SQL.Add('select 表单号, sum(采购总额) as 合同金额 from WZ原料采购明细表 group by 表单号');
         adqry4.Open;
    //     for i:=1 to adqry1.RecordCount do       adqry1.Edit;
           dbedt13.Text := adqry4.fieldbyname('合同金额').AsString;
           adqry1.Post;
           adqry1.Next;
        end;
    保存时提示说我的adqry2不在编辑或者插入状态。
      

  2.   

    你这个for循环,并没有移动记录位置,一直处于第一个,你应该这样写
    while not adoquery1.eof do
    begin
    .......
      adoquery1.next;
    end;
      

  3.   

    直接用edit不用dbedit
    //adqry1.Edit;
    edit13.Text := adqry4.fieldbyname('合同金额').AsString;
    //  adqry1.Post;
      

  4.   

    begin
          adqry1.First;
          
        for i:=1 to adqry1.RecordCount do
        begin//     for i:=1 to adqry1.RecordCount do
           adqry4.Close;
           adqry4.SQL.Clear;
           adqry4.SQL.Add('select sum(采购总额) as 合同金额 from WZ原料采购明细表 where 表单号 = '+dbedt1.Text+'');
           adqry4.Open;
           adqry1.Edit;
           if adqry4.FieldByName('合同金额').AsString<>'' then       dbedt13.Text := adqry4.fieldbyname('合同金额').AsString
           else dbedt13.Text := FloatToStr(0);
           adqry1.Post;
           adqry1.Next;
           adqry4.Next;
        end;     
    end;
    这样就解决了。还是要谢谢大家哈!