用事务,先POST细表的数据,再在细表的AFTERPOST中修改主表的总数,提交。

解决方案 »

  1.   

    呵呵,还有人想在ACCESS里用触发器。
    同意Snakeguo(枫) 的意见。
      

  2.   

    先谢谢 Snakeguo(枫) ,但还是请详细说明,最好带代码。
    我是这样想:
     (1)  select sum(单价*数量) from xxx where ... //这里是求出总价
     (2)  update 主表 set 总价 = 上一查询得出的结果 where ...
         现在的问题是上一查询得出的结果应该用什么方式来表示,用变量吗,怎么用?
      

  3.   

    var abc(总价):=integer;
    begin
     adoquery1.sql.add(select sum(单价*数量) from xxx where ... );
     abc:=adoquery1.fileds[0].asinteger;
    end;
      

  4.   

    我是在明细表的OnCalcFields方法中修改主表的汇总数据。
    procedure TdmMaster.adodsMSBuyRecordCalcFields(DataSet: TDataSet);
    begin
      if qrySumMSBuy.Active=True then qrySumMSBuy.Close;
      qrySumMSBuy.CommandText :='select sum(Number) as TotalNumber,sum(Number*Price) as TotalMoney from wMSBuyRecord where CaseID=:CaseID';
      qrySumMSBuy.Parameters.ParamByName('CaseID').Value:=adodsMSBuyCase['CaseID'];
      qrySumMsBuy.Open;
      adodsMSBuyCase.Edit;
      adodsMSBuyCase['TotalNumber']:=qrySumMSBuy['TotalNumber'];
      adodsMsBuyCase['TotalMOney']:=qrySumMSBuy['TotalMoney'];
    end;