Оператор begin work используется для того, чтобы начать транзакцию по указанным таблицам. Можно начинать несколько транзакций, если в этих транзакциях задействованы различные таблицы. Каждая транзакция должна производиться по своим таблицам и должна иметь уникальное имя в рамках одного пользователя. Разные пользователи могут начинать транзакции с одинаковыми именами.
Таблицы, участвующие в транзакции, должны быть предварительно открыты (например, операторами open table, create table или операторами select, insert, delete, update).
Формат оператора:
begin work Имя_транзакции
table Таблица1,...;
Аргументы:
| Аргумент
| Значение
|
| Имя_транзакции
| Имя транзакции должно начинаться с буквы или символа «подчеркивания» и может содержать буквы, цифры и символ «подчеркивания». Имя транзакции не должно совпадать с любой другой активной транзакцией данного пользователя. У разных пользователей имена транзакций могут совпадать.
|
| Таблица
| Имя таблицы, которая должна быть включена в транзакцию. В списке перечисляются все таблицы, для которых необходимо обеспечить согласованное изменение информации.
|
После выполнения оператора begin work необходимо проверить код ошибки, т. к. транзакция по ряду причин может не начаться (например, из-за долго занятого ресурса).
begin work m_w1 table BOOK;
if (lastsqlerr() !=0)
{
quit;
}
После начала транзакции начинается отслеживание всех изменений, происходящих в указанных таблицах. Эти изменения «невидимы» для других пользователей, пока не выполнится оператор commit work. Для пользователя эти изменения видны сразу, использовать снимки (оператор fix) в рамках транзакции не надо.