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