1

Тема: Использование FoxBase+ и Clipper в локальной сети

Использование FoxBase+ и Clipper в локальной сети
                       Нестеренко Ю.

                                    АННОТАЦИЯ

               Документ содержит информацию по разработке сетевых прило-
          жений с использованием средств программных  продуктов FoxBase+
          v2.00 и Clipper Summer '87.
               В документе рассматриваются сетевые  команды  и  функции,
          порядок их применения, примеры использования,  даются рекомен-
          дации по разработке сетевых приложений.
               Все нижеописанное будет также верно и  при  использовании
          FoxBase+ v2.10 и Clipper 5.0.


                              С О Д Е Р Ж А Н И Е

           1. Введение .............................................  3

           2. Средства для работы в локальной сети .................  4
           2.1. Сетевые команды ....................................  4
           2.2. Сетевые функции ....................................  5

           3. Программирование для локальной сети ..................  7
           3.1. Когда требуется блокирование записи или файла ......  7
           3.2. Как открывать файлы в режиме разделения ............  8
           3.3. Блокирование записи или файла ......................  9
           3.4. Что делать после неудачных попыток блокирования .... 10
           3.5. Влияние сетевой среды на файлы ..................... 11
           3.6. Влияние сетевой среды на команды ................... 12
           3.7. Программа Locks.prg ................................ 12
           3.7.1. Функция NET_USE .................................. 13
           3.7.2. Функция FIL_LOCK ................................. 13
           3.7.3. Функция REC_LOCK ................................. 14
           3.7.4. Функция ADD_REC .................................. 15

           Список литературы ....................................... 16


           1. ВВЕДЕНИЕ

               Локальная сеть (LAN) позволяет совместно использовать се-
          тевые ресурсы: дисковое пространство и принтеры.
               Ваши прикладные программы, разработанные в  Foxbase+  или
          Clipper без использования сетевых средств, будут нормально ра-
          ботать и в том случае, если вы разместите файлы данных на фай-
          ловом сервере. При этом любой файл, открытый в  программе, ис-
          пользуется монопольно по умолчанию, то есть не доступен другим
          пользователям сети.  Таким  образом  в  случае,  когда  разные
          пользователи используют разные файлы,находящиеся  на  файловом
          сервере, вам нет необходимости  адаптироватьваши  программы  к
          использованию в сетевой среде (за искючением, быть может, ука-
          зания пути к сетевым каталогам).И  наоборот,  программа, напи-
          санная для использования в сетевой среде,не  требует адаптации
          при ее использовании без сети (за исключением,быть может, ука-
          зания пути к локальным каталогам).
               Если же есть хотя бы один файл данных, к  которому  могут
          одновременно  обратиться  несколько  пользователей,  требуется
          адаптировать программы к использованию в сети.
               Совместное использование данных возможно вследствие нали-
          чия метода открытия файлов, обеспечиваемого сетевой операцион-
          ной  системой,  который  позволяет  двум  или  большему  числу
          пользователей одновременно иметь открытым один и тот  же файл.
          Такой метод открытия называют "разделяемый" (shareable)  в от-
          личие от монопольного, когда файл доступен лишь одному пользо-
          вателю.

Поделиться

2

Re: Использование FoxBase+ и Clipper в локальной сети

1987 год, говорите... )))))

Поделиться

3

Re: Использование FoxBase+ и Clipper в локальной сети

2. СРЕДСТВА ДЛЯ РАБОТЫ В ЛОКАЛЬНОЙ СЕТИ

               Сетевые средства FoxBase+ и Clipper  представлены набором
          сетевых команд и сетевых функций.  Они  обеспечивают  следущие
          возможности:
                  - открывать файлы в монопольном или разделяемом
                    режиме;
                  - логически блокировать файл с целью предотвращения
                    обновления одного и того же файла двумя или большим
                    числом пользователей одновременно;
                  - логически блокировать запись с целью предотвращения
                    обновления одной и той же записи двумя или большим
                    числом пользователей одновременно;
                  - переназначить вывод локального принтера на сетевой     
           принтер или в сетевой файл;
                  - снять блокировку файла или записи в текущей
                    области;
                  - снять блокировки во всех областях.
               Заметим, что в текущей области может  быть  заблокирована
          только одна запись, либо весь файл.
               При описании  синтаксиса  команд  используются  следующие
          соглашения:
           

       [ ] обозначает, что содержимое внутри квадратных
                      скобок может быть опущено;
                  < > обозначает, что нужно заменить содержимое в
                      угловых скобках   на конкретное значение;
                  |   обозначает альтернативу между тем, что стоит
                      слева от знака, и тем, что стоит справа от него;
                  ... обозначает, что опущена часть выражения.

Поделиться

4

Re: Использование FoxBase+ и Clipper в локальной сети

2.1. Сетевые команды

           SET EXCLUSIVE ON|OFF
                  Устанавливает режим открытия по умолчанию для файлов
                  данных и индексных файлов: ON - монопольный, OFF -
                  разделяемый.
     

      UNLOCK [ALL]

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

               
                  если указано ALL - то во всех областях.
         

 USE [<имя файла>] [INDEX <список индексных файлов>]
           [EXCLUSIVE] [ALIAS <имя псевдонима>]

                  Открывает базу данных и связанные с ней индексные
                  файлы: в режиме установленном по умолчанию, если
                  указано EXCLUSIVE - то в монопольном режиме.
           SET PRINTER TO <назначение>
                  Определяет вывод на сетевой принтер.

Поделиться

5

Re: Использование FoxBase+ и Clipper в локальной сети

2.2. Сетевые функции

           FLOCK()
                  Пытается логически блокировать файл открытый в
                  текущей рабочей области и возвращает значение
                  "истина" (.T.)    в случае успешной попытки.
                  Независимо от результата своего выполнения функция
                  tsFLOCK всегда снимает предыдущую блокировку записи
                  или файла в текущей рабочей области.
           RLOCK()|LOCK()
                  Пытается логически блокировать текущую запись и
                  возвращает значение "истина" (.T.), если попытка
                  была успешной. Независимо от результата своего
                  выполнения функция RLOCK (или LOCK) всегда снимает
                  предыдущую блокировку записи или файла в текущей
                  рабочей области.

                Примечание.
               Различные  dBASE-продукты   могут   иметь   несовместимые
          функции блокирования, поэтому рекомендуется  использовать один
          и тот же продукт при работе с файлами в режиме разделения.

           NETERR()
                  Возвращает значение "истина" (.T.) , если
                  предшествовавшие ей команды USE, USE ... EXCLUSIVE
                  или APPEND BLANK не выполнились в сети. Это может
                  произойти по следующим причинам:

Поделиться

6

Re: Использование FoxBase+ и Clipper в локальной сети

Таблица 1. Причины возвращения функцией NETERR значения
           "истина".
           -----------------------------------------------------------
           Команда              Причина невыполнения
           -----------------------------------------------------------
           USE                  USE ... EXCLUSIVE другим процессом
           USE EXCLUSIVE        USE или USE  EXCLUSIVE другим процессом
           APPEND BLANK         FLOCK() другим процессом или попытка
                                выполнить две команды APPEND BLANK
                                одновременно.

           Примечание. В Foxbase+ нет функции NETERR(). Вместо нее
           используйте команду ON ERROR для назначения процедуры
           обработки ошибок, код которых дает функция ERROR(). Коды
           ошибок, связанных с работой в сети, приведены в руководстве
           по Foxbase+.


           3. Программирование для локальной сети

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

               Примечание.
               Если ваша программа не требует доступа к  базе  данных  в
          режиме разделения, а компьютер включен в  локальную  сеть,  то
          информация, представленная ниже, вам не потребуется.
          Foxbase+ и  Clipper  по  умолчанию  предполагают однопользова-
          тельский  (монопольный)  режим  доступа  к  базе  данных  (SET
          EXCLUSIVE ON), при котором блокирование вообще не требуется.

           3.1. Когда требуется блокирование записи или файла

               Сначала вы должны определить, исходя из  требований пост-
          авленного задания, какие файлы нужно  будет  использовать сов-
          местно несколькими  пользователями.  Как  правило,  это  общие
          справочники.
               Затем определите те задачи и период времени,  когда будет
          необходимо иметь монопольный доступ к таким файлам.
               Как правило, это операции реорганизации базы данных в мо-
          менты времени, связанные с  технологическим  процессом. Напри-
          мер, конец рабочего дня, отчетного месяца, квартала, года. При
          монопольном открытии файла он не доступен другим пользователям
          ни для чтения ни для записи, поэтому нужно осторожно использо-
          вать этот режим.
               И, наконец, определите те задачи, которые  требуют внесе-
          ния изменений в некоторые записи файла или требуют,  чтобы ка-
          кие-то записи в данный момент не изменялись  другими пользова-
          телями, например,при суммировании итога.
               В этот момент времени для обеспечения  целостности данных
          необходимо запре*тить другим пользователям изменение  каких бы
          то ни было полей этой записи или файла. Для этого и служит ме-
          ханизм блокирования записи либо всего файла,  поддерживаемый в
          Foxbase+ и Clipper. Заблокированная запись или  файл  доступны
          другим пользователям для чтения, но не доступны для записи.

Поделиться

7

Re: Использование FoxBase+ и Clipper в локальной сети

Подводя итог вышесказанному, можно  сформулировать  такое
          правило:
                  - блокирование требуется всегда, когда необходимо
                    внести изменения в базу данных;
                  - блокирование не обязательно в других случаях.

               Команды,  которые  осуществляют  изменение  базы  данных:
          REPLACE, DELETE для нескольких записей, RECALL, @ ... get <имя
          поля> в режиме разделения (SET EXCLUSIVE OFF)  требуют предва-
          рительного блокирования записи или файла. При  отсутствии бло-
          кирования выполнение этих команд в Foxbase+ и  Clipper вызовет
          сообщение об ошибке типа "System error not locked".
               Файл должен быть заблокирован или  открыт  в  монопольном
          режиме (SET EXCLUSIVE ON) при обновлении записей в базе данных
          такими командами как, APPEND FROM, DELETE, UPDATE ON,  для то-
          го, чтобы другой пользователь не записал что-либо в  этот файл
          во время выполнения вашей программы.
               Необходимо также блокировать файл при выполнении процесса
          чтения информации  из  каждой  записи  такими  командами,  как
          COUNT, SUM, TOTAL, AVERAGE, даже если  формально  блокирование
          не требуется. Эти команды не обновляют файл, однако блокирова-
          ние нужно для того, чтобы быть уверенным в неизменности данных
          во время вычислений.
               Некоторые команды (PACK, REINDEX,  ZAP)  не  могут выпол-
          няться в режиме  разделения,  файл  должен  быть  открыт моно-
          польно. При попытке выполнить эти команды в  режиме разделения
          Foxbase+ и Clipper выдадут сообщение об ошибке.
               Не требуется блокирование при выполнении  команд, которые
          только читают из файла, таких, как LIST,  SEEK,  REPORT  FORM,
          GOTO. Заметим, что Foxbase+ и Clipper  позволяют  добавить за-
          пись командой APPEND BLANK в файл, открытый в  режиме разделе-
          ния.

           3.2. Как открывать файлы в режиме разделения

              Для этого имеется несколько простых правил:
                - перед использованием команды USE нужно установить
                  режим   разделения с помощью команды SET EXCLUSIVE  OFF;
                - сразу после команды USE нужно всегда проверять
                  функцией NETERR,   что файл успешно открыт;
                - никогда не включать фразу INDEX в команду USE,
                  вместо   этого лучше открывать индексные файлы
                  команды SET INDEX после проверки успешного
                  открытия функцией NETERR.

Поделиться

8

Re: Использование FoxBase+ и Clipper в локальной сети

Следующий пример иллюстрирует эти правила.
           SET EXCLUSIVE OFF  && Последующее применение USE - в режиме
                              &&  разделения
           USE File
           IF NETERR()        && NETERR возвращает .T. при неудачной
                              && попытке открытия файла командой USE
           ? 'Файл не доступен в режиме разделения '+;
             'Программа закончила работу '
             QUIT
           ENDIF
           SET INDEX TO ...
               Обратите внимание на то, что файл может быть не доступен,
          так как другой пользователь мог открыть его в  монопольном ре-
          жиме.
               Всегда открывайте индексный файл отдельно  от  файла дан-
          ныхкомандой SET INDEX. Неудачная попытка открытия файла данных
          не прерывает выполнение программы. Неудачная  попытка открытия
          индексного файла в одной команде USE <файл>  INDEX  <индексный
          файл> - прерывает программу.

Поделиться

9

Re: Использование FoxBase+ и Clipper в локальной сети

3.3. Блокирование записи или файла

               Блокирование записи или файла осуществляется в результате
          выполнения функций RLOCK и FLOCK соответственно.  Обе  функции
          осуществляют попытку блокирования и возвращают  результат этой
          попытки - "истина" или "ложь" (.T. или .F.).
               В случае успешного выполнения функции  RLOCK  блокируется
          текущая запись, FLOCK - блокируется весь файл в  текущей рабо-
          чей области. Пользователю теперь разрешено писать в  файл. По-
          пытки других пользователей заблокировать ту же запись  или тот
          же файл обречены на неудачу. В этом случае нет влияния  на по-
          пытки других пользователей читать файл.
               Блокировка записи или файла сохраняется до тех  пор, пока
          она не будет снята посредством:
               - команды UNLOCK в рабочей области  заблокированного фай-
                 ла;
               - команды UNLOCK ALL в любой рабочей области;
               - закрытия файла;
               - нормального завершения программы;
               - другой команды, требующей блокирования, или другой
                 функции блокирования в этом файле.

Поделиться

10

Re: Использование FoxBase+ и Clipper в локальной сети

Примечание 1.
               Попытка блокирования снимает любую существующую блокиров-
          ку до начала своего выполнения. Таким образом любая неудачная
          попытка блокирования или успешное выполнение функции  RLOCK на
          другой незаблокированной записи снимает предыдущую блокировку.

               Примечание 2. В любой момент времени  может  быть  только
          одна блокировка (файла или записи) в  каждой  рабочей  области
          для файла, открытого в режиме разделения.


           3.4. Что делать после неудачных попыток блокирования

               После неудачной попытки блокирования существуют следующие
          возможные действия:
                  - сделать еще одну попытку;
                  - повторять попытки фиксированное время;
                  - повторять попытки до прерывания пользователем
                    (например, клавишей Esc);
                  - повторять попытки до достижения блокирования.
               Видимо, действия "сделать еще одну попытку" недостаточно,
          а действие "повторять до достижения  блокирования" неприемлемо
          из-за неопределенности момента его завершения.  В  большинстве
          практических случаев оба этих действия не подходят. Для прида-
          ния  гибкости  и  практичности  программному  продукту   нужно
          компромиссное решение. Имеется несколько альтернатив для усло-
          вий завершения попыток блокирования: установить предел по вре-
          мени, дать возможность пользователю прервать  попытки блокиро-
          вания или использовать комбинации этих двух вариантов.
               Адаптированные по вышеприведенным рекомендациям процедуры
          открытия и попыток блокирования не  изменяют  выполнения прог-
          раммы , но увеличивают активность программы при  неудачной по-
          пытке блокирования.В этом - существенное различие  между сете-
          вой и несетевой пользовательской программой.
               После неудачной попытки блокирования, как  правило, нужно
          сделать следующее:
               - сообщить пользователю о неудачной попытке блокирования;
               - обработать эту ситуацию.
               Можно выдать сообщение на экран и сделать временную паузу
          (например, две секунды) для  того,  чтобы  пользователь  успел
          прочитать сообщение. Другой вариант -  сделать  неограниченную
          по времени паузу (например, с помощью вызова функции INKEY(0))
          для того, чтобы пользователь прочитав сообщение мог продолжить
          выполнение программы после нажатия любой клавиши.

Поделиться

11

Re: Использование FoxBase+ и Clipper в локальной сети

Обработка ситуации, как правило,  состоит  в  последующем
          ветвлении в программе после выбора пользователем из небольшого
          меню. Типичное меню содержит три опции:
               
                  - повторение попытки блокирования;
                  - попытка работать с другими данными;
                  - прекращение работы, возврат в вышестоящее меню.
               Первая опция дает возможность пользователю  повторить по-
          пытку блокирования, но это не самое лучшее решение. Вторая оп-
          ция имеет смысл во многих приложениях. Если запись  не доступ-
          на, обрабатывается другая запись, и  если  затем  вернуться  к
          первой записи, возможно, она будет доступна. Третья опция пре-
          рывает попытки блокирования и возвращает в  меню  вышестоящего
          уровня.

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

Поделиться

12

Re: Использование FoxBase+ и Clipper в локальной сети

3.5. Влияние сетевой среды на файлы

               Работа c файлами в сетевой среде (команда  SET  EXCLUSIVE
          OFF) осуществляется совершенно по другому по сравнению с одно-
          пользовательским (или монопольным) режимом. Базы данных и свя-
          занные с ними файлы открываются в режиме разделения  или моно-
          польном  в  зависимости  от  текущего  статуса   команды   SET
          EXCLUSIVE и/или в зависимости от того,  открываются  ли  файлы
          при помощи команды USE или USE ... EXCLUSIVE.
               Если была выполнена команда SET EXCLUSIVE ON, база данных
          и связанные с ней файлы открываются командой USE в монопольном
          (не разделяемом) режиме. Если выполнена команда  SET EXCLUSIVE
          OFF и затем вы открываете файл командой USE,  то  базы  данных
          открываются в режиме разделения.
               Если выполнена команда  SET  EXCLUSIVE  OFF  и  затем  вы
          открываете файл командой  USE  ...  EXCLUSIVE,  то  этот  файл
          открывается в монопольном (не разделяемом) режиме.

           Примечание.
               Блокирование файла или  записи  необходимо  только  когда
          файл открыт в режиме разделения.
               
               
             Некоторые команды Foxbase+ и Clipper дополнительно откры-
          вают файлы данных (и/или связанные .dbt и индексные файлы) от-
          личные от текущего открытого файла. По  завершении  выполнения
          команды такие файлы закрываются.
               Следующая таблица показывает как будут открываться файлы,
          отличные от текущего открытого, при выполнении таких команд.
               
               
           Таблица 2. Как открываются дополнительные файлы при
                      выполнении  некоторых команд
           ------------------------------------------------------------
           Команды, читающие из <файла>    Команды, пишущие в <файл>
           и открывающие его в режиме      и открывающие его в
           разделения                      монопольном режиме
           -----------------------------------------------------------
           APPEND FROM <имя файла>        COPY STRUCTURE TO <имя файла>
           CREATE ... FROM <имя файла>    COPY TO <имя файла>
           LABEL FORM <имя файла>         CREATE <имя файла>
           REPORT FORM <имя файла>        INDEX ON ... TO <имя файла>
           RESTORE FROM <имя файла>       JOIN ... TO <имя файла>
           TYPE <имя файла>               SAVE TO <имя файла>
           UPDATE ... FROM <имя файла>    SET ALTERNATE TO <имя файла>
                                          SORT ... TO <имя файла>
                                          TOTAL ... TO <имя файла>
           -----------------------------------------------------------
               Файл, открытый в режиме разделения,  как  показано  выше,
          открывается  с  использованием  атрибута  DOS  "только-чтение"
          (read-only).

               Команда SET INDEX TO откроет индексный файл в режиме раз-
          деления или монопольном, в  зависимости  от  текущего  статуса
          открытия соответствующей базы данных.
               Некоторые из этих команд работают с двумя файлами, причем
          часто к одному обращаются по его имени, как приведено в табли-
          це 2, а другой - текущий. Режим открытия текущей  базы  данных
          предопределен и зависит от ранее описанных команд.

Поделиться

13

Re: Использование FoxBase+ и Clipper в локальной сети

3.6. Влияние сетевой среды на команды

               Некоторые команды при работе в сетевой среде  требуют мо-
          нопольного открытия файла, либо блокирования файла или записи.
          Однако, что требования изменяются в зависимости  от  того, вы-
          полняется ли команда с одной записью или с несколькими записями.
Ниже приведены требования этих команд.
               
           Таблица 3.
                      Влияние сетевой среды на команды
           -----------------------------------------------------------
           Команда                         Требования
           -----------------------------------------------------------
           @...SAY...GET                   RLOCK()
           APPEND FROM                     USE...EXCLUSIVE или
                                           FLOCK()
           DELETE (одна запись)            RLOCK()
           DELETE (несколько записей)      USE...EXCLUSIVE или FLOCK()
           PACK                            USE...EXCLUSIVE
           RECALL (одна запись)            RLOCK()
           RECALL (несколько записей)      USE...EXCLUSIVE или FLOCK()
           REINDEX                         USE...EXCLUSIVE
           REPLACE (одна запись)           RLOCK()
           REPLACE (несколько записей)     USE...EXCLUSIVE или FLOCK()
           UPDATE ON                       USE...EXCLUSIVE или FLOCK()
           ZAP                             USE...EXCLUSIVE
           -----------------------------------------------------------

Поделиться

14

Re: Использование FoxBase+ и Clipper в локальной сети

3.7. Программа Locks.prg

               Программа Locks.prg, имеющаяся  на  дистрибутивном  диске
          Clipper'а, содержит пользовательские функции для сети. Необхо-
          димо использовать функции ADD_REC, FIL_LOCK, NET_USE, REC_LOCK
          вместо команды APPEND BLANK, функции FLOCK,  команды  USE  ...
          EXCLUSIVE и  функции  RLOCK  соответственно.  Каждая  из  этих
          функций пытается блокировать запись или файл в течение опреде-
          ленного промежутка времени, так что машинное время использует-
          ся оптимально. Для того, чтобы использовать эти функции, необ-
          ходимо включить в свою программу  команду  "SET  PROCEDURE  TO
          Locks". В программе Locks.prg предполагается,  что установлено
          SET EXCLUSIVE OFF. Текст программы приведен ниже.
               Примечание. Вы можете использовать эти функции как пример
          и на их основе разработать свои, более  подходящие  для  вашей
          задачи.


           3.7.1. Функция NET_USE

               Эта функция пытается открыть файл  в  монопольном  режиме
          или врежиме разделения и возвращает логическое значение "исти-
          на" или "ложь" (.T. или .F.).
                Функция NET_USE использует три параметра:
           текстовая переменная  - имя базы данных, которую нужно
                                   открыть;
           логическая переменная - режим открытия (монопольный
                                   /разделяемый);
           числовая переменная   - количество секунд ожидания (0 -
                                   ждать до конца).
               Если функция NET_USE отработала успешно, то  после  этого
          можно открывать индексные файлы (команда SET INDEX).
           IF NET_USE("Accounts",.T.,5)
              SET INDEX TO Name
           ELSE
           ? " Файл Accounts не доступен"
           ENDIF

           FUNCTION NET_USE
           PARAMETERS file, ex_use, wait
           PRIVATE forever
           forever = (wait = 0)
           DO WHILE (forever .OR. wait > 0)
              IF ex_use               && Монопольный режим
                 USE &file EXCLUSIVE
              ELSE                    && Режим разделения
                 USE &file
              ENDIF
              IF .NOT. NETERR()       && Успешное открытие файла
                 RETURN (.T.)
              ENDIF
              INKEY(1)                && Ждать 1 секунду
              wait = wait - 1
           ENDDO
           RETURN (.F.)               && Файл не открыт
           * Конец NET_USE

Поделиться

15

Re: Использование FoxBase+ и Clipper в локальной сети

3.7.2. Функция FIL_LOCK.

               Эта функция пытается заблокировать текущий файл, открытый
          в режиме разделения. Числовой параметр этой функции - интервал
          времени в секундах, в течение которого функция  продолжает по-
          пытки блокирования файла, после истечения которого она возвра-
          щает значение "ложь" (.F.).
           IF FIL_LOCK(5)
              REPLACE ALL Salary WITH Salary * 1.9
           ELSE
              ? "Файл Accounts не доступен"
           ENDIF

           FUNCTION Fil_lock
           PARAMETERS wait
           PRIVATE forever
           IF FLOCK()
              RETURN (.T.)               && Заблокирован
           ENDIF
           forever = (wait = 0)
           DO WHILE (forever .OR. wait > 0)
              INKEY(.5)                     && Ожидание 1/2 секунды
              wait = wait - 0.5
              IF FLOCK()
                 RETURN (.T.)               && Заблокирован успешно
              ENDIF
           ENDDO
           RETURN (.F.)                     && Не заблокирован
           * Конец FIL_LOCK

           3.7.3. Функция REC_LOCK

               Эта функция пытается заблокировать текущую  запись файла,
          открытого в режиме разделения. Числовой параметр  этой функции
          - интервал времени в секундах, в течение которого функция про-
          должает попытки блокирования записи. Функция  REC_LOCK возвра-
          щает логическое возвращает логическое  значение  "истина"  или
          "ложь" (.T. или .F.).

           IF REC_LOCK(5)
              REPLACE Salary WITH Salary * 1.9
           ELSE
              ? "Запись файла Accounts не доступна"
               

           ENDIF

           FUNCTION Rec_lock
           PARAMETERS wait
           PRIVATE forever
           IF RLOCK()
              RETURN (.T.)               && Заблокирована
           ENDIF
           forever= (wait = 0)
           DO WHILE (forever .OR. wait > 0)
              IF RLOCK()
                  RETURN (.T.)          && Заблокирована успешно
              ENDIF
              INKEY(0.5)                && Ожидание 1/2 секунды
              wait = wait - 0.5
           RETURN (.F.)                 && Не заблокирована
           * Конец Rec_lock

Поделиться

16

Re: Использование FoxBase+ и Clipper в локальной сети

3.7.4. Функция ADD_REC

               Эта функция пытается добавить  новую  заблокированную за-
          пись в базу данных. Числовой параметр этой функции  - интервал
          времени в секундах, в течение которого функция  продолжает по-
          пытки добавления записи, после чего функция  возвращает значе-
          ние "ложь" (.F.).

           IF .NOT. ADD_REC(5)
              ? "Нельзя добавить запись в файл." +;
                " Программа закончила работу!"
              QUIT
           ENDIF

           FUNCTION ADD_REC
           PARAMETERS wait
           PRIVATE forever
           APPEND BLANK
           IF .NOT.NETERR()
              RETURN (.T.)
           ENDIF
           forever = (wait = 0)
           DO WHILE (forever .OR. wait > 0)
              APPEND BLANK
              IF .NOT. NETERR()
                 RETURN (.T.)
              ENDIF
              INKEY(0.5)                && Ожидание 1/2 секунды
              wait = wait - 0.5
           ENDDO
           RETURN (.F.)                  && Незаблокирована
           * Конец ADD_REC

               
           Список литературы

           1. Clipper User's Manual, Nuntucket Corp., Summer '87.
           2. FoxBASE+ v2.00 User's Manual. Fox Software, Inc., 1987.

Поделиться