我有一个FDTable,其中一些查找字段包含数千条记录。当我使用以下代码查看FDTable时:
FDTable1.AutoCalcFields:=false;
FDTable1.DisableControls;
FDTable1.First;
while FDTable1.Eof<>true do
begin
// some code....
FDTable1.Next;
end;
FDTable1.EnableControls;
FDTable1.AutoCalcFields:=true;
它消耗了大量的时间。当我从表中删除查找字段时,这个代码运行得非常快。
有必要提到是,对于包含查找字段的表,这段代码使用ADOTable运行得非常快。2我该如何解决这个问题呢?
1条答案
按热度按时间z8dt9xmd1#
请尝试将数据集的
AutoCalcFields
属性设定为False
。确定何时触发OnCalcFields事件以及何时计算查找字段值。
设置AutoCalcFields以控制何时触发OnCalcFields事件以更新计算字段,以及何时计算查找字段。
计算字段是从活动记录中的一个或多个字段的值派生其值的字段,有时还需要进行其他处理。查阅字段是其值来自辅助数据集或查阅缓存的字段。
**注意:**单向数据集支持计算字段,但不支持单向字段。对于单向数据集,OnCalcFields仅控制计算字段的更新时间。
当AutoCalcFields为True(默认值)时,在以下情况下将重新计算Lookup字段并触发OnCalcFields:
当AutoCalcFields为False时,Lookup字段将被重新计算,并且OnCalcFields事件仅在以下情况下发生:
如果应用程序允许用户更改数据,则会频繁触发OnCalcFields。在这些情况下,应用程序可以将AutoCalcFields设置为False,以降低OnCalcFields事件发生的频率以及获取查找值的频率。
此外,字段的
LookupCache
属性可能会对您有所帮助。