Пытается заблокировать текущую или заданную таблицу.
FLOCK([nWorkArea | cTableAlias]) |
Параметры
- nWorkArea
-
Задает рабочую область таблицы, которую функция FLOCK( ) пытается блокировать. Если параметры nWorkArea или cTableAlias опушены функция FLOCK( ) пытается заблокировать таблицу, открытую в текущей рабочей области.
- cTableAlias
-
Задает псевдоним таблицы, которую FLOCK( ) пытается блокировать.
Примечание
Если задан несуществующий псевдоним таблицы, Visual FoxPro генерирует сообщение об ошибке.
Возвращаемое значение
Logical. Если таблица успешно заблокирована, функция FLOCK( ) возвращает значение "истина" (.T.); в противном случае будет возвращено значение "ложь" (.F.) по следующим причинам:
-
Таблица или какая-либо запись в таблице уже заблокированы другим пользователем.
-
В указанной рабочей области нет открытых таблиц
![]() |
---|
Если функция FLOCK( ) не сможет блокировать таблицу, она возвратит "ложь" (.F.) и не будет генерировать ошибку. Поэтому с ее помощью не удастся запустить программу обработки ошибок ON ERROR. |
Замечания
Когда таблица блокирована, она становится доступной для чтения и записи только пользователю, установившему блокировку. Остальным пользователям таблица доступна только для чтения. Для более подробной информации о том, как блокировать таблицу и запрещать к ней доступ со стороны других пользователей, смотрите Команда SET EXCLUSIVE и Команда USE.
Таблица останется заблокированной до тех пор, пока пользователь, установивший блокировку, не снимет ее. Таблица может быть разблокирована командой UNLOCK, закрытием таблицы или выходом из Visual FoxPro. Закрыть таблицу можно командами USE, CLEAR ALL, или CLOSE DATABASES.
По умолчанию функция FLOCK( ) предпринимает только одну попытку блокировки таблицы. Используйте команду SET REPROCESS для автоматического повторения попытки блокировки таблицы, если первая попытка окончится неудачей. SET REPROCESS определяет общее количество таких попыток или интервал времени, в течение которого попытки блокировки будут возобновляться в случае неудачной первой попытки. Для более подробной информации смотрите Команда SET REPROCESS.
Можно установить отношения между несколькими таблицами, используя команду SET RELATION. Если таблица, связанная с одной или несколькими другими таблицами, заблокирована, блокировки связанных таблиц не происходит. Вы должны устанавливать (а также снимать) с них блокировку явным образом.
Подробнее о блокировке записей и файлов и о совместном использовании таблиц в сети смотрите Программирование совместного доступа.
Пример
![]() | |
---|---|
CLOSE DATABASES OPEN DATABASE (HOME(2) + '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 |