先谢谢 Snakeguo(枫) ,但还是请详细说明,最好带代码。 我是这样想: (1) select sum(单价*数量) from xxx where ... //这里是求出总价 (2) update 主表 set 总价 = 上一查询得出的结果 where ... 现在的问题是上一查询得出的结果应该用什么方式来表示,用变量吗,怎么用?
var abc(总价):=integer; begin adoquery1.sql.add(select sum(单价*数量) from xxx where ... ); abc:=adoquery1.fileds[0].asinteger; end;
我是在明细表的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;
同意Snakeguo(枫) 的意见。
我是这样想:
(1) select sum(单价*数量) from xxx where ... //这里是求出总价
(2) update 主表 set 总价 = 上一查询得出的结果 where ...
现在的问题是上一查询得出的结果应该用什么方式来表示,用变量吗,怎么用?
begin
adoquery1.sql.add(select sum(单价*数量) from xxx where ... );
abc:=adoquery1.fileds[0].asinteger;
end;
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;