martes, 4 de abril de 2017

ROLLBACK (Comando)


Cancela los cambios realizados durante la transacción actual.

Observaciones

ROLLBACK restaura el estado en que se encontraban las tablas originales, los archivos memo de tablas y los archivos de índice antes de que comenzara la transacción.
Cuando se modifican registros de una base de datos que forma parte de una transacción, los demás usuarios de la red no tendrán acceso (lectura ni escritura) a los registros hasta que finalice la transacción.
Cuando otros usuarios de la red intenten tener acceso a los registros que usted ha modificado, deberán esperar hasta que usted finalice su transacción. Recibirán el mensaje "Registro no disponible... Espere" hasta que los registros estén disponibles. Por lo tanto, es importante que la duración de la transacción sea lo más breve posible o que realice la transacción a horas en las que otras personas no necesiten tener acceso a los registros.
ROLLBACK deshace los cambios efectuados durante la transacción actual. Si la transacción está anidada, sólo se desharán las modificaciones realizadas desde el anterior BEGIN TRANSACTION. La ejecución del programa continuará con la instrucción siguiente.
Si había algún bloqueo de registro o archivo, se liberará.

Ejemplo

En el siguiente ejemplo se abre la tabla customer de la base de datos testdata. Se establece el almacenamiento optimista en tablas para la tabla customer. Se muestra el contenido de los campos cust_id y company, y se reemplaza el contenido del campo company en los datos almacenados en búfer.
Se ejecuta BEGIN TRANSACTION para iniciar una transacción. Se ejecuta TABLEUPDATE para escribir los cambios en una tabla. Se muestra el nuevo contenido y se ejecuta ROLLBACK para restaurar el contenido original del campo company. Los campos cust_id y company se vuelven a mostrar con el campo company que contiene los valores originales.

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

No hay comentarios:

Publicar un comentario