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