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