Базы данных Visual Foxpro

         

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

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

FLOCK([псевдонимТаблицы])



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

В приведенном ниже примере для блокировки таблицы customer используется команда FLOCK (). Если таблица успешно заблокирована, команда 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 таблиц, вам необходимо блокировать каждую связанную таблицу самостоятельно, т. к. блокировка одной из связанных таблиц не блокирует связанные с ней таблицы. Возможны ситуации, когда вы изменяете данные только в одной таблице, а другие используются для отображения дополнительной информации и их не требуется блокировать.

 

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