Delphi TClientDataSet.IndexFieldNames 真的从数据集中删除记录(使它们不可见)吗?

问题描述 投票:0回答:1

我在Delphi中执行以下代码:

MyClientDataSet.IndexFieldNames:='FIELD1;FIELD2;FIELD3'

我可以看到,当该临时索引处于活动状态时,MyClientDataSet.RecordCount 显示记录数量减少。如果我进行 while 循环:

while not MyClientDataSet.Eof do begin
  //... some code
  MyClientDataSet.Next;
end;

那么当临时索引处于活动状态时,此循环中仅访问部分记录。记录丢失时没有任何特定的顺序:一些丢失的记录的索引字段中可能有零值,而一些丢失的记录的所有字段都有值。 这种行为是设计使然吗还是我发现了一些 ClientDataSet 错误(可能取决于 midas.dll 库的某些特定版本)或者我需要以某种特定方式配置我的 TClientDataSet(我无法想象 - 如何)?

我正在使用 Delphi 6,但我想问题也可能出现在更高版本的 Delphi 中。

delphi tclientdataset
1个回答
0
投票

应用索引后,您需要调用 MyClientDataSet.First 转到记录开头,以确保循环所有记录。当您应用索引时,当前记录将被重新排序,并且不再是数据集中的第一个记录,因此您将从中途开始循环并丢失上面的所有记录

© www.soinside.com 2019 - 2024. All rights reserved.