Документация по Clarion

       

LOGOUT (начать транзакцию)



LOGOUT(таймаут,файл[,файл,...,файл])


таймаут Числовая константа или переменная, задающая сколько секунд пытаться начать транзакцию для файла(ов), прежде чем прервать ее и вернуть ошибку.
файл Метка файла. Можно задать сразу несколько параметров ФАЙЛ, разделенных запятыми. Должны быть перечислены все файлы, участвующие в транзакции.

Оператор LOGOUT начинает обработку транзакции для заданного файла или набора файлов. Все задействованные файлы должны работать с одним и тем же файловым драйвером. LOGOUT сообщает драйверу о начале транзакции. Драйвер, в свою очередь, выполняет действия, необходимые в его файловой системе для начала обработки транзакции в заданном наборе файлов. Если файловая система требует, чтобы файлы были заблокированы перед началом транзакции, то LOGOUT автоматически блокирует их (для этого и нужен ТАЙМАУТ).
Только одна транзакция, инициированная через LOGOUT, может выполняться одновременно. Второй LOGOUT (без предварительного COMMIT или ROLLBACK) останавливает программу с сообщением об ошибке и вываливается в DOS.
Возвращаемые ошибки:
32 Файл уже заблокирован
Пример:
LOGOUT(,1,OrderHeader,OrderDetail) !Начинаем транзакцию


DO ErrHandler ! нет ли ошибок?
ADD(OrderHeader) !Добавим запись о родителе
DO ErrHandler ! нет ли ошибок?
LOOP X# = 1 TO RECORDS(DetailQue)
!Обработка сохраненных подробностей
GET(DetailQue,X#) !Читаем одну из очереди
DO ErrHandler ! нет ли ошибок?
Det:Record = DetailQue !Помещаем в буфер записи
ADD(OrderDetail) ! и добавляем ее в файл
DO ErrHandler ! нет ли ошибок?
.
COMMIT !Завершаем успешную транзакцию
ErrHandler ROUTINE !Обработчик ошибок
IF NOT ERRORCODE() THEN EXIT. !Ошибок нет? Вернемся.
ROLLBACK !Отмена прерванной транзакции
BEEP !Предупреждаем пользователя
SHOW(25,1,'Ошибка транзакции - ' & ERROR())
ASK ! и ждем нажатия клавиши
RETURN ! затем возвращаемся
См. также: ,



Содержание раздела