Начинает транзакцию. Транзакции поддерживаются только для таблиц в базе данных. См. CREATE DATABASE и ADD TABLE для информации относительно того, как создавать и добавлять таблицы к базе данных.

BEGIN TRANSACTION

Замечания

Чтобы сохранять любые сделанные Вами изменения и завершить транзакцию, примените END TRANSACTION. Если происходит сбой выполнения транзакции (сбои сервера, сбои рабочей станции, или Вы выходите из Visual FoxPro без подтверждения транзакции) или если Вы применяете ROLLBACK, то файл или файлы участвующие в транзакции восстанавливаются в их первоначальное состояние.

Транзакции могут быть вложены на глубину до пяти уровней. Ошибка будет генерироваться, если Вы сделаете попытку вложения шестого уровня.

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

Когда другие пользователи в сети пробуют обратиться к записям, которые Вы изменили, они должны ждать, пока Вы не закончите вашу транзакцию. Они будут получать сообщение "Запись не доступна ..., пожалуйста ждите" до тех пор, пока записи не станут доступными. По этой причине, важно свести время транзакции к минимуму или провести транзакцию в течение того времени, когда другие не нуждаются в доступе.

Все индексные файлы IDX (неструктурные или non-CDX индексы) должны быть закрыты в течение транзакций. Только структурные индексы поддерживаются при выполнении транзакций.

Следующие команды и функции не поддерживаются при выполнении транзакции:

Команды и функции

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, если применяется CLOSE ALL в то время как происходит транзакция, все таблицы во всех открытых базах данных закрываются. Однако, базы данных остаются открытыми. Применение CLOSE DATABASES во время транзакции закрывает все таблицы в текущей базе данных, но база данных остается открытой.

Также, следующие команды и функции не могут использоваться для указанной таблицы, участвующей в транзакции:

Команды и функции

ALTER TABLE

MODIFY STRUCTURE

CREATE TABLE

PACK

CURSORSETPROP ()

REINDEX

DELETE TAG

TABLEREVERT ()

INDEX

ZAP

INSERT

Пример

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

Применяется BEGIN TRANSACTION чтобы запустить транзакцию. Функция TABLEUPDATE( ) используется, чтобы записать изменения в таблицу. Отображается новое содержание и применяется ROLLBACK для восстановления первоначального содержания поля company . Снова отображаются поля cust_id и company с полем company , содержащим свои первоначальные значения.

Скопировать код
CLEAR
CLOSE DATABASES
* Транзакции поддерживаются только в пределах DBC
OPEN DATABASE (HOME(2) + 'Data\testdata')
SET MULTILOCKS ON && Требование для буферизации
USE customer
=CURSORSETPROP("Buffering",5)
? 'Первоначальное поле company'
LIST FIELDS cust_id, company NEXT 5
REPLACE ALL company WITH "***" && Замените содержание полей
=TABLEUPDATE(.T.) GO TOP ? 'Модифицированное поле company' LIST FIELDS cust_id, company NEXT 5 ROLLBACK && Восстановите первоначальное содержание полей =TABLEREVERT(.T.) GO TOP ? 'Восстановленное поле company' LIST FIELDS cust_id, company NEXT 5

См. Также