Функция FLOCK()

Пытается заблокировать текущую или заданную таблицу.

Синтаксис:

FLOCK([nWorkArea | cTableAlias])

Параметры:
nWorkArea
Задает рабочую область таблицы, которую функция FLOCK( ) пытается блокировать.
Если в заданной рабочей области нет открытых таблиц, FLOCK( ) возвращает значение "ложь" (.F.).
cTableAlias
Задает псевдоним таблицы, которую FLOCK( ) пытается блокировать.
Если задан несуществующий псевдоним таблицы, Visual FoxPro генерирует сообщение об ошибке.

Результат:
Логический.

Комментарии:
Если таблица успешно заблокирована, функция FLOCK( ) возвращает значение "истина" (.T.), если же таблица или какая-либо ее запись уже блокированы другим пользователем, возвращается значение "ложь" (.F.).
Если выдать функцию FLOCK( ) без аргументов, она попытается блокировать таблицу, открытую в выбранной в данный момент рабочей области.
Замечание. Если функция FLOCK( ) не сможет блокировать таблицу, она возвратит "ложь" (.F.) и не будет генерировать ошибку. Поэтому с ее помощью не удастся запустить программу ON ERROR.
Когда таблица блокирована, она становится доступной для чтения и записи только пользователю, установившему блокировку. Остальные пользователи сети имеют к таблице доступ только по чтению. О том, как блокировать таблицу и запрещать к ней доступ со стороны других пользователей, см. описание команд SET EXCLUSIVE и USE.
Таблица останется заблокированной до тех пор, пока пользователь, установивший блокировку, не снимет ее. Чтобы снять блокировку, нужно выдать команду UNLOCK, закрыть таблицу или выйти из Visual FoxPro. Таблицы закрываются командой USE, CLEAR ALL или CLOSE DATABASES.
По умолчанию функция FLOCK( ) предпринимает только одну попытку блокировки таблицы. Команда SET REPROCESS позволяет задать автоматический повтор попытки блокировки, если первая попытка окончится неудачей. SET REPROCESS определяет общее число таких попыток или интервал времени, в течение которого попытки блокировки будут возобновляться в случае неудачной начальной попытки. Подробнее об этом см. SET REPROCESS.
Можно установить отношения между несколькими таблицами, используя команду SET RELATION. Если на файл таблицы, связанной с одной или несколькими другими таблицами, установлена блокировка, она не распространяется на связанные таблицы: их следует блокировать (а также снимать блокировку) явным образом.
Подробнее о блокировке записей и файлов и о совместном пользовании таблицами в сети см. главу 19 "Программирование совместного доступа к данным" Руководства разработчика.

Пример:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products	&& Opens products table
SET REPROCESS TO 3 SECONDS
SELECT * FROM products INTO TABLE newprods

IF FLOCK( )
	*** New product initialization ***
	REPLACE ALL in_stock  WITH 0.00
	REPLACE ALL on_order WITH 0.00
	WAIT 'Initialization Complete' WINDOW NOWAIT
ELSE
	*** File is locked, warn user ***
	WAIT WINDOW 'Unable to open products file; try again later!' NOWAIT
ENDIF

BROWSE FIELDS in_stock, on_order	&& Displays newprods table
USE
ERASE newprods.dbf

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 18.01.2003