Транзакция. Влияние транзакций на обновления (ODBC)
Управление обновлениями источника данных осуществляется в процессе транзакций посредством использования буфера изменения (тот же метод применяется вне транзакций).Члены данных поля в наборе записей служат в качестве буфера изменений, содержащего текущую запись, резервную копию которой набор записей временно создает в ходе операции AddNew или Edit.В ходе операции Delete резервная копия текущей записи не создается.Подробные сведения о буфере изменений и о том, как обновления сохраняют текущую запись, см. в разделе Набор записей. Обновление записей наборами записей (ODBC).
Примечание |
---|
Если реализована массовая выборка строк, вызвать операторы AddNew, Edit или Delete невозможно.Вместо этого можно написать собственные функции для выполнения обновлений источника данных.Дополнительные сведения о групповой выборке строк см. в разделе Набор записей. Групповая выборка строк (ODBC). |
В ходе транзакций может быть выполнена фиксация или откат операций AddNew, Edit и Delete.Выполнение функций CommitTrans и Rollback может привести к тому, что текущая запись не будет сохранена в буфере изменений.Чтобы текущая запись была сохранена должным образом, важно понимать, как функции-члены CommitTrans и Rollback класса CDatabase работают с функциями обновления класса CRecordset.
В представленной ниже таблице поясняется влияние CommitTrans на транзакции.
Влияние функции CommitTrans на обновления
Операция |
Состояние источника данных |
---|---|
AddNew и Update, а затем CommitTrans |
Добавление новой записи в источник данных |
AddNew (без Update), а затем CommitTrans |
Потеря новой записи.Запись не добавлена в источник данных. |
Edit и Update, а затем CommitTrans |
Изменения источника данных зафиксированы. |
Edit (без Update), а затем CommitTrans |
Изменения записи потеряны.Запись в источнике данных остается без изменений. |
Delete, а затем CommitTrans |
Запись удалена из источника данных. |
В представленной ниже таблице поясняется влияние функции Rollback на транзакции.
Влияние функции Rollback на транзакции
Операция |
Состояние текущей записи |
Дополнительные действия, которые требуется выполнить |
Состояние источника данных |
---|---|---|---|
AddNew и Update, а затем Rollback |
Содержимое текущей записи временно сохраняется для освобождения места для новой записи.Новая запись вводится в буфер изменений.После вызова Update текущая запись восстанавливается в буфере изменений. |
|
Добавление данных к источнику данных, выполненное с помощью функции Update, отменяется. |
AddNew (без Update), а затем Rollback |
Содержимое текущей записи временно сохраняется для освобождения места для новой записи.Буфер изменений содержит новую запись. |
Вызовите операцию AddNew снова для восстановления в буфере изменений в состоянии пустой новой записи.Или же вызовите операцию Move(0) для восстановления прежних значений буфера изменений. |
Поскольку операция Update не была вызвана, в источник данных изменения не вносились. |
Edit и Update, а затем Rollback |
Временно сохраняется неизмененная версия текущей записи.Изменения вносятся в содержимое буфера изменений.После вызова операции Update неизмененная версия записи остается в расположении временного хранения. |
Dynaset: прокрутка текущей записи и восстановление неизмененной версии записи в буфере изменений. Snapshot: вызов операции Requery для обновления набора записей из источника данных. |
Изменение данных в источнике данных, выполненное с помощью Update, отменяется. |
Edit (без Update), а затем Rollback |
Временно сохраняется неизмененная версия текущей записи.Изменения вносятся в содержимое буфера изменений. |
Вызовите Edit снова для восстановления неизмененной версии записи в буфере изменений. |
Поскольку операция Update не была вызвана, в источник данных изменения не вносились. |
Delete, а затем Rollback |
Удаление содержимого текущей записи. |
Вызовите Requery для восстановления текущей записи из источника данных. |
Отмена удаления данных из источника данных. |