4.3.2. Типы блокировок в Visual FoxPro

 

На сегодняшний день в базах данных принято использовать три вида бло­кировок: эксклюзивную, общую и блокировку изменений.

·       Эксклюзивная блокировка. Пользователь, установивший эксклюзивную блокировку некоторых данных, имеет эксклюзивные права чтения этих данных и записи в них. Другие пользователи не могут не только писать в эти данные, но даже и читать их. Visual FoxPro обеспечивает такую блокировку только на уровне таблицы и базы данных. При работе с Visual FoxPro нельзя эксклюзивно блокировать отдельную строку или набор строк в таблице.

·       Общая блокировка. Установленная пользователем, позволяет ему и другим пользователям читать данные, но не делать в них записи. Этот тип блокировки обычно используется для отчетов и запросов, чтобы гарантировать непротиво­речивость данных. В Visual FoxPro отсутствует.

·       Блокировка изменений. Позволяет только одному пользователю писать в заблокированные данные. Другие пользователи могут читать их, несмотря на блокировку, но не писать в них. Visual FoxPro обеспечивает блокировку изменений на уровне строк и таблиц. Блокировка изменений в Visual FoxPro бывает двух типов - пессимистическая и оптимистическая. При оптимистической блокировке никакие строки или таблицы не блокируются до момента обновления, а при обновлении – только ненадолго. Все это благодаря буферизации. На период внесения изменений в строку или таблицу эти объекты сохраняются в специальном буфере. После завершения корректировки сбрасываются обратно на диск.

 

Чтобы понять различные команды блокировки в Visual FoxPro, рассмотрим их в порядке сужения сферы их действия, т.е. того, на что они распространяются. Блокировка может распространяться на всю базу данных, на отдельную таблицу, на строки данных таблицы или на столбец таблицы.

·       Блокировка на уровне базы данных. При открытии база данных в Visual FoxPro всегда имеет определенный статус бло­кировки: либо эксклюзивный, либо общий. Команда Open Database Real Estate открывает базу данных как эксклюзивную или как общую, в зависимости от значения установки Set Exclusive. Эту установку можно задать либо с помощью команды Set Exclusive, либо последовательно открыв диалоговые окна Tools, Options и отметив флаг Exclusive во вкладке File Locations (Расположения файлов). Если значением Exclusive является On, вышеприведенная команда будет открывать базу данных эксклюзивно.

·       Блокировка на уровне таблицы. При блокировке на уровне таблицы вы можете использовать эксклюзивную блокировку или блокировку изменений. Открытие таблицы для эксклюзивного доступа очень похоже на открытие базы данных. Вы просто должны запустить команду Use с ключевым словом Exclusive. Как и в случае с базой данных, такая блокировка не позволит другим пользователям ни изменять, ни даже читать данные в таблице. Вы снимаете эксклюзивную блокировку таблицы, когда закрываете ее посредством команды Use.

·       Блокировка на уровне строк. Это наиболее распространенный тип блокировки. Другое название – блокировка записей. Visual FoxPro сам блокирует изменение строки во время выполнения некоторых команд. Visual FoxPro блокирует таблицы и строки с помощью собственного обработчика базы данных совместно с операционной системой. Точный метод про­граммистам не раскрывается.

·       Блокировка столбца. В Visual FoxPro не поддерживается.

 

Для установки буферизации в программе используется функция Cursorsetprop. Обязательно установите режим буферизации как один из па­раметров. Например, вы можете указать режим пессимистической блокировки строк, задавая в качестве параметра функции Cursorsetprop() значение 2:

SELECT Street

=Cursorsetprop ("Buffering", 2, "Street")

 

Другими возможными значениями являются:

1  - чтобы отключить буферизацию;

2 - для пессимистической буферизации строк;

3 - для оптимистической буферизации строк;

4 - для пессимистической буферизации таблиц;

5 - для оптимистической буферизации таблиц.