如何实现分组中断,运行总计,组总数

时间:2011-11-12 08:18:27

标签: delphi

通常我必须处理从开头到文件结尾的输入数据集,同时执行计算,例如运行总计,组总数,最后,总计。

许多报表构建工具提供了开箱即用的功能:分组符和ResetGroup属性。

有人可以建议我如何使用TDatasets在delphi伪代码中实现它吗?

3 个答案:

答案 0 :(得分:2)

查看ClientDataset Aggregates fields

分组和汇总:example

答案 1 :(得分:1)

简单的想法:

编写一些代码来创建这些sum / average / min / max类型的特征。不是很难。

   procedure TMyDataModule1.Totals;
   var
      group:TSalesGroup;  { in-memory data holder object used only for sales totals by group }
   begin
      ClearOldValues; {Set TotalSales := 0, etc}
      dataset.First;
      while not dataset.Eof do begin
         group := DetermineGroupOfThisRecord; { TSalesGroup, has property TotalSales }
         group.DoGroupTotals; { TotalSales := TotalSales + dbSalesfield.AsCurrency; }
         doGlobalTotalsForOneRow; { TotalSales := TotalSales + dbSalesfield.AsCurrency;  }
         dataset.Next;
      end;
      DumpMyResults; {you write this}
    end;

对于运行总计,查看计算字段类型,它们在所有数据集版本中都可用,而不仅仅在客户端数据集中。我喜欢Arjen的答案(使用ClientDataSet),但您可能希望在不将数据副本创建到客户端数据集的情况下执行某些操作。因此,尝试找一下常规数据集的功能。

答案 2 :(得分:0)

如果您的数据库支持它,您也可以在SQL中计算它们。寻找SQL分析功能。对于大型数据集,有时最好让它们计算服务器端,尤其是当您不需要移动整个结果集客户端时。