Работа в сети. Организационные меры по разрешению конфликтов

Страницы работы

5 страниц (Word-файл)

Содержание работы

 Лекция 15
Глава 19. Работа в сети

Одновременное чтение данных разными пользователями не вызывает никаких проблем при работе в сети.

Одновременное изменение БД с разных мест может привести к конфликтам. Специальные Средства FoxPro предназначены для разрешения этих конфликтов.

 Основные типы конфликтных (недопустимых) ситуаций при работе в сети

1)  Несколько операторов  имеют одновременный доступ для редактирования одной и той же записи (  один и тот же счет в банке по запросу разных клиентов может повлечь снятие большей суммы, чем там имеется)

2)  Несколько операторов  имеют одновременный доступ ко многим или всем записям БД. ( Например, руководство торговой организации может пожелать изменить цены всех товаров в справочнике из-за изменения  курса доллара, и при этом обслуживание клиентов не должно  прерываться).

3)  Пользователь делают радикальные изменения данных, например,

Insert

Modify structure

Pack

Reindex

Zap

Такие действия совершенно исключают доступ к БД с других рабочих мест и выполняются только в монопольном режиме.

Основные состояния сети

FoxPro  может открывать БД в 2-х режимах :

·  Монопольном

·  Сетевом (разделенном, многопользовательском, коллективном  - синонимы)

Таким образом, при работе программы в  сетевом режиме в сети возможны следующие ситуации:

1)  Пользователь открывает БД для монопольной работы. В этом случае БД закрыта для других, как для чтения, так и для записи.

2)  Пользователь открывает БД в сетевом режиме. В определенный момент пользователь  временно  захватывает БД для ввода/редактирования данных. Остальные операторы  в это время могут только читать файл .

3)  Пользователь открывает БД в сетевом режиме. В определенный момент пользователь временно захватывает одну запись. Остальные операторы могут только читать эту запись.

4)  Пользователь открывает БД в сетевом режиме. Никто из операторов не редактирует данные. БД доступна всем.

Организационные меры по разрешению конфликтов

1)

use kad

go top

@ 1,1 get fio picture “xxxxxxxxxxxxxxxx”

read

Происходит автоматический захват записи ( read lock) . Другие пользователи могут ее только читать. Их попытки редактирования пресекаются с выдачей системного сообщения.

Разрешение конфликта – использование временных переменных. Последовательность действий:

-  scatter -  запись полей БД во временные переменные

-  редактирование

-  replace или gather – запись в БД с помощью ее временной блокировки

a)

use kad

go top

scatter to  t

@ 1,1 say “ таб № = ”  get t(1)  picture “xxxxx”

@ 2,1  say “ФИО  =  ” get t(2)  picture “xxxxxxxxxxxxxxxx”

read

gather from t (!!! -  кратковременное обращение к записи БД)

b)

use kad

go top

scatter to  memvar

@ 1,1 say “ таб № = ”  get m.TN  picture “xxxxx”

@ 2,1  say “ФИО  =  ” get m.FIO  picture “xxxxxxxxxxxxxxxx”

read

gather from memvar

2)  При работе в сети исключаются ввод/редактирование данных с помощью Browse/change. В данной среде их можно только просматривать.

Средства FoxPro, обеспечивающие  работу в сети

1) Сетевой доступ к БД возможет только при задании установки

Set exclusive off

( по умолчанию – on)

Тогда команда

  Use kad

Открывает БД в режиме коллективного использования (сетевом режиме).

2) Если в случае обшей установке Set exclusive off

надо одну или несколько  БД открыть в монопольном режиме, то

use <файл> exclusive

3)функция

Flock(<область>)

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

Пример

Use kad

If flock()

             gather from memvar

Endif -  это запись в БД с блокировкой

4)  lock/rlock(<область>)/[[выражение С], область])

блокирует одну  или несколько записей

if rlock(’25,26,34’, kad)

……….

Endif

Замечание. Возможность множественной блокировки доступна, только если установлено

Set multilocks on

( по умолчанию – off)

5)  Unlock [in <область>/ all]

Снимает  блокировку записей / файлов



Пример

Use kad

If flock()

             Replace     Tn from m.tn,  fio from m.fio

             Unlock

Endif

 - это основной шаблон действий с БД в сетевом режиме.

6) Организация автоматического повтора попыток блокировки в течение заданного времени или заданное число раз

set  reprocess to <Выр n> [seconds] / to  automatic

<Выр n> -  число повторных попыток блокировки ( от 1 до 32 000. Попытки повторяются 18.3 раза в секунду. Нажатие ESC не прерывает попыток захвата данных, даже если установлено

set escape on.

<Выр n> seconds – количество секунд, в течение которых будут выполняться эти попытки.

Automatic -  попытки блокировки будут выполняться непрерывно. При этом на экране будет предъявлено системное сообщение «attempting to lock… Press ESC to cancel”.

Замечание 1. Команда Append blank блокирует заголовок БД. Следовательно, никакая другая команда, изменяющая заголовок, не может быть выполнена  в данный момент ( т.е. нужен захват всей БД).

Замечание 2. Более удобным средством включения новой записи в сетевом режиме является команда insert. При этом программист не заботится о блокировке.( заботится сам SQL).

Замечание 3. Упаковка данных -  только в монопольном режиме.

Похожие материалы

Информация о работе