DropDown image DropDownHover image Collapse image Expand image CollapseAll image ExpandAll image Copy image CopyHover image

Выполняется попытка блокировки записи или записей таблицы.

RLOCK([nWorkArea | cTableAlias] | [cRecordNumberList, nWorkArea
 | cTableAlias])

Параметры

nWorkArea| cTableAlias

Определяет номер рабочей области или алиас таблицы, открытой в другой рабочей области. Если данный параметр не задан, функция RLOCK( ) выполняет попытки блокировки записей в текущей рабочей области.

cRecordNumberList

Определяет список номеров записей, для которых функция RLOCK( ) выполняет попытки блокировки. Символьное выражение  cRecordNumberList определяет один или несколько номеров записей, разделенных запятой. Например, для блокировки первых четырех записей в таблице достаточно указать в параметре cRecordNumberList следующий текст "1, 2, 3, 4".

Для блокировки нескольких записей Вы можете использовать установки команды SET MULTILOCKS on , и указать соответственно номер рабочей области  (nWorkArea) или имя алиаса (cTableAlias) для таблицы, записи которой должны быть заблокированы.

Вы можете также выполнять блокировку нескольких записей перемещая указатель записи и вызывая последовательно функции RLOCK( ) или LOCK( ) для каждой записи.

В системе Visual FoxPro, вы можете в качестве номера записи указывать 0. В этом случае блокируется заголовок таблицы.

Caution noteПредупреждение

Блокировка заголовка таблицы на короткое время сохраняет последний от изменений, которые могут быть выполнены другими пользователями, например, пользователи не могут добавить новые записи.

Снятие блокировки заголовка таблицы выполняется командами: UNLOCK RECORD 0, UNLOCK, или UNLOCK ALL.

Если все записи, указанные в списке номеров cRecordNumberList успешно заблокированы, функция RLOCK( ) возвращает значение = true (.T.). Если одна или несколько записей не блокируется, RLOCK( ) возвращает = false (.F.) и записи деблокируются. В любом случае, остальные записи остаются блокированными. Множественная блокировка записей является аддитивным процессом, который не отменяет блокировку уже заблокированных записей. 

Для стратегии использования: блокировка всей таблицы осуществляется гораздо быстрее, чем блокировка небольшого количества записей.

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

Типа Logical

Expand imageКомментарии

Функции RLOCK( ) и LOCK( ) являются синонимами.

Изменения явно блокированных записей не сохраняются до момента их деблокирования или перемещения указателя записи. 

Если блокировка или блокировки успешно выполнены, RLOCK( ) возвращает значение = true (.T.). Блокированные записи доступны для чтения/записи "хозяину" данных блокировок, для остальных пользователей эти записи доступны в режиме "только-чтение"

Выполнение функции RLOCK( ) не гарантирует успешной блокировки записей. Блокировка записи не завершается пока запись блокируется другим пользователем, или вся таблица блокируется. Если блокировка записей не выполняется по различным причинам, функция  RLOCK( ) возвращает значение = false (.F.).

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

Команда SET MULTILOCKS определяет, можете ли Вы блокировать несколько записей таблицы. Если SET MULTILOCKS установлено off (по-умолчанию), Вы можете заблокировать в таблице только одну запись. Если SET MULTILOCKS установлено on, Вы можете блокировать несколько записей. См. дополнительно SET MULTILOCKS.

Записи таблицы могут быть разблокированы только пользователем, начавшим процесс блокирования. Записи разблокируются при: выполнении команды UNLOCK, закрытии таблицы, или завершении работы Visual FoxPro.

Команда UNLOCK может быть использована для разблокирования записей в текущей рабочей области, в указанной рабочей области, во всех рабочих областях. См. дополнительно команда UNLOCK.

Переключение SET MULTILOCKS ON -> OFF или OFF -> ON подразумевает выполнение UNLOCK ALL. Блокировки всех записей во всех областях снимаются.

Для закрытия таблицы используйте команды: USE, CLEAR ALL, или CLOSE DATABASES.

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

Expand imageПример

В следующем примере блокируется и деблокируется по 4-е записи в таблицах customer и employee .

  CopyCode imageКопировать Код
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
SET REPROCESS TO 3 AUTOMATIC
STORE '1,2,3,4' TO gcRecList
gcOldExc = SET('EXCLUSIVE')
SET EXCLUSIVE OFF
SELECT 0
USE employee && Open Employee table
SELECT 0
USE customer && Open Customer table
? LOCK('1,2,3,4', 'customer') && Lock 1st 4 records in customer
? RLOCK(gcRecList, 'employee') && Lock 1st 4 records in employee
UNLOCK IN customer
UNLOCK IN employee
SET EXCLUSIVE &gcOldExc

Expand imageСм. также