Блокировка таблицы



Блокировка таблицы

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

FLOCK([рабочаяОбласть] | [псевдонимТаблицы])

Функция блокировки проверяет текущий статус рабочей области или таблицы. Если в результате теста определяется, что таблица не заблокирована, она блокируется, и пользователь может продолжать с ней работать. Функция при этом возвращает логическое значение .т. (Истина) и таблица становится доступной пользователю, выполнившему блокировку, на чтение и запись. Остальным пользователям таблица базы данных доступна только на чтение. Если таблица уже заблокирована другим пользователем, заблокировать таблицу не удается и функция возвращает значение .f. (Ложь). Для блокировки таблицы в текущей области псевдоним можно не указывать.

В приведенном ниже примере для блокировки таблицы customer используется команда flocko. Если таблица успешно заблокирована, команда replace all обновляет все записи в ней. После этого команда unlock снимает блокировку файла. Если файл невозможно заблокировать (такая ситуация возникает, если файл уже заблокирован другим пользователем), появится сообщение об ошибке.

SET EXCLUSIVE OFF

SET REPROCESS TO 0

USE Customer IF FLOCK()

REPLACE ALL cLastName WITH UPPER(cLastName)

UNLOCK

ELSE

WAIT "Файл занят, подождите" WINDOW NOWAIT

ENDIF

Если вы редактируете две или более связанных командой set relation таблиц, вам необходимо блокировать каждую связанную таблицу самостоятельно, так как блокировка одной из связанных таблиц не блокирует связанные с ней таблицы. Возможны ситуации, когда вы изменяете данные только в одной таблице, а другие используются для отображения дополнительной информации и их не требуется блокировать.





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