【问题标题】:TAggregateField not calculated when Index of ClientDataset changesClientDataset 的索引更改时未计算 TAggregateField
【发布时间】:2018-02-20 15:03:05
【问题描述】:
我正在使用一个 TClientDataset,它连接到一个带有几个聚合字段的 DBGrid,用于计算另外几个浮点字段的总和。所有字段均已在设计时创建。
一切都按预期工作,直到 ClientDataset 的 IndexName 随自定义索引发生更改,以便对 Grid 进行排序。之后,Aggregate Fields 没有正确计算它们的值,它们被设置为 Null 值。
问题出现在Delphi XE7中。
【问题讨论】:
标签:
delphi
indexing
aggregate
tclientdataset
【解决方案1】:
我在谷歌上找到了一个适合我的解决方案here
在 DBClient 单元中声明的 TCustomClientDataSet.SetIndex 方法存在错误。
解决方案建议替换以下代码
if FAggregatesActive then
begin
FAggFieldsInit := False;
ResetAllAggs(FAggregatesActive);
与下一个
if FAggregatesActive then
begin
CloseAggs;
ResetAllAggs(FAggregatesActive);
据我了解,将 FAggFieldsInit := False 替换为 CloseAggs 会强制释放聚合,然后使用新索引重新计算。
正如我所说,这个解决方案对我有用,我没有注意到任何不需要的行为。
原始解决方案的功劳归于 AndreyZ。