Событие OncalcFields генерится ОЧЕНЬ часто и может быть
необязательным и занимать большое количество времени, например, у вас есть
таблица с неким вычисляемым полем, и при каждом редактировании таблицы
вызывается следующий код:
|
|
MyCalcField.AsInteger :=
Table1Field1.AsInteger + 10;
|
Теперь, если Вы решили пройти последовательно каждую запись огромной таблицы,
вы можете представить, какое количество таких событий будет сгенерировано! Они
будут необязательны в случае, если вы сделаете обработку полей в отдельной
процедуре.
Мой совет следующий: выключите генерацию события OnCalcFields, обработайте
все поля и снова включите генерацию данного события, к примеру так:
|
|
Procedure
TForm1.BigProcessingFunction; begin
Table1.OnCalcFields := nil;
<Включите любые по сложности вычисления в этом
месте!>
Table1.OnCalcFields := Table1OnCalcFields; end;
|
Поля не вычисляются в течение времени обработки, которое может быть
достаточно велико, но при наличие громоздких вычислений специфического поля (или
даже нескольких полей), все вычисляется за один проход!
Данный метод позволяет исключить необязательный код и может быть использован
повсюду, где применяются большие таблицы или сложный алгоритм калькуляции поля.
Разница в скорости обработки таблицы довольно ощутима. |