BEGIN TRANSACTION (Comando)

Inicia una transacción. Las transacciones sólo se admiten para tablas de una base de datos. Vea CREATE DATABASE y ADD TABLE para obtener información acerca de cómo puede crear y agregar tablas a una base de datos.

BEGIN TRANSACTION

Observaciones

Para guardar los cambios realizados y finalizar la transacción, ejecute END TRANSACTION. Si la transacción falla (el servidor se estropea, la estación de trabajo falla o sale de Visual FoxPro sin ejecutar la transacción) o si ejecuta ROLLBACK, los archivos de la transacción se restaurarán a su estado original.

Las transacciones se pueden anidar hasta cinco niveles como máximo. Se generará un error si intenta anidarlas en un sexto nivel.

Cuando modifique registros de una base de datos que forman parte de una transacción, otros usuarios de la red no tendrán acceso (lectura o escritura) a los registros hasta que usted 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.

Los siguientes comandos y funciones no se admiten durante una transacción:

Comandos y funciones  
ADD TABLE DELETE CONNECTION
APPEND PROCEDURES DELETE DATABASE
CLEAR ALL DELETE TRIGGER
CLOSE ALL1 DELETE VIEW
CLOSE DATABASES1 MODIFY CONNECTION
COPY INDEXES MODIFY DATABASE
COPY PROCEDURES MODIFY PROCEDURE
CREATE CONNECTION MODIFY VIEW
CREATE DATABASE REMOVE TABLE
CREATE TRIGGER RENAME TABLE
CREATE VIEW REQUERY( )
CREATE SQL VIEW  

1 Si se ejecuta CLOSE ALL mientras tiene lugar una transacción, se cierran todas las tablas de todas las bases de datos abiertas. Sin embargo, la base de datos permanece abierta. Al ejecutar CLOSE DATABASES en una transacción se cierran todas las tablas de la base de datos actual, pero la base de datos permanece abierta.

Además, no se permite ejecutar los siguientes comandos y funciones para una tabla específica que participe en una transacción:

Comandos y funciones  
ALTER TABLE MODIFY STRUCTURE
CREATE TABLE PACK
CURSORSETPROP( ) REINDEX
DELETE TAG TABLEREVERT( )
INDEX ZAP
INSERT  

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. La función TABLEUPDATE( ) se utiliza para escribir los cambios en la 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.

CLEAR
CLOSE DATABASES

* 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

Vea también

END TRANSACTION | ROLLBACK | TXNLEVEL( ) (Función)