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