Почему бы tDataSet.Append не вызвать автоматический вызов Post?
Потому что в первую очередь это повредит объекту вызова Append;если бы он вызывал Post автоматически, это привело бы к тому, что пустая запись была бы размещена в таблице без возможности сначала установить значения ее полей.Точно так же автоматический вызов Post после Edit или Insert также предотвратит изменение любых значений полей с помощью кода пользователя
. Выражение, которое вы цитируете из http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TDataSet_Post.html, в лучшем случае плохо сформулировано, поскольку оно можетбыть неправильно прочитанным, чтобы создать впечатление, что "методы набора данных, которые изменяют состояние набора данных, такие как Редактировать, Вставить или Добавить [...], автоматически вызывают Post" в конце метода , которыйне тот случай по той причине, о которой я говорил.Что следует сказать, imo, так это то, что, как и в случае с такими методами навигации, как First, Last, Next и Prior, эти методы будут начинаться с автоматического вызова при необходимости Post для текущей записи до остальныхметода выполняется.Это потому, что эти методы всегда вызывают CheckBrowseMode
в качестве первого шага и содержат код
procedure TDataSet.CheckBrowseMode;
begin
CheckActive;
DataEvent(deCheckBrowseMode, 0);
case State of
dsEdit, dsInsert:
begin
UpdateRecord;
if Modified then Post else Cancel;
end;
dsSetKey:
Post;
end;
end;