Выполняется попытка блокировки записи или записей таблицы.
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. В этом случае блокируется заголовок таблицы.
Предупреждение
Блокировка заголовка таблицы на короткое время сохраняет последний от изменений, которые могут быть выполнены другими пользователями, например, пользователи не могут добавить новые записи.
Снятие блокировки заголовка таблицы выполняется командами: UNLOCK RECORD 0, UNLOCK, или UNLOCK ALL.
Если все записи, указанные в списке номеров cRecordNumberList успешно заблокированы, функция RLOCK( ) возвращает значение = true (.T.). Если одна или несколько записей не блокируется, RLOCK( ) возвращает = false (.F.) и записи деблокируются. В любом случае, остальные записи остаются блокированными. Множественная блокировка записей является аддитивным процессом, который не отменяет блокировку уже заблокированных записей.
Для стратегии использования: блокировка всей таблицы осуществляется гораздо быстрее, чем блокировка небольшого количества записей.
Возвращаемое Значение
Типа Logical
Комментарии
Функции 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.
Для дополнительной информации о блокировании записей в сети см. раздел Программирование Коллективного доступа к данным.
Пример
В следующем примере блокируется и деблокируется по 4-е записи в таблицах customer
и employee
.
![]() | |
---|---|
CLOSE DATABASES |