Отменяет все изменения, внесенные в ходе текущей транзакции.

ROLLBACK

Expand imageПримечания

Команда ROLLBACK восстанавливает исходное состояние таблиц, табличных memo-файлов и файлов индексов, в котором они находились в момент начала транзакции.

Когда вы модифицируете записи в базе данных, являющейся частью транзакции, остальные пользователи сети лишаются доступа к этим записям (по чтению и по записи) до тех пор, пока вы не закончите транзакцию.

Если другие пользователи сети попытаются обратиться к записям, которые вы модифицируете, им придется подождать до завершения вашей транзакции. Тем временем они будут получать сообщение "Record not available ... please wait". Поэтому старайтесь, чтобы транзакция была минимальной длины или выполнялась в такое время, когда никто не собирается обращаться к записям.

Команда ROLLBACK аннулирует все изменения, внесенные в ходе текущей транзакции. Если транзакция является вложенной, отменяются только модификации, сделанные с момента выдачи предшествующей команды BEGIN TRANSACTION. Выполнение программы продолжается со следующего оператора.

Если была установлена блокировка каких-либо записей или файлов, она снимается.

Expand imageПример

В следующем примере открывается таблица customer в базе данных testdata. Устанавливается оптимистическая буферизация для таблицы customer. Содержимое полей cust_id и company выводится на екран, после чеко содержимое поля company заменяется данными из буфера.

Команда BEGIN TRANSACTION выдается для начала транзакции. Команда TABLEUPDATE для сохранения изменений в таблице. Новое содержимое выводится на экран, после чего команда ROLLBACK выводится для востановления начальное значение поля company. Поля cust_id и company выводятся вновь на экран но поле company содержит начальное значение.

  CopyCode imageCopy Code
CLOSE DATABASES
CLEAR

* Transactions are only supported within a DBC
OPEN DATABASE (HOME(2) + 'Data\testdata')

SET MULTILOCKS ON      && Required for buffering

USE customer
=CURSORSETPROP("Buffering",5)
? 'The original company field'
LIST FIELDS cust_id, company NEXT 5
REPLACE ALL company WITH "***" && Change field contents

BEGIN TRANSACTION
   =TABLEUPDATE(.T.)
   GO TOP
   ? 'The modified company field'
   LIST FIELDS cust_id, company NEXT 5
ROLLBACK           && Restore original field contents

=TABLEREVERT(.T.)
GO TOP
? 'The restored company field'
LIST FIELDS cust_id, company NEXT 5

Expand imageСмотрите также