Новости



Visual FoxPro 9 позволяет создавать ещё более производительные приложения баз данных.
Двадцатиление FoxPro! Microsoft принимает поздравления.
Visual FoxPro Toolkit for .NET - более 225 функций VFP 7.0, для языков .NET (подробнее)

Функция LOCK( )

См. также Пример

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

Синтаксис

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

Параметры

nWorkArea | cTableAlias

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

cRecordNumberList

Задает список номеров записей, если вы хотите блокировать группу записей. При том установка SET MULTILOCKS должна иметь значение ON и необходимо задать ра очую область или псевдоним таблицы, в которой вы пытаетесь заблокировать группу записей.

Функция LOCK( ) пытается блокировать сразу все заданные записи. Номера записей в списке cRecordNumberList должны разделяться запятыми. Например, чтобы установить блокировку для первых четырех записей в таблице, список cRecordNumberList должен содержать 1,2,3,4.

Группу записей можно блокировать и иначе: установите указатель записи у той записи, которую вы намерены заблокировать, выдайте функцию LOCK( ) или RLOCK( ), а затем повторите эти действия для всех остальных записей.

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

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

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

Если удалось успешно заблокировать все записи, заданные в списке cRecordNumbers, функция LOCK( ) возвращает значение "истина" (.T.). Если хотя бы одна запись из списка cRecordNumbers не может быть заблокирована, LOCK( ) возвращает значение "ложь" (.F.) и ни од а из этих записей не остается заблокированной. Однако все установленные до того блокировки записей сохраняются. Блокировка группы записей представляет собой аддитивный процесс. Установка блокировки на какие-либо записи не снимает блоки овку с других записей.

Максимальное число записей, которые можно блокировать в каждой из рабочих об астей, приблизительно составляет 8000. Но всегда быстрее блокировать всю таблицу целиком, чем группу записей, даже если их всего лишь несколько.

Снятие блокировки с записей

Снять блокировку с табличной записи может только пользователь, установивший ту блокировку. Освободить запись можно командой UNLOCK, закрыв таблицу или выйдя из Visual FoxPro.

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

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

Таблицы можно закрывать с помощью команд USE, CLEAR ALL или CLOSE DATABASES.

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

Результат

Логический

Комментарии

Функция LOCK( ) идентична функции RLOCK( ).

Если блокировка успешно установлена, LOCK( ) возвращает значение "истина" (.T.). Пользователю, установившему блокировку, блокированные записи остаются доступ ыми для чтения и записи; всем остальным пользователям сети они доступны только для чтения.

Выполнение функции LOCK( ) не гарантирует успешную установку блокировки записей. Нельзя блокировать запись, которую уже заблокировал другой пользователь или которая находится в таблице, блокированной другим пользователем. Если одна или есколько записей не могут быть блокированы по той или иной причине, LOCK( ) возвращает значение "ложь" (.F.).

По умолчанию функция LOCK( ) предпринимает только одну попытку заблокировать запись. Установка SET REPROCESS позволяет задать автоматическое повторение блоки ования записи, если первая попытка оказывается неудачной. Эта установка опреде яет число попыток блокировки или интервал, в течение которого эти попытки сле ует повторять при неудачной первой попытке. Подробнее об этом см. команду SET REPROCESS.

Команда SET MULTILOCKS определяет, можно ли блокировать группу записей в таб ице. Если установка SET MULTILOCKS имеет значение OFF (по умолчанию), вы можете локировать только одну запись в таблице. Если действует SET MULTILOCKS ON, вы можете блокировать сразу несколько записей в таблице. Подробнее см. тему SET MULTILOCKS.



Новое на сайте

  • Обновлен портфель программиста

    Добавлены: Установка HTML Help (Создание справочной системы), Imagedit.zip - Графический редактор ( ico и bmp), Библиотека локализации HTML Help (Русский)
  • Новые примеры программ

    Установка библиотек, Игровая программа "Охота на лис", Установка библиотек "Охота на лис", plastic -"Платежки", Библиотеки (на FPD26), platan -"Платежки" (на Clipper 5.2)
  • Обновленна справка

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