Команда BEGIN TRANSACTION

Начинает транзакцию.

Синтаксис:
BEGIN TRANSACTION

Комментарии:
Транзакции поддерживаются только для таблиц базы данных. О создании таблиц и добавлении их в базы данных см. описания команд CREATE DATABASE и ADD TABLE.
Чтобы сохранить все изменения и закончить транзакцию, выдайте команду END TRANSACTION. Если транзакция завершается неудачно (из-за аварии сервера или рабочей станции или при выходе из Visual FoxPro без фиксации транзакции) или если выдана команда ROLLBACK, восстанавливается первоначальное содержимое файла (файлов) транзакции.
Транзакции могут иметь пять уровней вложенности. Если попытаться создать шестой уровень вложенности, будет сгенерирована ошибка.
При изменении в базе данных записей, являющихся частью транзакции, остальные пользователи сети не имеют к ним доступа ни по чтению, ни по записи до окончания транзакции.
При попытках других пользователей сети получить доступ к записям, которые вы изменили, они будут получать сообщение "Record not available ... please wait" до тех пор, пока транзакция не будет завершена и записи не станут доступными. Поэтому важно свести длину транзакции к минимуму либо постараться провести ее в то время, когда другим пользователям доступ к записям не потребуется.
Следующие команды и функции не поддерживаются во время транзакции:

APPEND PROCEDURES		CREATE SQL VIEW
CLEAR ALL			DELETE CONNECTION
CLOSE ALL (1) 		DELETE DATABASE
CLOSE DATABASES (1) 	DELETE TRIGGER
COPY INDEXES		DELETE VIEW
COPY PROCEDURES		MODIFY CONNECTION
CREATE CONNECTION		MODIFY DATABASE
CREATE DATABASE		MODIFY PROCEDURE
CREATE TRIGGER		MODIFY VIEW
CREATE VIEW		REQUERY( )

Если команда CLOSE ALL введена во время транзакции, все таблицы в открытых базах данных закрываются. Однако сама база данных остается открытой. Ввод команды CLOSE DATABASES во время транзакции закрывает все таблицы, но база данных остается открытой.
Кроме того, перечисленные ниже команды и функции нельзя выдавать для конкретной таблицы, участвующей в транзакции:

ALTER TABLE	PACK
CREATE TABLE	REINDEX
DELETE TAG	SETCURSORPROP( )
INDEX		TABLEREVERT( )
INSERT		ZAP
MODIFY 		STRUCTURE	

Пример:

* В следующем примере открывается таблица customer в базе данных
* testdata. Для начала транзакции используется команда BEGIN
* TRANSACTION. На экран выводится содержимое полей cust_id и company;
* содержимое поля company заменяется. Показывается новое содержимое
* поля, затем используется команда ROLLBACK, чтобы восстановить
* первоначальное состояние поля company. В заключение, содержимое
* полей cust_id и company выводится на экран, причем поле company
* содержит первоначальные значения.
OPEN DATABASE (HOME( ) + 'samples\data\testdata.dbc')
BEGIN TRANSACTION
	USE customer	&& Transactions only supported within a DBC
	CLEAR
	LIST FIELDS cust_id, company NEXT 20
	WAIT WINDOW 'Press a key to change the company field'
	REPLACE ALL company WITH '***'  && Change field contents
	CLEAR
	GO TOP
	LIST FIELDS cust_id, company NEXT 20
	WAIT WINDOW 'Press a key to restore the company field'
ROLLBACK	&& Restores original field contents
CLEAR
GO TOP
LIST FIELDS cust_id, company NEXT 20
WAIT WINDOW 'Press a key to exit'
CLEAR
CLOSE ALL

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 24.11.2002