【发布时间】:2013-07-27 09:34:01
【问题描述】:
我正在尝试在计算的布尔字段上对 ClientDataSet 进行排序,但由于某种原因,数据未排序。我有一个名为Highlight 的布尔字段,FieldKind 设置为fkInternalCalc,并且索引定义如下:
IndexDefs[0].DescFields = 'Highlight';
IndexDefs[0].Fields = 'Highlight;PatNo';
IndexDefs[0].Name = 'PatNo';
IndexDefs[0].Options = [ixDescending];
显然我已将客户端数据集的 IndexName 设置为 'PatNo'。当我运行我的应用程序时,CDS 中的数据仅按PatNo 字段排序。有什么想法吗?
【问题讨论】:
-
@bummi 那篇文章说您不能在索引中包含虚拟字段,例如计算或聚合字段,但我的计算字段是
fkInternalCalc,根据@ 987654322@可以在索引中使用 -
在该示例中,他们使用 IndexFieldNames 而不是 IndexName。我可以确认工作。您可以尝试添加另一个内部计算字段以构成适当的索引作为解决方法。
-
@UweRaabe 我将布尔字段更改为整数;不用找了。我只是好奇;我应该如何强制执行
OnCalcField()?我不能打电话给Refresh(),因为我的客户端数据集没有附加到任何提供者。我发现的唯一方法是调用Resync([]);强制重新计算所有计算字段。 -
您是否尝试过将索引命名为与所有数据集字段不同的名称?要重新计算所有 fkInternalCalc 字段,请打开一个新问题。这对其他人也可能有用,如果在评论中回答,则会丢失。
标签: delphi delphi-xe2 tclientdataset