Подтверждение кэшированных изменений методом ApplyUpdates набора данных
Метод компонентов TTable, TQuery, TStoredProc
procedure ApplyUpdates;
применяется для подтверждения кэшированных изменений отдельного НД. Отсутствие ошибок при выполнении метода гарантирует успешность операции подтверждения.
Метод компонентов TTable, TQuery, TStoredProc
procedure CommitUpdates;
применяется для обновления в БД кэшированных изменений, успешно подтвержденных методом ApplyUpdates.
Двухфазное подтверждение в случае использования методов ApplyUpdates и CommitUpdates необходимо реализовывать явно.
Пример.
Пусть требуется подтвердить кэшированные изменения НД Tovary и Rashod. В случае неудачи необходимо откатить кэшированные изменения:Databasel.StartTransaction;
TRY
Tovary.ApplyUpdates ;
Rashod.ApplyUpdates;
Databasel.Commit;
Tovary.CommitUpdates;
Rashod.CommitUpdates ;
EXCEPT
Databasel.Rollback;
ShowMessage('Изменения могут привести к нарушению ' + 'целостности БД. Изменения отменены!' );
Tovary.CancelUpdates ;
Rashod.CancelUpdates ;
END;//try
В случае сбоя при выполнении Tovary.Apply Updates или Rashod.ApplyUpdates не произойдет подтверждения транзакции (Database]. Commit) и подтверждения кэшированных изменений для каждой из таблиц; значения измененных записей будут восстановлены в значения, имевшие место до изменений (Tovary.CancelUpdates, Tovary. CancelUpdates).
Часто важно, чтобы даже в случае неудачной попытки запомнить изменения, значения измененных записей не менялись - например, для того чтобы пользователь мог внести коррективы и попытаться снова подтвердить изменения. В этом случае из кода необходимо убрать вызов метода CancelUpdates:
Database1.StartTransaction;
TRY
Tovary.ApplyUpdates ;
Rashod.ApplyUpdates;
Databasel.Commit;
Tovary.CommitUpdates;
Rashod.CommitUpdates ;
EXCEPT
Databasel.Rollback;
ShowMessage('Изменения могут привести к нарушению ' + 'целостности БД. Изменения отменены!' );
END;//try