Delphi ClientDataset、聚合和;分组级别

Delphi ClientDataset、聚合和;分组级别,delphi,Delphi,我有一张像这样的桌子: TYPE GROUP VALUE ----- ----- ----- 0 0 10 0 0 60 0 1 20 1 0 30 1 1 40 1 1 10 我要按类型和类型列出总数;小组。 在类型和类型上创建索引;小组 object ClientDataSet1:

我有一张像这样的桌子:

TYPE     GROUP     VALUE
-----    -----     -----
0        0         10
0        0         60
0        1         20
1        0         30
1        1         40
1        1         10
我要按类型和类型列出总数;小组。 在类型和类型上创建索引;小组

object ClientDataSet1: TClientDataSet
  IndexDefs = <
    item
      Name = 'ClientDataSet1Index1'
      Fields = 'TYPE'
      GroupingLevel = 1
    end
    item
      Name = 'ClientDataSet1Index2'
      Fields = 'TYPE;GROUP'
      GroupingLevel = 2
    end>
  IndexName = 'ClientDataSet1Index1'
对象ClientDataSet1:TClientDataSet
IndexDefs=<
项目
名称='ClientDataSet1Index1'
字段='TYPE'
分组级别=1
结束
项目
名称='ClientDataSet1Index2'
字段='类型;集团的
分组级别=2
结束>
IndexName='ClientDataSet1Index1'
并创建了两个聚合

object ClientDataSet1: TClientDataSet
  Aggregates = <
    item
      Active = True
      AggregateName = 'Agg1'
      Expression = 'SUM(VALUE)'
      GroupingLevel = 1
      IndexName = 'ClientDataSet1Index1'
    end
    item
      Active = True
      AggregateName = 'Agg2'
      Expression = 'SUM(VALUE)'
      GroupingLevel = 2
      IndexName = 'ClientDataSet1Index2'
    end>
  AggregatesActive = True
对象ClientDataSet1:TClientDataSet
聚合=<
项目
活动=真
AggregateName='Agg1'
表达式='SUM(VALUE)'
分组级别=1
IndexName='ClientDataSet1Index1'
结束
项目
活动=真
AggregateName='Agg2'
表达式='SUM(VALUE)'
分组级别=2
IndexName='ClientDataSet1Index2'
结束>
AggregatesActive=True
Agg2将不会计算,因为ClientDataset索引设置为ClientDataSet1Index1。 如果ClientDataset.IndexName=ClientDataSet1Index2,则Agg2起作用,但Agg1不起作用:( 它似乎不允许多个分组级别,因为我只能 一次指定一个clientdataset索引

我错过什么了吗

解决方法是克隆我的 clientdataset并创建另一个 有点不方便

[使用D2006]


谢谢

它应该与第二个索引一起工作。以下程序似乎在D2007中工作(我没有D2006):

产出:

GROUP:  0       TYPE:   0       VALUE:  10      AGG1:   170     AGG2:   90      AGG3:   70
GROUP:  0       TYPE:   0       VALUE:  60      AGG1:   170     AGG2:   90      AGG3:   70
GROUP:  1       TYPE:   0       VALUE:  20      AGG1:   170     AGG2:   90      AGG3:   20
GROUP:  0       TYPE:   1       VALUE:  30      AGG1:   170     AGG2:   80      AGG3:   30
GROUP:  1       TYPE:   1       VALUE:  40      AGG1:   170     AGG2:   80      AGG3:   50
GROUP:  1       TYPE:   1       VALUE:  10      AGG1:   170     AGG2:   80      AGG3:   50

供将来参考:似乎任何聚合字段都必须使用Tclientdataset中活动的相同索引。这是Tclientdataset中的一个错误,至少从Delphi XE到Delphi XE7都存在,如下所示
GROUP:  0       TYPE:   0       VALUE:  10      AGG1:   170     AGG2:   90      AGG3:   70
GROUP:  0       TYPE:   0       VALUE:  60      AGG1:   170     AGG2:   90      AGG3:   70
GROUP:  1       TYPE:   0       VALUE:  20      AGG1:   170     AGG2:   90      AGG3:   20
GROUP:  0       TYPE:   1       VALUE:  30      AGG1:   170     AGG2:   80      AGG3:   30
GROUP:  1       TYPE:   1       VALUE:  40      AGG1:   170     AGG2:   80      AGG3:   50
GROUP:  1       TYPE:   1       VALUE:  10      AGG1:   170     AGG2:   80      AGG3:   50