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

FLOCK([nWorkArea | cTableAlias])

Параметры

nWorkArea

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

cTableAlias

Задает псевдоним таблицы, которую FLOCK( ) пытается блокировать.

NoteПримечание

Если задан несуществующий псевдоним таблицы, Visual FoxPro генерирует сообщение об ошибке.

Expand imageВозвращаемое значение

Logical. Если таблица успешно заблокирована, функция FLOCK( ) возвращает значение "истина" (.T.); в противном случае будет возвращено значение "ложь" (.F.) по следующим причинам:

  • Таблица или какая-либо запись в таблице уже заблокированы другим пользователем.

  • В указанной рабочей области нет открытых таблиц

NoteПримечание

Если функция FLOCK( ) не сможет блокировать таблицу, она возвратит "ложь" (.F.) и не будет генерировать ошибку. Поэтому с ее помощью не удастся запустить программу обработки ошибок ON ERROR.

Expand imageЗамечания

Когда таблица блокирована, она становится доступной для чтения и записи только пользователю, установившему блокировку. Остальным пользователям таблица доступна только для чтения. Для более подробной информации о том, как блокировать таблицу и запрещать к ней доступ со стороны других пользователей, смотрите Команда SET EXCLUSIVE и Команда USE.

Таблица останется заблокированной до тех пор, пока пользователь, установивший блокировку, не снимет ее. Таблица может быть разблокирована командой UNLOCK, закрытием таблицы или выходом из Visual FoxPro. Закрыть таблицу можно командами USE, CLEAR ALL, или CLOSE DATABASES.

По умолчанию функция FLOCK( ) предпринимает только одну попытку блокировки таблицы. Используйте команду SET REPROCESS для автоматического повторения попытки блокировки таблицы, если первая попытка окончится неудачей. SET REPROCESS определяет общее количество таких попыток или интервал времени, в течение которого попытки блокировки будут возобновляться в случае неудачной первой попытки. Для более подробной информации смотрите Команда SET REPROCESS.

Можно установить отношения между несколькими таблицами, используя команду SET RELATION. Если таблица, связанная с одной или несколькими другими таблицами, заблокирована, блокировки связанных таблиц не происходит. Вы должны устанавливать (а также снимать) с них блокировку явным образом.

Подробнее о блокировке записей и файлов и о совместном использовании таблиц в сети смотрите Программирование совместного доступа.

Expand imageПример

  CopyCode imageСкопиовать код
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

Expand imageСмотрите также