起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1032|回复: 3

DataSet.Aggregates该怎么用

[复制链接]
发表于 2004-3-25 13:39:44 | 显示全部楼层 |阅读模式
我有两个表,抬头、明细表,在业务信息中建立了主从关系,并分别建了两个文档,抬头文档和明细文档,需要在修改明细表时把金额合计值自动回填到抬头表中的合计金额字段
研究了一下DataSet.Aggregates,功能比较好,但是有点问题
1、DataSet.Aggregates没有相应的DataSet.Aggregates.Items[0].value属性,不能返回统计值
2、采用以下方法后
   TClientDataSet(Dataset).Aggregates.Add;
     TClientDataSet(DataSet).Aggregates.Items[0].Expression := 'sum(TaxAmount)';
     TClientDataSet(DataSet).Aggregates[0].Active := true;
     TClientDataSet(DataSet).AggregatesActive := true;
可以返回double(TClientDataSet(DataSet).Aggregates.Items[0].Value)值
但是问题是例如第一张单据总金额为100,第二张单据总金额为250,当第一张但据处理完后,在处理第二张单据时返回金额为350,把第一张单据的金额也累加上去了

问一下该如何处理
回复

使用道具 举报

发表于 2004-3-25 14:30:53 | 显示全部楼层
你采用的是Delphi的方法,Delphi的ClientDataSet对从表做统计是对整个数据集统计,而不是当前从表被过滤后的数据。我们的DataSet重新调整了ClientDataSet的Aggregates,解决了这个问题。稍后,Tang会给出实现办法。
回复 支持 反对

使用道具 举报

发表于 2004-3-25 14:54:50 | 显示全部楼层

可以这样:

var
  Agg: TBaseAggregate;
begin
  // 创建统计对象。
  Agg := DataSet.Aggregates.Add;
  Agg.Expression := 'Count(*)';

  // 取统计结果。
  // TDataSet.CalcAggregate(); 取统计结果,第一个参数是统计对象,第二个参数是分组统计的级别,-1是最末级别
  MasterField.Value := DataSet.CalcAggregate(Agg, -1);
end;
回复 支持 反对

使用道具 举报

发表于 2004-3-26 21:15:21 | 显示全部楼层

Aggregates和CalcAggregate

使用Aggregates属性和CalcAggregate函数配合来计算数据集中数据的汇总值。
  Aggregates属性保存的是汇总表达式的列表。
  CalcAggregate函数是用来计算单个汇总表达式的值,其原型为:
    function CalcAggregate(Aggregate: TBaseAggregate; GroupingLevel: Integer): Variant;
    Aggregate参数传入汇总表达式列表中的某个汇总表达式描述;
    GroupingLevel参数传入分组的级别
        当为-1时,汇总数据的范围是当前记录所对应的最后一层分组下的记录,如果没有分组则范围是全部记录;
        当为0时,汇总数据的范围是全部记录;
        当大于0时且小于等于分组字段个数时,则范围是当前记录所在的该分组级别下的全部记录;
        当大于分组字段个数时,则与-1时相同。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-5-6 06:00 , Processed in 0.042921 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表