Начинает транзакцию.
Синтаксис:
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