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