Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Руководство по Btrieve

01.01.2007

ВВЕДЕНИЕ В BTRIEVE

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

Для доступа к Btrieve Вы включаете обращения к специфическим функциям в Вашей программе, посылая Btrieve информацию, необходимую для выполнения требуемой операции. Т.к. соглашения по обращению к программам различны для разных языков высокого уровня и компиляторов, в Btrieve включены интерфейсные программы для многих наиболее популярных языков и компиляторв, включая следующие:

* Microsoft QuickBASIC, IBM интерпретатор и компилятор BASIC-а, Turbo Basic и некоторые другие компиляторы BASIC-а

* IBM (или Microsoft) Pascal, Turbo Pascal и некоторые другие компиляторы Паскаля

* Microsoft C, Lattice C, Turbo C и некоторые другие компиляторы C

* Microsoft COBOL, Realia COBOL, MicroFocus COBOL и некоторые другие компиляторы COBOL-а

Это руководство содержит документацию и примеры программ для BASIC, C, Pascal и COBOL. Документация и дополнительные интерфейсные программы для других языков и компиляторов находятся на дискете Btrieve. Глава 4 включает информацию о требованиях для программ, написанных на ассемблере, для обращения к Btrieve из языков, для которых интерфейс не поддерживается.

ВОЗМОЖНОСТИ BTRIEVE

В следующих разделах приведены некоторые из возможностей, делающих Btrieve уникальной мощной системой управления записями.

ПОДДЕРЖКА ИНДЕКСОВ

Btrieve автоматически создает и поддерживает индексы в Ваших файлах при добавлении, корректировке и удалении записей. Кроме автоматической поддержки индексов Btrieve обеспечивает поддержку индексов в следующих случаях:

* поддержка до 24 индексов на файл

* поддержка для добавления или отбрасывания дополнительных индексов после создания файла

* поддержка до 14 различных типов данных для значений ключей

* поддержка дублированных, измененных, сегментированных, пустых, ручных и убывающих значенийй ключей

Глава 2 содержит более детальную информацию о том, как использовать индексные признаки Btrieve в Вашей прикладной программе.

СПЕЦИФИКАЦИИ ФАЙЛА

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

* Размеры файла до 4 миллионов байт

* Неограниченное число записей

* Способность размещать файл на двух устройствах хранения информации

* Согласованное определение файлов и управляющих программ

* Согласованные структуры файлов

УПРАВЛЕНИЕ ПАМЯТЬЮ

Btrieve позволяет Вам задать объем памяти, используемой кэш-буфером ввода/вывода, основываясь на требуемой для Вашей прикладной программы памяти и общим объемом памяти, инсталированным на Вашем сервере. Объем памяти, зарезервированный Вами для кэш-буфера ввода/вывода, может оказать эффект на выполнение Btrieve.

УПРАВЛЕНИЕ ПАРАЛЛЕЛИЗМОМ И ЗАЩИТОЙ

Btrieve обеспечивает возможность управления параллелизмом и защитой данных в сети. Btrieve поддерживает сохранность и защиту данных, позволяя Вам:

* Задать захват одной или множества записей

* Захватить файл данных

* Определить логические транзакции

* Присвоить имена пользователей файлам

* Задать динамическую шифровку и расшифровку данных

Глава 2 содержит дополнительную информацию о том, как Btrieve и Ваша прикладная задача обрабатывают параллелизм и защиту.

СОХРАННОСТЬ ДАННЫХ

Btrieve использует некоторые методы для обеспечения сохранности Ваших файлов данных. Эти методы включают:

* Использование прообразов файлов для хранения образов страниц файла перед добавлением, корректировкой и удалением записей;

* Использование процесса транзакций для поддержки совместимости между файлами данных во время неоднократной корректировки файла.

BTRIEVE УТИЛИТЫ

        Btrieve включает две программы-утилиты так же, как и некоторые

        диалоговые команды, позволяющие Вам выполнять тестирование и

        управление данными без составления прикладной программы. Они

включают:

* BUTIL.EXE, утилиту командной строки, позволяющую Вам создавать и управлять файлами данных Btrieve.

* B.EXE, интерактивную программу-утилиту, которую можно использовать для инструктажа, тестирования и отладки логики Вашей прикладной программы.

* Диалоговые команды, позволяющие Вам управлять работой сети Btrieve при Вашей работе с сетью.

Смотрите главу 4 для дополнительной информации об утилитах Btrieve и диалоговых командах.

ОПЕРАЦИИ УПРАВЛЕНИЯ ЗАПИСЯМИ

Btrieve поддерживает 36 отдельных операций, которые Вы можете выполнять в Вашей прикладной программе. Для выполнения Btrieve-операции Ваша прикладная задача должна выполнить следующие задачи:

* Удовлетворять всем требованиям операции.

Например, до выполнения Вашей прикладной задачей ввода/вывода файла она должна сделать файл доступным с помощью выполнения Btrieve-операции Открыть (Open) для этого файла.

* Инициализировать параметры, требуемые этой операцией.

Параметры - это переменные программы или структуры данных, по типу и размеру соответствующие значениям ожидаемым Btrieve для данной операции.

* Выполнить обращение к Btrieve-функции (BTRV)

Точный формат обращения к Btrieve-функции изменяется от языка к языку

* Проверить результаты обращения к функции.

Btrieve всегда возвращает статусный код, ознчающий успех (статус=0) или неудачу (статус<>0) операции. Ваша прикладная задача должна всегда проверять ненулевые статусные коды и предпринимать соответствующие действия.

Кроме того, Btrieve возвращает данные или другую информацию в индивидуальных параметрах, основываясь на цели операции.

Таблица 1.1 перечисляет Btrieve-операции и коды операций и содержит краткое описание выполняемой операцией функции.

                Таблица 1.1 (Операции Btrieve)

   ---------------------------------------------------------------------

     ОПЕРАЦИЯ                    КОД    ОПИСАНИЕ

   ---------------------------------------------------------------------

     Открыть                      0       Делает файл доступным

     (Open)

     Закрыть                      1       Отменяет доступ к файлу

     (Close)

     Вставить                     2       Вставляет новые записи в файл

     (Insert)

     Изменить                     3       Изменяет текущую запись

     (Update)

     Удалить                      4       Удаляет текущую запись из

     (Delete)                             файла

     Получить Равную              5       Получает запись со значением

     (Get Equal)                          ключа равным требуемому

                                          значению ключа

     Получить Следующую           6       Получает запись следующую за

     (Get Next)                           текущей записью в индексном пути

     Получить Предыдущую          7       Получает запись предшествующую

     (Get Previous)                       текущей записи в индексном пути

     Получить Большую             8       Получает запись со значением

     (Get Greater)                        ключа большим требуемого

                                          значения ключа

     Получить Большую или         9       Получает запись со значением

      Равную                              ключа равным или большим

     (Get Greater or Equal)               требуемого значения ключа

     Получить Меньшую Чем        10       Получает запись со значением

     (Get Less Than)                      ключа меньшим требуем

                                          значения ключа

     Получить Меньшую Чем        11       Получает запись со значением

     или Равную                           ключа равным или меньшим

     (Get Less Than or Equal)             требуемого значения ключа

     Получить Первую             12       Получает первую запись в

     (Get First)                          запрошенном пути доступа

     Получить Последнюю          13       Получает последнюю запись в

     (Get Last)                           запрошенном пути доступа

     Создать                     14       Создает Btrieve-файл с

     (Create)                             заданными характеристиками

     Статистика                  15       Возвращает характеристики файла

     (Stat)                               и индекса и число записей

     Расширить                   16       Расширяет файл на два дисковых

     (Extend)                             тома

     Установить Директорию       17       Изменяет текущую директорию

     (Set Directory)

     Получить Директорию         18       Возвращает текущую директорию

     (Get Directory)

     Начать Транзакцию           19       Отмечает начало набора логически

     (Begin Transaction)                  связанных операций

     Закончить Транзакцию        20       Отмечает конец набора логически

     (End Transaction)                    связанных операций

     Снять Транзакцию            21       Удаляет операции выполненные

     (Abort Transaction)                  во время незавершенной

                                          транзакции

     Получить Позицию            22       Получает позицию текущей записи

     (Get Position)

     Получить Направление        23       Получает запись в заданной

     (Get Direct)                         позиции

     Шаг на Следующую            24       Получает запись физически

     (Step Next)                          следующую за текущей записью

     Остановить                  25       Завершает резидентные в памяти

     (Stop)                               программы Администратора Записей

                                          (Record Manager) на рабочей

                                          станции

     Версия                      26       Возвращает загруженную в

     (Version)                            текущее время версию Record

                                          Manager

     Отмена Захвата              27       Отменяет захват записи или

     (Unlock) записей                     записей

     Сброс                       28       Освобождает все ресурсы, взятые

     (Reset)                              рабочей станцией

     Установить Владельца        29       Присваивает файлу имя владельца

     (Set Owner)

     Стереть Владельца           30       Убирает имя владельца из файла

     (Clear Owner)

     Создать Дополнительный      31       Создает дополнительный индекс

     Индекс

     (Create Supplemental Index)

     Отбросить Дополнительный    32       Убирает дополнительный индекс

     Индекс

     (Drop Supplemental Index)

     Шаг на Первую               33       Возвращает запись физически

     (Step First)                         первую в файле

     Шаг на последнюю            34       Возвращает запись физически

     (Step Last)                          последнюю в файле

     Шаг на Предыдущую           35       Получает запись физически

     (Step Next)                          предыдущую текущей записи

  ---------------------------------------------------------------------

Смотри в главе 6 полное описание всех операций управления записями Btrieve. Глава 5 содержит инструкции по вызову Btrieve

из BASIC, Pascal, COBOL и C. Приложения C, D, E и F содержат примеры программ, иллюстрирующих как инициализировать параметры, выполнять обращения к Btrieve-функциям и проверять возвращаемые статусные коды.

КАК BTRIEVE РАБОТАЕТ

        NetWare Btrieve - базируемое на сервере дополнение Btrive Record

        Manager, работающее под управлением Advanced NetWare v2.1 и выше.

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

* Выполнение на сервере является централизованным, допускающим эффективное управление множества пользователей.

* Количество сетевых запросов уменьшено, что приводит к более быстрому их выполнению из-за улучшенного применения сервера.

* Уменьшается использование сети из-за меньшего количества данных передаваемых в сети.

Обращения к NetWare Btrieve имеют тот же формат, что и обращения к Btrieve в другой среде. Прикладные задачи единственного пользователя Btrieve, обращающегося к NetWare Btrieve, могут запросить дополнительные проверки статуса благодаря прверке параллелизма, запрашиваемого в многопользовательской среде.

Кроме того, для обеспечения базируемой на сервере системы управления записями для прикладных задач рабочих станций NetWare Btrieve также включает средства, позволяющие VAPs использовать обращения Btrieve к BSERVER. Программа BROUTER обеспечивает необходимую связь между BSERVER и другими VAP-прграммами.

ПРОГРАММА BSERVER

        Программа BSERVER должна быть загружена на каждый файл-сервер,

        где хранятся Btrieve-файлы. BSERVER состоит из ядра программы,

        осуществляющей взаимодействие специальных Btrieve-запросов,

оболочки сервера и модуля сетевых коммуникаций. BSERVER выполняет следующие функции:

* Она выполняет весь ввод/вывод на диск для Btrieve-файлов хранящихся на сервере, где она резидентно находится.

* Она запрашивает и отменяет все запреты на уровне записей и на

уровне файлов на сервере, где она резидентно находится.

* Она об'единяет в пакет все запросы Btrieve, выполняемые ей для передачи копии BREQUEST на рабочую станцию или копии BROUTER на сервер.

Прикладные программы и VAPs, осуществляющие Btrieve-вызовы, всегда взаимодействуют с BSERVER через BREQUEST или через BROUTER.

ПРОГРАМММА BREQUEST

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

* Получает Btrieve-запросы из Вашей прикладной программы и передает их BSERVER.

* Возвращает результаты Btrieve-запросов в Вашу прикладную задачу.

На рабочих станциях OS/2 BREQUEST.DLL и BTRCALLS.DLL программы динамических связей должны быть доступны прикладной программе. BTRCALLS.DLL-программа должна быть доступна для того, чтобы поддерживать совместимость между NetWare Btrieve и Btrieve для OS/2. BREQUEST.DLL-программа обеспечивает связь между Вашей прикладной программой и BSERVER.

ПРОГРАММА BROUTER

BROUTER-программа загружается на файл-сервер сети. Это - программа межпроцессорной связи, позволяющая VAP-программам загружаемым на файл-серверы сети взаимодействовать с BSERVER. Эта возможность позволяет Вам писать Btrieve прикладную программу как VAP, делая ее расположенной на сервере, а не программой клиента.

BROUTER-программа выполняет следующие функции:

* Она связывает работу VAP, выполняя Btrieve-прерывание.

* Она связывает работу всех станций, инициирующих Btrieve- запросы к VAP.

* Она выполняет доступ к Btrieve-файлам, хранящимся на одном или множестве серверов сети.

* Она преобразовывает в последовательность Btrieve-запросы

загруженные на одном или более серверов.

Смотрите "Интерфейс с BROUTER" для инструкций по созданию интерфейса с BROUTER.

УПРАВЛЯЮЩАЯ ЛОГИКА

NetWare Btrieve программы функционируют так, как будто они являются подпрограммами Вашей прикладной прграммы. NetWare Btrieve поддерживает два метода доступа к BSERVER:

* Прикладная задача рабочей станции может иметь доступ к BSERVER через BREQUEST-программу.

* Прикладная задача рабочей станции может вызывать VAP, который затем взаимодействует с BSERVER через BROUTER.

Следующие разделы описывают эти два метода доступа.

Д о с т у п к BSERVER ч е р е з BREQUEST

Следующие шаги описывают управляющую логику, когда прикладная задача рабочей станции имеет доступ к BSERVER через BREQUEST- программу, загружаемую на рабочую станцию.

* Ваша прикладная прграмма выдает Btrieve-запрос в форме вызова функции. Действительный вызов реализован несколько по разному в разных языках. Для простоты в данном руководстве будем ссылаться на Btrieve-вызов как на вызов функции.

* Короткая программа связи, включаемая в Вашу прикладную программу, объединяет параметры вызова в блоки памяти, сохраняет исходный стек и делает обращение к BREQUEST.

* BREQUEST упаковывает запрос в сетевое сообщение, определяет какой сервер должен получить запрос и пересылает сообщение в BSERVER-программу резидентную на этом сервере.

* BSERVER получает сетевое сообщение, проверяет достоверность параметров и затем выполняет инструкцию. В зависимости от инструкции могут включаться операция памяти или операция ввода/вывода на системное устройство хранения данных. BSERVER затем возвращает результаты операции в BREQUEST-программу на рабочей станции.

* BREQUEST возвращает соответствующие данные и код статуса в параметрические переменные или структуры в памяти Вашей прикладной задачи, восстанавливает исходный стек и возвращает управление Вашей программе.

Если прикладная задача на рабочей станции делает Btrieve-запросы как к локальному (неразделенному) устройству, так и к сетевому (разделенному) устройству, то на рабочей станции должна быть загружена копия Btrive Single User (однопользовательский Btrieve) или DOS 3.1 Networks также как и BREQUEST. BREQUEST определяет должен ли запрос быть передан в локальный Btrieve, обслуживающий неразделенные файлы, или в программу BSERVER, обслуживающую разделенные файлы на сервере.

Рисунок 1.2 изображает пример конфигурации для простой сети Novell, использующей NetWare Btrieve.

                              ФАЙЛ-СЕРВЕР

   -----------¬           -----------------¬        ----------------¬

   ¦Диск сети ¦<--------->¦  NetWare       ¦<---¬   ¦Локальный диск ¦

   L-----------           +----------------+    ¦   L----------------

                          ¦  BSERVER.VAP   ¦<----      /                             L-----------------            ¦

                               / \   / \               \ /

   ----------------¬            ¦     ¦        ----------------¬

   ¦  DOS 3.x      ¦            ¦     ¦        ¦  DOS 3.x      ¦<--¬

   +---------------+            ¦     ¦        +---------------+   ¦

   ¦ NetWare Shell ¦            ¦     ¦        ¦ NetWare Shell ¦   ¦

   +---------------+            ¦     ¦        +---------------+   ¦

   ¦               ¦<------------     ¦        ¦  Btrieve      ¦<---

   ¦  BREQUEST     ¦                  ¦        ¦ Record Manager¦<--¬

   ¦               ¦<---¬             ¦        +---------------+   ¦

   +---------------+    ¦             L------->¦  BREQUEST     ¦   ¦

   ¦ Прикладная    ¦<----                 ---->¦               ¦<---

   ¦ задача Btrieve¦                      ¦    +---------------+

   L----------------                      ¦    ¦ Прикладная    ¦

   Рабочая станция 1                      L--->¦ задача Btrieve¦

   имеющая доступ                              L----------------

   только к разделенным                        Рабочая станция 2

   Btrieve-файлам                              имеющая досту

                                               к разделенным и

                                               локальным

                                               Btrieve-файлам

                  Рисунок 1.2

        Конфигурация сети, использующей BSERVER.VAP

   (Обратите внимание, что Рабочая станция 2 имеет доступ как к

              разделенным так и к локальным файлам )

Рисунок 1.3 иллюстрирует сеть с конфигурацией множества серверов. На этой диаграмме файл-серверы A и B обслуживают разделенные файлы сети. Обратите внимание, все станции сети могут делать запросы к обоим файл-серверам. Программы BREQUEST, загруженные на рабочие станции, посылают запросы на соответствующий файл-сервер. Правильная идентификация файл-серверов и томов существенна для правильного функционирования системы.

                               ФАЙЛ-СЕРВЕР А

                            -----------------¬        -----------------¬

   ------------------------>¦    NetWare     ¦<------>¦Разделенный диск¦

   ¦  ----------------¬     +----------------+        L-----------------

   ¦  ¦    DOS 3.x    ¦     ¦  BSERVER.VAP   ¦<-----------------------¬

   ¦  +---------------+     L-----------------  ----------------¬     ¦

   ¦  ¦ NetWare Shell ¦                         ¦    DOS 3.x    ¦     ¦

   ¦  +---------------+                         +---------------+     ¦

   ¦  ¦               ¦                         ¦ NetWare Shell ¦     ¦

   +->¦   BREQUEST    ¦<---¬                    +---------------+     ¦

   ¦  ¦               ¦    ¦                    ¦               ¦     ¦

   ¦  +---------------+    ¦               ---->¦   BREQUEST    ¦<----+

   ¦  ¦ Прикладная    ¦<----               ¦    ¦               ¦     ¦

   ¦  ¦ задача Btrieve¦                    ¦    +---------------+     ¦

   ¦  L----------------                    L--->¦ Прикладная    ¦     ¦

   ¦  Рабочая станция 1                         ¦ задача Btrieve¦     ¦

   ¦                                            L----------------     ¦

   ¦                                            Рабочая станция 2     ¦

   ¦  ----------------¬                                               ¦                                          ¦

   ¦  ¦  DOS 3.x      ¦       ----------¬       ----------------¬     ¦

   ¦  +---------------+       ¦Локальный¦<----->¦    DOS 3.x    ¦     ¦

   ¦  ¦ NetWare Shell ¦       ¦  диск   ¦  ---->¦               ¦     ¦

   ¦  +---------------+       L----------  ¦    ¦---------------¦     ¦

   ¦  ¦               ¦                    ¦    ¦ NetWare Shell ¦     ¦

   +->¦   BREQUEST    ¦<---¬               ¦    ¦---------------¦     ¦

   ¦  ¦               ¦    ¦               L--->¦ Btrieve Record¦     ¦

   ¦  +---------------+    ¦               ---->¦    Manager    ¦     ¦

   ¦  ¦ Прикладная    ¦<----               ¦    +---------------+     ¦

   ¦  ¦ задача Btrieve¦                    L--->¦               ¦     ¦

   ¦  L----------------                         ¦   BREQUEST    ¦<----+

   ¦  Рабочая станция 3                    ---->¦               ¦     ¦

   ¦                                       ¦    +---------------+     ¦

   ¦                                       ¦    ¦ Прикладная    ¦     ¦

   ¦                                       L--->¦ задача Btrieve¦     ¦

   ¦                                            L----------------     ¦

   ¦                                            Рабочая станция 4     ¦

   ¦                       -----------------¬                         ¦

   L---------------------->¦  BSERVER.VAP   ¦<-------------------------

                           +----------------+

   -----------------¬      ¦   NetWare      ¦

   ¦Разделенный диск¦<---->¦                ¦

   L-----------------      L-----------------

                              ФАЙЛ-СЕРВЕР B

                        Рисунок 1.3

             Сеть с множеством файл-серверов

         (Обратите внимание, что BREQUEST, загруженный на каждую рабочую

станцию, может иметь доступ ко всем файл-серверам. Рабочая станция 4 имеет доступ как к разделенным так и к локальным Btrieve-файлам.)

Если Вы используете множество файл-серверов или интерсеть, все файл-серверы не должны быть в "online" при старте BREQUEST на рабочих станциях. BREQUEST распознает новые файл-серверы или устройства при обращении к новому файл-серверу или при изменении распределения сетевых устройств.

Д о с т у п к BSERVER ч е р е з BROUTER

------------------------------------

Примечание:

           Если Вы не используете Value-Added Process (VAP), доступный

           NetWare Btrieve, можете пропустить этот раздел.

           ______________________________________________________________

        Следующие шаги иллюстрируют управляющую логику при обращении

прикладной программы рабочей станции к VAP, который затем обращается к BSERVER через программу BROUTER.

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

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

* VAP получает сообщение сети, проверяет правильность параметров и упаковывает параметры вызова как Btrieve-запрос в блок памяти. Затем сохраняет ID клиента в регистре AX и выполняет прерывание 7B.

* BROUTER получает Btrieve-запрос, сохраняет информацию об источнике вызова и вызывает копию BSERVER, активную на сервере, где хранится файл.

* BSERVER выполняет запрос и возвращает результаты операции в BROUTER.

* BROUTER возвращает соответствующие данные и код статуса в параметрические переменные или структуры в памяти VAP и возвращает управление VAP.

* VAP возвращает соответствующую информацию в прикладную программу на рабочей станции.

Если прикладная программа рабочей станции делает Btrieve-запрос к локальному (неразделенному) устройству и к VAP, вызывающему

Btrieve, копия Btrieve Single User или DOS 3.1 Networks должна быть загружена на рабочую станцию. Рисунок 1.4 иллюстрирует логику управления, когда VAP имеет доступ к Btrieve-файлам используя NetWare Btrieve.

                               РАБОЧАЯ СТАНЦИЯ

                                 --------------¬

     1. Прикладная программа     ¦  Прикладная ¦

     на рабочей станции          ¦  программа  ¦

     посылает запрос в VAP1      +-------------+

                                 ¦Интерфейс VAP¦

                                 L---T----------

                                     ¦     /        2. Интерфейс VAP1 посылает      ¦      ¦       7. VAP1 возвращает

     запрос на сервер                ¦      ¦       результаты

                                     ¦      ¦       прикладную программу

                                     ¦      ¦       рабочей станции

                                     ¦СЕРВЕР¦

                                    \ /     ¦

                                   ---------+--¬

                                ---+   VAP1    ¦<-¬

     3. VAP1 упаковывает запрос ¦  ¦           ¦  ¦  6. BROUTER возвращает

     и выполняет прерывание     ¦  +-----------+  ¦  результаты в VAP1

     7B                         L->¦           +---

                                   ¦  BROUTER  ¦

     4. BROUTER получает Btrieve---+           ¦<-¬  5. BSERVER выполняет

     вызов и посылает его в     ¦  +-----------+  ¦  запрос и посылает

     BSERVER                    ¦  ¦           ¦  ¦  результаты в

                                L->¦  BSERVER  +---  BROUTER

                                   ¦           ¦     -------¬

                                   ¦           ¦<--->¦ Диск ¦

                                   L------------     L-------

                     Рисунок 1.4

                Применение другого VAP с BSERVER

КЭШ-БУФЕРЫ

Кэш-память - область памяти, резервируемая BSERVER для буферизации страниц, читаемых с диска. Вы определяете размер кэш-памяти при конфигурации BSERVER. Кэш-память разделена на ряд буферов, каждый - имеющий размер самой большой страницы, к которой будет иметь доступ Ваша прикладная программа. В основном большая кэш-память улучшает выполнение, т.к. позволяет большему количеству страниц быть в памяти в данное время. (См. Главу 3 для дополнительной информации о конфигурации BSERVER.)

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

Если все кэш-буферы заполнены, когда BSERVER необходимо передать новую страницу в память, по алгоритму "наименьшего использования" (LRV) определяется, какую страницу BSERVER перекрывает в кэш-памяти. LRU уменьшает время выполнения, сохраняя наиболее употребляемые страницы в памяти.

Когда Ваша прикладная программа добавляет или корректирует запись, BSERVER сперва модифицирует страницу в кэш-памяти, а затем записывает страницу на диск, Модифицированная страница остается в кэш-памяти до тех пор, пока LRU не определит, что она должна быть перекрыта новой страницей.

ПАРАМЕТРЫ ОБРАЩЕНИЯ К BTRIEVE

Btrieve запрашивает определенную информацию из Вашей прикладной программы для выполнения операций управления записями и файлами. Ваша прикладная программа использует параметры Btrieve-обращения для задания информации, необходимой Btrieve и обеспечения места для возвращаемой Btrieve информации. При каждом обращении к Btrieve Ваша прикладная программа должна передать Btrieve все параметры, требуемые используемым Вами языком, даже если Вы и не ждете их значений. Этот раздел дает общее описание параметров и как Btrieve их использует.

------------------------------------

Примечание:

             Для специфической информации о том, как использовать

          параметры в определенном языке см. Главу 5 "Интерфейс

          языков". Для информации о том, как Btrieve использует

          параметр для конкретной операции см. Главу 6 "Btrieve-

          операции записи".

             -----------------------------------------------------------

КОД ОПЕРАЦИИ

        Параметр кода операции сообщает Btrieve, какую операцию Вы хотите

        выполнить. Ваша прикладная программа должна задавать код операции

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

КОД СТАТУСА

Все Btrieve-операции возвращают значение кода статуса, информируя Вашу прикладную программу обо всех ошибках. Код статуса равный 0 показывает, что операция выполнена успешно. Для некоторых языков, в частности для С и Паскаля, вызов Btrieve - целая функция и Вашей прикладной программе не требуется задавать отдельный параметр для кода операции. Если Вы применяете язык, требующий отдельного параметра кода операции, задайте 2-байтовое целое для хранения возвращаемого значения.

БЛОК ПОЗИЦИИ

        Btrieve использует параметр блока позиции для хранения указателей

        позиционирования и другой информации, необходимой для доступа к

        какому-либо файлу. Ваша прикладная программа использует блок

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

Ваша прикладная программа должна присвоить уникальный блок позиции каждому Btrieve-файлу, его необходимо открыть и проинициализировать блоком пробелов или двоичных нулей до выполнения операции Open. Ваша прикладная программа НИКОГДА не должна писать в блок позиции после того, как он был проинициализирован и присвоен файлу, до тех пор пока Вы не

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

БУФЕР ДАННЫХ

Буфер данных - блок памяти, содержащий специфический вид информации, требуемый Btrieve-операцией.

Для операций, в которые вовлечена запись или чтение Btrieve- файла, блок данных содержит записи, которые Ваша прикладная программа передает в файл и из файла. Например, когда Ваша прикладная программа ищет запись в файле, Btrieve читает запись из файла и затем записывает запись в область памяти, указанную как блок записи для этой операции.

Для других операций блок данных содержит спецификации файла, определения и другую информацию, необходимую Btrieve для выполнения операции. Когда Ваша прикладная программа выполняет операцию Create, например, она создает блок данных, содержащий спецификации для создаваемого Вами файла в порядке, ожидаемом Btrieve. Btrieve затем читает буфер данных и создает файл согласно спецификации.

Btrieve распознает буфер данных как ряд байтов в памяти. Он не различает какие-либо поля или переменные как объекты буфера данных. Вы можете определить буфер данных как любой тип переменных, поддерживаемых Вашим языком: структурой, массивом или простой строковой переменной. Для некоторых версий Бейсика буфер данных - область Блока управления файла (FCB), определяемая сегментом FIELD.

ДЛИНА БУФЕРА ДАННЫХ

Для всех операций, требующих буфер данных, Ваша прикладная программа должна задать для Btrieve длину буфера данных в байтах. Это необходимо потому, что

* Btrieve позволяет Вам определять файлы, допускающие записи переменной длины. Вы должны задать, какое количество байтов Вам хочется прочитать из этих записей или записать в них.

  * Btrieve не распознает какие-либо структуры данных Вашей программы. Он явно не знает длину буфера данных в байтах. Это создает возможность записи данных, не имеющих значений, в Ваши файлы или возврата большего количества данных, чем может содержать буфер данных, и наложения записей на область памяти, следующую за буфером данных.

Ваша прикладная программа должна определить буфер данных как 2-байтовое целое, При всех операциях Btrieve записывает некоторое значение в параметр длины буфера данных, даже если это значение равно 0 (показывающее, что не было возвращено данных). Поэтому Вы должны всегда инициализировать буфер данных соответствующей длины

для какой-либо операции до вызова Btrieve.

Применяйте следующие правила для инициализации значения параметра длины буфера данных:

* Когда Вы читаете из существующего файла или пишете в существующий файл и файл содержит записи фиксированной длины, задавайте значение равное длине записи, определенное для этого файла.

* Когда Вы читаете из существующего файла или пишете в существующий файл и файл содержит записи переменной длины, задавайте значение равное длине, определенной для фиксировнной части записи, плюс количество байтов, которое Вы хотите читать или писать за фиксированной частью.

* Когда Вы запрашиваете какую-либо другую операцию, задавайте точную длину буфера данных, требуещуюся для этой операции. Эти требования включены в обсуждение Btrueve-операций в Главе 5 этого руководства.

БУФЕР КЛЮЧА

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

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

НОМЕР КЛЮЧА

Параметр номера ключа всегда 2-байтовая целая переменная со знаком. Для большинства Btrieve-операций этот параметр сооббщает Record Manager о пути доступа в этой операции. Для других операций Ваша прикладная программа использует параметр номера ключа для задания режима открытия файла, шифровки, логического устройства или другой информации. Btrieve никогда не изменяет значение параметра номера ключа.

Когда Вы используете параметр номера ключа для задания пути доступа к файлу, номер должен быть от 0 до 23, т.к. Btrieve допускает до 24 ключей или ключевых сегментов в файле.

ИНТЕРФЕЙС ЯЗЫКА

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

Когда Ваша прикладная программа обращается к Btrieve, интерфейс делает предварительные проверки параметров и проверяет, находится ли Btrieve Record Manager резидентно в памяти. Если интерфейс не обнаруживает ошибок, он выполняет соответствующее обращение для операционной среды, активизируя программу Record Manager.

ГЛАВА 3. ЗАПУСК СЕТИ BTRIEVE

Эта глава содержит информацию, необходимую для инсталяции и конфигурации NetWare Btrieve для Вашей системы.

СИСТЕМНЫЕ ТРЕБОВАНИЯ

NetWare Btrieve должeн запускаться под управлением NetWare v2.1x или выше. Для обеспечения индивидуальных операций записи на диск и сохранности файлов и их восстановления в случае сбоя файл-сервера требуется Система связи транзакций (Transaction Tracking System).

------------------------------------

           В а ж н о :

           Сеть Btrieve не запускается под управлением

           ELS NetWare уровня I или Advanced NetWare 68, т.к.

           эти версии не поддерживают Value-Added Processes

           ----------------------------------------------------

Btrieve требует сетевой файл-сервер с памятью, достаточной для загрузки сети, BSERVER и BROUTER. В большинстве случаев файл-сервер должен иметь минимум 2МВ памяти для эффективного запуска и NetWare, и Btrieve.

Программа "Btrieve инициатор запросов" (BREQUEST) требует приблизительно 25КВ памяти для каждого рабочего места (при допущении, что она загружена со стандартными режимами запуска). Точное количество требуемой памяти зависит от заданных Вами режимов запуска при загрузке программы.

Если Вы используете систему межсетевого обмена, рабочие станции на вершинах этих сетей, использующие NetWare Btrieve, должны иметь доступ к файл-серверу, загруженному с BSERVER и BROUTER.

B T R I E V E - Д И С К Е Т Ы

NetWare Btrieve расположен на двух дискетах: дискете с программами "PROGRAMS" и дискете с утилитами "UTILITES". Вы должны сделать копии Btrieve-дискет, сохранив дискеты-оригиналы на случай повреждения или потери копий. Дискеты-оригиналы Btrieve имеют защиту записи, поэтому Вы не можете случайно уничтожить или

заменить их содержание.

Дискета "PROGRAMS" содержит следующие файлы:

ФАЙЛ ОПИСАНИЕ

BSERVER.VAP Файл, загружаемый NetWare как Value-Added Process

на файл-сервер

BROUTER.VAP Программа сообщений Btrieve. Эта программа

                        используется для обеспечения межпроцессорных

                        связей между BSERVER и другими VAP-продуктами,

               такими как NetWare SQL.

BREQUEST.EXE Btrieve инициатор запросов для рабочих станции

                     DOS. Это резидентная в памяти программа,

               загружаемая Вами на каждую рабочую станцию,

                        делающую Btrieve-запросы. BREQUEST пересылает

               Btrieve-запросы из Вашей  прикладной программы на

               файл-сервер.

BREQURST.DLL Btrieve инициатор запросов для рабочих станций

                     OS/2. Это библиотека динамических связей, которую

               OS/2 связывает с каждой прикладной прграммой

               Btrieve. Программы BREQUEST пересылают

               Btrieve-запросы из Вашей прикладной программы в

               файл-сервер.

BTRCALLS.DLL Btrieve-подпрограмма динамических связей для

                        рабочих станций OS/2. Эта программа включена

                        для устранения необходимости повторного

                        редактирования связей программ OS/2 специально

               для NetWare Btrieve.

Дискета "UTILITIES" содержит следующие файлы:

BUTIL.EXE Автономная утилита Btrieve.

BSETUP.EXE Утилита конфигурации и инсталяции Btrieve.

BSETUP.HLP Файл сообщений для программы BSETUP.

BASXBTRV.EXE Резидентный в памяти BASIC-интерфейс,

используемый BASIC-интерпритатором.

BASXBTRV.OBJ Объектный модуль, содержащий интерфейс IBM

Compiled BASIC с Btrieve

QBIXBTRV.OBJ Объектный модуль, содержащий интерфейс

Microsoft QuickBASIC с Btrieve.

PASXBTRV.OBJ Объектный модуль, содержащий интерфейс

                        Паскаля для IBM (или Microsoft) компилятора

                        Паскаля

TURXBTRV50S Исходный модуль, содержащий интерфейс

Паскаля для компилятора Турбо-Паскаля.

BEXTERN51S Исходный файл Паскаля, содержащий внешнее

объявление для функции BTRV.

COBXBTRV.OBJ Объектный модуль, содержащий интерфейс

Кобола для компилятора Microsoft Cobol, v2.

MSCXBTRV.C Исходный модуль для интерфейса Microsoft C

с Btrieve.

C2XBTRV.C Исходный модуль интерфейса C, используемый

в прикладных задачах OS/2 в защищенном режиме.

C2FXBTRV.C Исходный модуль интерфейса C, используемый в

                        прикладных задачах OS/2 FAPI, запускаемых или в

               защищенном режиме или в режиме эмуляции.

UPPER.ALT Файл, содержащий определение альтернативной

                        последовательности поиска, которая сравнивает

               клавиши верхнего и нижнего регистра, как будто бы

               они были все на верхнем регистре.

       B.EXE            Исполнитель Btrieve-функций, тестирующая и

                        обучающая программа.

README.DOC Документ, описывающий любые изменения или

                        дополнения в Btrieve со времени опубликования

               руководства.

INTRFACE.DOC Документ, описывающий интерфейс с языками,

                        поставленный на дискете Btrieve, но не

                        обсуждаемый в данном руководстве.

К О Н Ф И Г У Р А Ц И Я И И Н С Т А Л Я Ц И Я BTRIEVE

До того, как Ваша прикладная программа сможет иметь доступ к NetWare Btrieve, Вы должны сперва конфигурировать Btrieve- программы и затем инсталировать их на файл-сервер.

Файлы BSERVERR.VAP и BROUTER.VAP, включенные на дискету "PROGRAMS", снабжены стандартными вариантами инициализации. Т.к. эти значения адекватны для многих систем, возможно, Вам не потребуется их корректировать. В этой главе обсуждаются варианты конфигурации Btrieve и объясняется, как применять программу BSETUP.EXE для конфигурации и инсталяции соответствующих Вашим требованиям версий BSERVER.VAP и BROUTER.VAP на Вашем файл-сервере.

РЕЖИМЫ КОНФИГУРАЦИИ BTRIEVE

Для правильного функционирования Btrieve при загрузке должен зарезервировать память и ресурсы. Вы можете установить в Btrieve требования для своей системы, задавая набор опций конфигурации. Они

включают:

* Максимальное число открытых файлов.

* Максимальное число обрабатываемых файлов.

* Максимальное число блокировок записей.

* Число парралельных транзакций.

* Максимальный размер буфера сжатия.

* Максимальная длина записи.

* Максимальный размер страницы.

* Максимальное число параллельных сеансов.

* Время задержки обновления консоли.

* Автоматическая установка флагов транзакций.

В разделах на следующих страницах обсуждается каждая опция, заданные по умолчанию значения и требуемая при необходимости память.

М а к с и м а л ь н о е ч и с л о о т к р ы т ы х ф а й л о в

Границы: 1-255

По умолчанию: 20

Требуемая память для каждого файла: 115 байт

Опция "Максимальное число открытых файлов" позволяет Вам задать максимальное число уникальных файлов, которое можно открыть на файл-сервере в люббое время. Btrieve использует заданное Вами значение для определения размера внутренних таблиц, используемых для доступа к активным файлам. Каждый уникальный Btrieve-файл на файл-сервере треббует один вход.

М а к с и м а л ь н о е ч и с л о о б р а б а т ы в а е м ы х ф а й л о в

Границы: 1-<предел сети>

По умолчанию: 60

Требуемая память для каждого обрабатываемого файла: 114 байт

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

М а к с и м а л ь н о е ч и с л о б л о к и р о в о к з а п и с е й

Границы: 0 - <предел сети>

По умолчанию: 20

Требуемая память для каждой блокировки: 8 байт

Опция "Максимальное число блокированных записей" устанавливает максимальное число записей, которое может быть заблокировано одновременно на файл-сервере. Она определяет число входов для таблицы запретов, которую Btrieve строит при загрузке. Значение этой опции включает блокировки как единственной так и множества записей. Для вычисления значения этой опции определите максимальное число записей, которое можно открыть на каждой рабочей станции, и умножьте это число на число рабочих станций, имеющих доступ к Btrieve-файлам.

Ч и с л о п а р р а л е л ь н ы х т р а н з а к ц и й

Границы: 0 - <максимальное число сеансов>

По умолчанию: 0

Требуемая память для каждой транзакции: 1 046 байтов

Опция "Число парралельных транзакций" устанавливает максимальное число станций, которые могут иметь парралельные активные транзакции на файл-сервере. Если Вы задаете для этой опции значение равное 0, ни одна из рабочих станций не может запрашивать операцию Begin Transaction на файл-сервере. Если Вы задаете для этой опции значение большее 0, Btrieve создает файл транзакций BTRIEVE.TRN в директории \SYS\SYSTEM на файл-сервере и позволяет Вам использовать столько активных транзакций, сколько Вы задали.

М а к с и м а л ь н ы й р а з м е р с ж а т о й з а п и с и

Границы: 0 - <самая длинная запись в сжатом файле>

По умолчанию: 0

Требуемая память для каждой транзакции: 2 * число заданных килобайт

Опция "Максимальный размер сжатой записи" задает размер (в килобайтах) самой длинной записи в сжатом файле, к которой Вы будете иметь доступ. Btrieve расположит заданное Вами удвоенное число килоайт в свой буфер сжатия. Задание большего, чем Вам необходимо, значения не приведет к улучшению выполнения, а может привести к уменьшению памяти, доступной для других процессов на файл-сервере.

Если Вы используете сжатые файлы, установите значение для этой опции, равные размеру самой длинной записи в Ваших сжатых файлах. Задавайте значение в килобайтах. Округляйте все значения до следующего большего килобайта. Например, если самая длинная запись допускает длину 1 800 байт, задайте значение 2 для этой опции.

Если Вы не используете сжатые файлы, установите значение в 0.

М а к с и м а л ь н а я д л и н а з а п и с и

Границы: 4 байта - 32KB

По умолчанию: 8 912 байт

Требуемая память: (заданное значение + 269 байт)

Опция "Максимальная допустимая длина записи" задает длину самой длинной записи, которую допускает прикладная задача Btrieve на этом файл-сервере. Всегда задавайте длину записи в байтах. Задание большего значения, чем Вам необходимо, не приводит к улучшению выполнения.

М а к с и м а л ь н ы й р а з м е р с т р а н и ц ы

Границы: 512 - 4 096 байт

По умолчанию: 4 096 байт

Требуемая память: нет

Опция "Максимальный допустимый размер страницы" позволяет Btrieve вычислять размер необходимых кэш-буферов. Значение, что Вы здесь задаете, должно равняться максимальному размеру страницы Btrieve-файла, к которому Вы хотите иметь доступ. Оно должно быть кратно 512 байтам, но не больше чем 4 096 байт.

М а к с и м а л ь н о е ч и с л о п а р а л л е л ь н ы х с е а н с о в

Границы: 1-<число задач на рабочей станции>

По умолчанию: 15

Требуемая память для каждого сеанса: 1 296 байт

Опция "Максимальное число параллельных сеансов" задает максимальное число задач на рабочей станции, которые могут иметь доступ к BSERVER в любое время. Сеанс определяется как одна копия связи BREQUEST с программой BSERVER. Каждый сеанс занимает два пакетных буфера Btrieve-запросов.

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

В р е м я з а д е р ж к и о б н о в л е н и я к о н с о л и

Границы: 1 - 60 секунд

По умолчанию: 3 секунды

Требуемая память: нет

Опция "Время задержки обновления консоли" управляет числом секунд задержки B STATUS и B ACTIVE перед обновлением экрана новой информацией. Задержка позволяет Вам сохранить читабельность информациии, наблюдая эффект работы базы данных в режиме реального времени.

А в т о м а т и ч е с к а я у с т а н о в к а ф л а г о в т р а н з а к ц и й

Границы: Да/Нет

По умолчанию: Нет

Требуемая память: нет

Опция "Автоматическая установка флагов транзакций" управляет автоматической установкой флагов файлов как допускающих транзакции во время создания их Вами в системе. Если Вы ответите "Yes" ("Да"), Btrieve установит флаги транзакций для вновь создаваемых файлов. во время создания их Вами в системе. Если Вы ответите "No" ("Нет"), Btrieve не установит флаги транзакций для файлов.

задать максимальное число уникальных файлов,

ОПЦИИ ИНСТАЛЯЦИИ

Программа BSETUP создана для предоставления Вам следующих опций инсталяции:

* Вы можете инсталировать BSERVER и BROUTER непосредственно на файл-сервере. В этой ситуациия Вы должны войти в систему как SUPERVISOR или иметь права супервизора. Если Вы не вошли в сисиему как SUPERVISOR, опции "Install" и "Remove" не будут отображены в меню.

* Вы можете скопировать файлы BSEVER.VAP и BROUTER.VAP в поддиректорию или на дискету, запустить BSETUP для конфигурации копии, и затем инсталировать копию на текущем файл-сервере или переслать файл на другой файл-сервер.

ЗАПУСК BSETUP

Для запуска BSETUP выполните следующие шаги:

1. Стартуйте персональный компьютер, который Вы будете использовать для запуска BSETUP.

2. Скопируйте файлы BSEVER.VAP и BROUTER.VAP в поддиректорию или на дискету, в зависимости от опций инсталяции.

3. Удостоверьтесь, что текущая директория - поддиректория, на которую Вы скопировали программы NetWare Btrieve.

4. После подсказки DOS введите следующую команду:

BSETUP <<Enter>

ПРИМЕНЕНИЕ BSETUP

Когда BSETUP загружен, появится меню подобное следующему:

                 Available Options

           Change File Server

           Install Btrieve

           Remove Btrieve

           Save Configuration

           Set Configuration

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

Используйте клавиши Up и Down , чтобы высветить опции меню. Если Вы

хотите выйти из меню, нажмите <Esc>.

Для выхода из BSETUP нажмите <Esc> в меню "Available Options" и высветите "Yes" в меню "Exit BSETUP".

CHANGE FILE SERVER

(Изменение файл-сервера)

Опция "Change File Server" позволяет Вам выбрать файл-сервер, на котором Вы хотите конфигурировать, инсталировать, удалить или сохранить NetWare Btrieve.

Для изменения файл-серверов выполните следующие шаги:

1. Используйте клавиши Up и Down , чтобы высветить опцию "Change File Server" и нажмите <Enter>.

        Появится меню, перечисляющее имена файл-серверов подключенных

        к рабочей станции в текущее время.

2) Используйте клавиши Up и Down , чтобы высветить имя файл-сервера

        на котором Вы хотите выполнять операцию BSETUP и нажмите

        <Enter>.

        Будет короткая пауза и вновь появится меню "Available

        Options"

        Если у Вас есть права супервизора на выбранном Вами

        файл-сервере, появятся все опции меню. Вы сможете сейчас

        конфигурировать, инсталировать, удалять или сохранять NetWare

        Btrieve на этом файл-сервере.

        Если у Вас нет прав супервизора на выбранном Вами

        файл-сервере, опции "Install NetWare Btrieve" и "Remove

        NetWare Btrieve" не появятся. Вы сможете только

        конфигурировать и сохранять конфигурацию NetWare Btrieve на

        файл-сервере, на котором Вы не имеете прав супервизора.

SET CONFIGURATION

(Установка конфигурации)

Опция "Set Configuration" позволяет Вам определять опции Btrieve для копирования Btrieve в текущую директорию.

------------------------------------

           В а ж н о :

           Если BSERVER.VAP и BROUTER.VAP нет в текущей директории,

        когда Вы пытаетесь установить опции инициализации,

        BSETUP возвратит сообщение об ошибке и прервет выполнение.

           ----------------------------------------------------------

Чтобы установить одну или несколько опций инициализации, выполните следующие шаги:

1. Высветите меню "Set Configuration" в меню "Available Options" и нажмите <Enter>.

Появится меню подобное следующему:

                       Number of open files: 20

                       Number of handles: 60

                         Number of locks: 20

                   Number of transactions: 0

        Largest compressed record size: 8192

                     Largest page size: 4096

                      Number of sessions: 15

                    Console refresh count: 3

          Create files as transactional: Yes

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

2) Высветите поле, которое Вы хотите задать.

3) Введите новое значение и нажмите <Enter>.

Если Вы нажмете <Esc>, будет действовать предыдущее определение опции.

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

4) Продолжайте высвечивать поля и вводить новые значения для всех

опций, что Вы хотите определить.

Когда Вы введете нужные значения, нажмите <Esc>, чтобы вернуться в меню " Available Options". Вы должны выполнить опцию "Save Configuration" для того , чтобы заданные вновь значения были сохранены в программах NetWare Btrieve в текущей директории.

SAVE CONFIGURATION

(Сохранение конфигурации)

Опция "Save Configuration" позволяет Вам сохранять конфигурацию Btrieve в копиях BSERVER.VAP и BROUTER.VAP в текущей директории. Вы не обязаны входить в систему как SUPERVISOR для сохранения новой конфигурации Btrieve.

Чтобы сохранить новую конфигурацию Btrieve, выполните следующие

шаги:

1. Высветите "Save Configuration" и нажмите <Enter>.

Появится подсказка "Update Btrieve".

2) Высветите "Yes" и нажмите <Enter>.

Когда Вы сохраните новую конфигурацию, BSETUP установит новые значения опций Btrieve в копиях BSERVER.VAP и BROUTER.VAP, хранящихся в текущей директории.

BSETUP вернет Вас в меню "Available Options".

Если Вы хотите, чтобы новая конфигурация действовала на текущем файл-сервере, выполните опцию "Install Btrieve' в меню "Available Options" и затем перезагрузите сеть.

INSTALL BTRIEVE

(Инсталяция Btrieve)

Опция " Install Btrieve" позволяет Вам инсталировать Btrieve на файл-сервере, в который Вы вошли в данный момент. Вы должны войти в систему как SUPERVISOR или иметь права супервизора для инсталяции Btrieve на файл-сервере.

Для инсталяции Btrieve, выполните следующие шаги:

1. Высветите опцию "Install Btrieve" в меню "Available Options" и нажмите <Enter>.

Если NetWare Bteieve не инсталирован на текущем файл-сервере, появтися бокс входа, подсказывающий ввести пароль для Btrieve.

Если NetWare Bteieve уже инсталирован на текущем файл-сервере, появтися подсказка, спрашивающая хотите ли Вы заменить инсталированные в данное время программы. Если - да, то выполните следующие шаги:

1. Для отмены инсталяции и возврата в меню "Available Options", высветите "No" и нажмите <Enter>, или нажмите <Esc>.

2. Для замены существующей конфигурации высветите "Yes" и нажмите <Enter>.

Если Вы ответите "Yes" на подсказку "Replace Bteieve", появтися бокс входа, подсказывающий ввести пароль для Btrieve.

3) NetWare Btrieve требует пароль для идентификации себя в NetWare

Это предохраняет от получения доступа к NetWare неавторизированных программ через объектное имя Btrieve.

Для отмены инсталяции в этот момент и возврата в меню "Available Options" нажмите <Esc>.

Для продолжения инсталяции введите пароль для Btrieve из не болле, чем восьми символов, и нажмите <Enter>. Если Вы не хотите задавать пароль, но хотите продолжить инсталяцию, нажмите <Enter> при подсказке пароля. Появится подсказка "Install BROUTER".

------------------------------------

           В а ж н о :

        Подсказка пароля - это последний шаг процесса инсталяции,

        когда Вы можете полностью отменить инсталяцию без инсталяции

        программ NetWare Btrieve. Если Вы продвинулись немного дальше

        в этом процессе, Вы должны синсталировать по крайней мере

        программу BSERVER.

           ----------------------------------------------------------

4) Подсказка "Install BROUTER" дает Вам опцию инсталяции программы BROUTER в то же самое время, что и BSERVER.

Для инсталяции как BSERVER так и BROUTER высветите "Yes" и нажмите <Enter>. BSETUP будет:

* Копировать BSERVER.VAP и BROUTER.VAP в директорий SYS\SYSTEM на предпочтительный файл-сервер;

* Определять программы NetWare Btrieve как объектные в NetWare и присваивать BSERVER заданный Вами пароль. (BROUTER не требует пароля).

Для инсталяции только BSERVER высветите "No" и нажмите <Enter>. BSETUP будет:

* Копировать BSERVER.VAP в директорий SYS\SYSTEM на предпочтительный файл-сервер;

* Определять BSERVER как объектный в NetWare и присваивать заданный Вами пароль.

Не инсталируйте BROUTER, если Вы не используете другой VAP для Btrieve-обращений (такой как NetWare SQL).

5) После того, как Вы инсталировали новые Btrieve программы на

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

REMOVE BTRIEVE

(Удаление Btrieve)

Опция "Remove Btrieve" удаляет Btrieve программы с файл-сервера,

на котором Вы зарегестрированы в данное время. Как только Вы выполнили эту опцию, Btrieve VAP уже не будут загружены на этом файл-сервере. Вы должны быть зарегистрированы как SUPERVISOR или обладать правами супервизора для удаления Btrieve с файл-сервера.

Для удаления Btrieve с файл-сервера, выполните следующие шаги:

1. Высветите опцию "Remove Btrieve" и нажмите <Enter>.

Появится подсказка "Remove Btrieve".

2) Высветите "Yes" и нажмите <Enter>.

Когда Вы выберете эту опцию, BSETUP будет:

* Удалять BSERVER.VAP (и BROUTER.VAP, если он инсталирован) из директория SYS:SYSTEM на предпочтительном файл-сервере:

* Удалять объектное имя Btrieve и пароль из сети.

------------------------------------

           В а ж н о :

        Если NetWare SQL определен как объектный модуль в программе

        связей Btrieve, BSETUP не удалит програмные файлы NetWare

        Btrieve. Вы должны удалить програмные файлы NetWare SQL с

        файл-сервера для того, чтобы суметь удалить програмные файлы

        NetWare Btrieve. См. Главу 3 "NetWare SQL User's Manual" для

        дополнительной информации,

        ----------------------------------------------------------

ОСТАНОВКА BTRIEVE VAPS

Как только BSERVER и BROUTER активизированы, они остаются резидентными в памяти файл-сервера в течении всего времени работы операционной системы NetWare. Вы не можете удалить их из памяти файл-сервера, если сначала не удалите их с файл-сервера, применяя утилиту BSETUP (см. "REMOVE BTRIEVE" на предыдущих страницах) и затем не перезапустите операционную систему.

Когда Вы запрашиваете команду DOWN на файл-сервере, BSERVER выполняет переустановку всех активных связей сети, имеющих доступ к файлам на файл-сервере.

П Р О Г Р А М М А BREQUEST

(BROUTER не требует пароля). NetWare Btrieve имеет программы BREQUEST для рабочих станций как DOS так и OS/2. В этом разделе описаны опции запуска BREQUEST и инструкции для запуска BREQUEST в обеих средах.

ОПЦИИ ЗАПУСКА BREQUEST

Этот раздел описывает опции запуска BREQUEST и значения, которые Вы можете им присваивать.

[/R:распределеные накопители]

Опция /R указывает максимальное число распределеных накопителей, к которым имеет доступ рабочая станция. Когда Вы опускаете эту опцию, BREQUEST использует значение по умолчанию равное трем. Каждый заданный Вами накопитель увеличивает размер резидентной памяти BREQUEST на 20 байт. Например, если рабочая станция имеет пять распределенных накопителей, задайте опцию /R следующим образом:

/R:5

[/D:длина передаваемых данных]

Опция /D задает длину самой длинной записи, к которой Вы имеете доступ через Btrieve. BREQUEST использует задаваемое Вами здесь значение для вычисления длины буфера передаваемых данных, который он резервирует для передачи данных между BSERVER и Вашей прикладной программой. Значение вводимое здесь должно быть равно максимальной длине записи, что вы конфигурируете для Btrieve через программу BSETUP. См. раздел "Максимальная длина записи" в этой главе.

Значение по умолчанию для опции /D равно 2048 байт. Максимальная длина записи, что Вы можете задать, равна 32KB. Задавая большее значение, Вы не достигнете улучшения выполнения.

BREQUEST поддерживает две копии буфера передаваемых данных. Опция /D увеличивает размер резидентной памяти BREQUEST на удвоенное число заданных Вами байт плюс 538 байт.

Всегда задавайте длину записи в байтах. Например, если самая длинная запись, используемая Вашей программой, имеет длину 3000 байт, задайте опцию /D следующим образом:

/D:3000

[/S:число файл-серверов]

Опция /S задает число файл-серверов, к которым может обратиться рабочая станция. Значение по умолчанию для опции /S равно единице максимальное допустимое значение равно восьми. Например, если рабочая станция имеет накопители, расположенные на трех файл-серверах, задайте опцию /S следующим образом:

/S:3

BREQUEST ДЛЯ РАБОЧИХ СТАНЦИЙ DOS

Вы должны стартовать программу BREQUEST на рабочей станции до того, как рабочая станция сможет иметь доступ к файлам сети Btrieve через BSERVER.VAP Если вы хотите иметь доступ к локальным файлам на рабочей станции, Вы должны загрузить копию Btrieve Record Manager (или Single User или DOS 3.1 Network) до загрузки BREQUEST.

Стартуйте BREQUEST на рабочей станции, выполнив следующую команду:

         <Накопитель>BREQUEST[/R:число распределенных накопителей]

                 [/D:длина передаваемых данных]

                 [/S:число файл-серверов]

Замените <Накопитель> именем накопителя, на котором хранится BREQUEST. Вы можете опустить имя накопителя, если BREQUEST хранится на накопителе, заданном по умолчанию, или если BREQUEST расположен в директории Вашего пути поиска.

Опции запуска BREQUEST описаны на предыдущих страницах.

Например, для задания 4 распределенных накопителей, длины передаваемых данных равной 2048 байт и 2 файл-серверов, применяйте следующую команду:

BREQUEST /R:4 /D:2048 /S:2

Для уверенности, что опции запуска всегда загружены, поместите команду BREQUEST в файл AUTOEXEC.BAT на рабочей станции

BREQUEST ДЛЯ РАБОЧИХ СТАНЦИЙ OS/2

BREQUEST.DLL и BTRCALLS.DLL,прграммы динамических связей Btrieve, должны быть инсталированы на раочей станции до того, как рабочая станция сможет иметь доступ к файлам сети Btrieve через BSERVER.VAP. Когда стартует первая прикладная программа Btrieve, OS/2 загружается автоматически.

И н с т а л я ц и я BREQUEST

Для инсталяции BREQUEST для OS/2 скопируйте файлы BREQUEST.DLL и BTRCALLS.DLL с дискеты в:

* Один из директорий, заданных в команде LIBPATH в файле CONFIG.SYS

* Корневой директорий загрузочного драйва OS/2.

См. руководство по OS/2 для дополнительной информации о LIBPATH

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

------------------------------------

           В а ж н о :

        BREQUEST.DLL и BTRCALLS.DLL,прграммы динамических связей,

        поставляемые с NetWare Btrieve, позволяют иметь доступ только

        к перемещаемым файлам. Прикладная программа на рабочей станции

        OS/2 не может иметь доступ к локальным файлам с помощью этих

        программ.

        ----------------------------------------------------------

И н и ц и а л и з а ц и я BREQUEST

Вы можете задать опции инициализации, специфические для каждой прикладной программы Btrieve, запускаемой на рабочей станции. BREQUEST использует переменную среды OS/2 REQPARMS для определения опций инициализации, необходимых прикладной программе. Опции инициализации BREQUEST описаны на предыдущих страницах этой главы в разделе "Опции запуска BREQUEST".

Установите опции инициализации BREQUEST, применяя следующую команду среды:

          SET REQPARMS=[/R:число распределенных накопителей]

                 [/D:длина передаваемых данных]

                 [/S:число файл-серверов]

Не делайте пробелов между именем переменной REQPARMS и знаком равенства. Вы можете вставлять пробелы между задаваемыми Вами опциями инициализации.

Например, задавайте 4 распределенных накопителя, длину передаваемых данных в 2048 байт и 2 файл-сервера, применяя следующую команду:

SET REQPARMS=/R:4/D:2048/S:2

Для уверенности, что опции запуска всегда загружены, поместите команду SET REQPARMS в один из специальных загрузочных файлов инициализации, применяемых для OS/2.

ОСТАНОВКА BREQUEST

НА РАБОЧЕЙ СТАНЦИИ DOS существует два метода для удаления BREQUEST из памяти:

* Ваша прикладная программа может запросить операцию Stop (Btrieve-операция 25).

* Вы можете запросить команду BUTIL_STOP из командной строки рабочей станции

НА РАБОЧЕЙ СТАНЦИИ OS/2 операционная система удаляет программы динамических связей из памяти, когда завершена последняя прикладная программа Btrieve. Вы не можете удалить программы динамических связей из памяти, пока активна какая-либо прикладная программа Btrieve, т.к. операционная система динамически связываетих с прикладной программой при ее загрузке.

{[logo.gif]}  {[eXclusive Banner Network]}{[GooDoo 120]}

{Программы} •{Железо} • {Драйверы} • {Хостинг} •{Энциклопедия рекламы}

| {<<} | {<} | {>} | {>>}

------------------------------------

ГЛАВА 4. УТИЛИТЫ

        NetWare Btrieve обеспечивает Вас полным набором утилит,

        помогающим Вам при создании и поддержке файлов, тестировании и

        отладке. Вдобавок, NetWare Btrieve включает некоторые утилиты

        командных строк, которые позволяют Вам управлять

        функционированием NetWare Btrieve в Вашей сети.

        Три утилиты NetWare Btrieve:

          - BUTIL.EXE - программа, содержащая команды позволяющие Вам

            создавть и управлять файлами данных Btrieve;

          - B.EXE (Исполнитель Btrieve-функций) - интерактивная утилита,

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

            отладки логики Вашой прикладной программы.

          - Утилиты Командных Строк - утилиты, позволяющие Вам управлять

            функционированием NetWare Btrieve в Вашей сети.

ПРОГРАММА BUTIL

        Программа BUTIL содержит полный набор команд для применения при

        создании, поддержке и восстановлении файлов. Следующие разделы

        описывают, как запускать BUTIL, контролировать сообщения об

        ошибках BUTIL, создавать BUTIL-описания файлов и файлы

        альтернативной последовательности поиска. Команды BUTIL

        представлены в алфавитном порядке под заголовком "Команды BUTIL"

        ЗАПУСК BUTIL

        Для запуска BUTIL выполните следующие шаги:

        1) Стартуйте программу BREQUEST до запуска BUTIL. Если Вам нужна

           помощь в этой процедуре, см. "Программа BREQUEST" в Главе 3.

        2) Введите команду BUTIL в следующем формате:

            <Устройство>:BUTIL-COMMAND[Параметры][-O<Владелец>]

        Замените <Устройство> именем накопителя или другого устройства,

        содержащего програмные файлы Btrieve. вы можете опустить

        устройство, если Вы намерены использовать диск, заданный по

        умолчанию.

        Замените _COMMAND именем Btrieve-команды (COPY, LOAD и т.д.),

        которую Вы хотите использовать. Вы должны поставить перед

        командой  черточку (-).

        Замените <Параметры> информацией, необходимой BUTIL для

        выполнения выбранной Вами команды. Команды описаны под заголовком

        соответствующей команды.

        Замените <Владелец> или именем владельца Btrieve-файла, к

        которому будет иметь доступ команда, или звездочкой (*). Если Вы

        используете звездочку вместо имени владельца, BUTIL подскажет Вам

        имя владельца файла. BUTIL требует параметр -O<Владелец>, если

        какой-либо из Btrieve-файлов, заданных в команде, требует имя

        владельца.

        BUTIL отбрасывает ведущие пробелы, тем не менее звездочка (*) -

        первый непробельный символ параметра -O.

        Если Вы задаете два Btrieve-файла в команде, Вы должны задать

        параметр -O дважды, по разу для каждого файла. Если только второй

        файл имеет имя владельца, BUTIL игнорирует первое имя владельца.

        вы можете применять опцию "звездочка" дважды.

        Если Вы введете команду BUTIL без параметров, BUTIL покажет

        правильный формат команды для всех команд. Вы можете

        переназначить этот выход в файл или на принтер с помощью

        переназначения DOS.

        СООБЩЕНИЯ ОБ ОШИБКАХ BUTIL

        BUTIL возвращает сообщения об ошибках двумя способами, в

        зависимости от того, запускаете ли Вы ее из командной строки или

        из командного файла.

        Если какие-либо ошибки появляются во время запуска BUTIL из

        командной строки, на экране появится сообщение, описывающее

        проблему. См. Приложение B для информации о сообщениях об ошибках

        BUTIL и Btrieve.

        Если какие-либо ошибки появляются во время запуска BUTIL из

        командного файла, BUTIL вернется на уровень ошибки DOS. Следующая

        таблица перечисляет и описывает уровни ошибок BUTIL.

              Уровень ошибки   Описание

                     0         Запуск утилиты завершен без ошибок.

                     1         Запуск утилиты завершен, но появляются

                               нефатальные ошибки, такой как код статуса

                               5 (Дубликат значения ключа).

                     2         Запуск утилиты не завершен из-за

                               появления фатальной ошибки, такой как код

                               статуса 2 (ошибка ввода/вывода).

        Вы можете проверить уровень ошибки DOS, включая в командном файле

        после команды BUTIl условие подобное следующему:

             IF ERRORLEVEL n ECHO сообщение

        Замените n номером уровня ошибки BUTIL. Замените "сообщение"

        значением сообщения.

        Из-за способа, как DOs тестирует уровни ошибок в командах

        командного файла, Вы всегда должны тестировать уровень ошибки 2

        первым. Пример части командного файла, приведенный ниже,

        иллюстрирует один из способов анализа уровней ошибки BUTIL.

               .

               .

               .

        BUTIL-LOAD LOADFILE BTRFILE_OOWNERNAME

        IF ERRORLEVEL 2 ECHO Фатальная ошибка:BUTIL операция не закончена

        IF ERRORLEVEL 1 ECHO Не фатальная ошибка:Проверте на дубликаты в

         загружаемом файле.

        IF ERRORLEVEL 0 ECHO Операция закончена успешно.

               .

               .

               .

        См. обсуждение командных файлов в руководстве по операционной

        системе для дополнительной информации о том, как использовать

        условие ERRORLEVEL.

        ОПИСАНИЕ ФАЙЛОВ BUTIL

        Некоторые из BUTIL-команд, включая CREATE, SAVE и SINDEX,

        используют ОПИСАНИЕ ФАЙЛА. Описание файла - это последовательный

        ASCII файл, содержащий некоторую информацию, необходимую Btrieve

        для выполнения этих операций.

        Следующий раздел описывает элементы, используемые в описаниях

        файлов BUTIL. Раздел, содержащий набор правил, которыми Вы

        должны руководствоваться при создании описания файла, следует за

        описанием элементов.

        О п и с а н и е  э л е м е н т о в  ф а й л а

        Описание файлов состоит из списка ЭЛЕМЕНТОВ. элемент состоит из

        ключевого слова, за которым следует знак равенства (=), а затем

        следует значение. Каждый элемент в описании файла соответствует

        какой-либо характеристике Btrieve-файла или определению ключа.

        Полное описание Btrieve-файла и характеристик ключей см. в

        Главе 2 "Управление Btrieve-файлами".

        Ниже содержится объяснение описаний элементов файла. Описания

        некоторых элементов файла помечены "необязательное" и могут быть

        опущены при описании файла, если они не требуются для файла или

        определения ключа. Элементы представлены в том порядке, в

        котором они должны появляться в описании файла. Под заголовком

        каждого элемента Вы найдете следующие подзаголовки.

          - Э л е м е н т  - представляет правильный формат ключевого

            слова элемента. Значение представлено как переменная.

            Переменные, представляющие числовые значения, показаны

            символами nnnn. Другие значения объясняются в тексте,

            сопровождающем описание каждого элемента.

          - Г р а н и ц а  - определяет границы допустимых значений,

            которые Вы можете задать для элемента.

          - К о м а н д ы   - список команд BUTIL, которым требуется

            этот элемент в описании файлов.

        За подзаголовками следует краткое описание элемента и как его

        применять.

              ----------------------------------------------------------

              ПРИМЕЧАНИЕ:

              Значения в описаниях элементов заключены в скобки. Не

              заключайте в скобки значения в Вашем описании файла.

              ----------------------------------------------------------

        Record Length

        (Длина записи)

        Э л е м е н т : record=<nnnn>

        Г р а н и ц а : 4-4090

        К о м а н д ы : CREATE

        Элемент "Record Length" определяет длину логической записи

        данных в файле. Для записей фиксированной длины это значение

        должно соответствовать длине параметра буфера данных, что

        выполняет операции над файлом. Если Вы используете записи

        переменной длины, задаваемая Вами длина записи должна

        соответствовать длине фиксированной части записи.

        Минимальная длина записи данных должна быть достаточно большой,

        чтобы содержать все определенные для файла ключи, но не меньше

        четырех байт. Длина записи плюс заголовки ее ключей плюс шесть

        байтов не должны превышать размер страницы файла.

        Variable Length Records

        (Записи переменной длины)

        Э л е м е н т : variable=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE

        Элемент "Variable Length Records" задает, хотите ли Вы чтобы

        файл содержал записи переменной длины.

        Задайте "y", если Вы хотите, чтобы создаваемый Вами файл

        содержал записи переменной длины. Иначе, задайте "n".

        Blank Truncation

        (Отсечение пробелов)

        Э л е м е н т : truncation=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE

        Элемент "Blank Truncation" задает, хотите ли Вы, чтобы Btrieve

        выполнял отсечение пробелов у записей переменной длины.

        Ключевое слово truncation требуется только6 если Вы задаете "y"

        для записи переменной длины.

        Задайте "y", если Вы хотите, чтобы Btrieve использовал

        отсечение пробелов. Иначе, задайте "n".

        Data Compression

        (Сжатие данных)

        Э л е м е н т : compress=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE

        Элемент "Data Compression" задает, хотите ли Вы, чтобы Btrieve

        выполнял сжатие данных над записями, добавляемыми в файл.

        Задайте "y", если Вы хотите, чтобы Btrieve выполнял сжатие

        данных. Иначе, задайте "n".

        Key Count

        (счетчик ключа)

        Э л е м е н т : key=<nn>

        Г р а н и ц а : 1-24

        К о м а н д ы : CREATE

        Элемент "Key Count" задает число ключей, определенных для

        файла. Если Вы зададите значение 0 для этого элемента, Btrieve

        создаст файл, состоящий только из данных. Иначе, Btrieve

        создаст или стандартный Btrieve-файл или файл, состоящий

        только из ключей, в зависимости от значения, заданного для

        элемента "Include Data".

        Для значений больших 0 Вы должны определить по крайней мере

        1 ключ, но не более 8, если размер страницы равен 512 байтам.

        Если размер страницы - 102 байта или больше, Вы можете

        определить до 24 ключей.

        Page Size

        (Размер страницы)

        Э л е м е н т : page=<nnnn>

        Г р а н и ц а : 512-4096

        К о м а н д ы : CREATE

        Элемент "Page Size" задает физический размер страницы файла в

        байтах. Вы можете задавать любое число, кратное 512, до 4096.

        Page pre-allocation

        (Перераспределение страницы)

        Э л е м е н т : allocation=<nnnnn>

        Г р а н и ц а : 1-64K

        К о м а н д ы : CREATE

        Элемент "Page pre-allocation" задает количество страниц,

        которое вы хотите перераспределить в файле. Если Вы не хотите

        перераспределять какие-либо страницы, не включайте это ключевое

        слово в Ваше описание файла.

        Replace Existing File (необязательный)

        (Замена существующего файла)

        Э л е м е н т : replace=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE

        Элемент "Replace Existing File" показывает, что Вы не хотите,

        чтобы Btrieve создавал новый файл, если файл с таким же именем

        уже существует, и предупредил Вас о существовании файла.

        Задайте "n", если Вы не хотите создавать новый файл вместо

        существующего файла.

        Если Вы хотите заменить существующий Btrieve-файл на новый

        пустой файл с тем же самым именем, или задайте "y", или не

        включайте этот элемент в описание файла.

        Include Data (необязательный)

        (Включение данных)

        Э л е м е н т : data=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE

        Элемент "Include Data" задает, хотите ли Вы, чтобы Btrieve

        создал файл, состоящий только из ключей. Задайте "n", если Вы

        хотите, чтобы Btrieve создал файл, состоящий только из ключей.

        Для создания стандартного файла или задайте "y" для элемента

        "Include Data", или опустите этот элемент в описании файла.

        Для создания файла, состоящего только из данных, задайте "y"

        для элемента "Include Data" и установите элемент "Key Count" в 0

        Free Space Threshold

        (Граница свободного пространства)

        Э л е м е н т : fthreshold=<10 | 20 | 30>

        Г р а н и ц а : 10%, 20% или 30% от размера страницы

        К о м а н д ы : CREATE

        Элемент "Free Space Threshold" задает величину свободного

        пространства, которую Вы хотите, чтобы Btrieve зарезервировал

        на странице файла для расширения для записей переменной длины.

        Заданное Вами значение выражено в процентах от размера страницы.

        Не включайте элемент "Free Space Threshold" в описание файла,

        если файл не допускает записи переменной длины. Если вы задаете

        "variable=y" и не задаете границу свободного пространства,

        Btrieve будет использовать значение 5% от размера страницы,

        заданное по умолчанию.

------------------------------------

Примечание:

             Следующие элементы определяют информацию о ключах файла. вы

             должны вводить информацию о ключах, начиная с позиции ключа,

             для каждого сегмента ключа, что Вы хотите определить.

             -----------------------------------------------------------

        Key Position

        (Позиция ключа)

        Э л е м е н т : position=<nnn>

        Г р а н и ц а : 1-<длина записи>

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Key Position" показывает позицию сегмента ключа в

        записи. Позиция ключа должна быть по крайней мере равна 1 и не

        может быть больше значения, заданного Вами для длины запсии.

        определяемые Вами ключи могут перекрываться.

        Key Length

        (Длина ключа)

        Э л е м е н т : length=<nnn>

        Г р а н и ц а : 1-<ограничение для типа ключа>

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Key Lehgth" определяет длину поля ключа или ключевого

        сегмента. Сумма длины ключа и начальной позиции не должна

        превышать заданную длину записи файла. длина ключа должна быть

        показывает позицию сегмента ключа в

        записи. Позиция ключа должна быть по крайней мере равна 1 и не

        может быть больше значения, заданного Вами для длины запсии.

        Определяемые Вами ключи могут перекрываться.

        Duplicate Key Values

        (Дубликаты значений ключа)

        Э л е м е н т : duplicates=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Duplicate Key Values" задает, хотите ли Вы допустить,

        чтобы более чем одна запись в файле содержала одно и то же

        значение поля ключа.

        Задайте "y", если Вы хотите допустить дубликаты значений ключа.

        Иначе, задайте "n".

        Modifiable Key Values

        (Модифицируемые значения ключа)

        Э л е м е н т : modifiable=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Modifiable Key Values" задает, хотите ли Вы позволить

        прикладной программе модифицировать значение ключа во время

        операции Update.

        Задайте "y", если Вы хотите, чтобы значения этого ключа были

        модифицируемыми. Иначе, задайте "n".

        Key Type

        (Тип ключа)

        Э л е м е н т : type=<значение типа ключа>

        Г р а н и ц а : Любой из типов Btrieve-ключа

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Key Type" задает тип данных для ключа. Вы можете

        задать все слово (такое как "float") или только первые две буквы

        слова ("fl" для типа float). См. Приложение G для дополнительной

        информации о типах ключа.

        Descending Sort Order (необязательный)

        Убывающий порядок сортировки

        Э л е м е н т : descending=y

        Г р а н и ц а : нет

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Descending Sort Order" задает, хотите ли Вы, чтобы

        Btrieve сортировал индекс в убывающем порядке.

        Включите элемент "Descending Sort Order"  и задайте "y", если Вы

        хотите, чтобы Btrieve сортировал значения ключа в убывающем

        порядке. Если Вы не включите этот элемент, Btrieve отсортирует

        значения ключа в возрастающем порядке.

        Alternate Collating Sequence

        (Альтернативная последовательность поиска)

        Э л е м е н т : alternate=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Alternate Collating Sequence" задает, хотите ли Вы,

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

        отличающейся от стандартной ASCII последовательности. Это

        полезно, если вы хотите применять алфавит, отличный от

        английского, или если вы хотите просматривать символы нижнего

        регистра как символы верхнего регистра.

        Вы можете задать альтернативную последовательность поиска только

        для ключей типа string, lstring или zstring (строка, l-строка или

        z-строка). Если Вы хотите, чтобы Btrieve сортировал индекс с

        помощью альтернативной последовательности поиска, введите "y" в

        это поле. Иначе, задайте "n".

        Manual Key (необязательный)

        (Ручной ключ)

        Э л е м е н т : manual=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Manual Key" задает, что определяемый Вами ключ или

        сегмент ключа - ручной. Если вы определите сегмент ключа как

        ручной, Вы должны задать пустое значение для этого сегмента.

        Если ключ - сегментированный ключ и Вы определяете один сегмент

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

        Null Key

        (Пустой ключ)

        Э л е м е н т : null=<y | n>

        Г р а н и ц а : нет

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Null Key" задает, должен ли определяемый Вами ключ

        иметь пустое значение. Если Вы определяете пустое значение для

        одного сегмента сегментированного ключа, Вы должны определить

        пустое значение для всех сегментов этого сегментированного ключа.

        Пустые значения, определяемые Вами для каждого сегмента, могут

        быть разными.

        вы можете включить элемент "Null Key" в файл-описание для команды

        INDEX. Однако, INDEX не рассматривает какое-либо заданное Вами

        пустое значение. BUTIL допускает его для поддержки постоянных

        форматов для файлов-описаний CREATE, INDEX и SINDEX.

        Задайте "y", если Вы хотите определить пустое значение для этого

        ключа. Иначе, задайте "n".

        Null Key Value

        (Пустое значение ключа)

        Э л е м е н т : value=<nnn>

        Г р а н и ц а : любое 1-байтовое шестнадцатиричное значение

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Null Key value" задает в шестнадцатиричном виде

        значение, которое Вы хотите, чтобы Btrieve распознавал как пустой

        символ для ключа. Типичные пустые значения - 20 как пробел и 0

        как двоичный ноль.  Включайте этот элемент только, если Вы

        определяете ключ как допускающий пустые значения. Если Вы задаете

        "n" для элемента " Null Key", не включайте элемент

        "Null Key Value" в файл-описание.

        Segmented Key

        (Сегментированный ключ)

        Э л е м е н т : segment=<y | n>

Г р а н и ц а : нет

К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Segmented Key" задает, имеет ли определяемый Вами ключ

        еще какие-либо сегменты.

        Задайте "y", если ключ имеет другой сегмент. Задайте "n", если

        Вы определяете несегментированный ключ или последний сегмент

        сегментированного ключа.

        Alternate Collating Sequence Filename

        (Имя файла альтернативной последовательности поиска)

        Э л е м е н т : name=<имя файла>

        Г р а н и ц а : имя файла

        К о м а н д ы : CREATE, INDEX, SINDEX

        Элемент "Alternate Collating Sequence Filename" задает имя файла,

        содержащего альтернативную последовательнось для создоваемого

        Вами файла7 вы можете включать любое число уровней директорий в

        имени файла.

        Если вы задаете элемент "Alternate Collating Sequence Filename",

        не включайте это ключевое слово в Ваш файл-описание.

П р а в и л а д л я ф а й л о в - о п и с а н и й

        Следующие правила применяются к файлам-описаниям BUTIL. Если

        BUTIL возвращает ошибку при попытке получить доступ к файлу-

        описанию, произведите проверку в следующих областях.

          - Все элементы такие, как "type=fl", должны быть написаны

            символами нижнего регистра.

          - Все элементы должны быть написаны правильно и отделены от

            предыдущих элементов "белым пробелом" (т.е. пробелом,

            символом табуляции, CR/LF и т,д,)

          - Элементы должны быть представлены в файле-описателе в том

            порядке, в каком они представлены в предыдущем разделе.

          - Ответы должны соответствовать друг другу. Например, если Вы

            задаете "null=y' для элемента "Null Key", должен появиться и

            элемент "Null Key Value" и его значение; иначе их не должно

            быть. Если Вы задаете "alternate=y" для элемента "Alternate

            Collating Sequence" в одном или более сегментов ключа,

            элемент "Alternate Collating Sequence Filename" и полное или

            относительное имя пути файла альтернативной

            последовательности поиска должны быть представлены как

            последний элемент файла-описания.

          - Удостоверьтесь, что существует достаточное количество

            описаний ключей для формирования числа ключей, заданных в

            элементе "Key Count". Вводите информацию о ключе, начиная с

            позиции ключа, для каждого сегмента ключа в файле.

          - Удостоверьтесь, что файл-описание не содержит символов

            форматирования текста. (Некоторые текстовые процессоры

            помещают символы форматирования в текстовый файл. Файл-

            описание не долженсодержать никакие символы форматирования).

          - BUTIL не проверяет на конец файл-описание. Если Вы не задали

            альтернативную последовательность поиска, возможно включить

            слишком много описаний ключей и не получить сообщения об

            ошибке. Вы можете включать коментарии в конце файла-описания

            после всех описаний ключей и элемента "Alternate Collating

            Sequence Filename".

          - Оббратите внимание, что файлы-описания для CREATE, INDEX и

            SINDEX имеют слегка различные форматы.

   ФАЙЛЫ АЛЬТЕРНАТИВНОЙ

   ПОСЛЕДОВАТЕЛЬНОСТИ  ПОИСКА

        Первые 265 байт файла альтернативной последовательности поиска

        содержат определение последовательности поиска, отличной от

        стандартной ASCII последовательности. Если Вы хотите создать

        файл альтернативной последовательности поиска, Вы должны написать

        прикладну программу, генерирующую файл в заданном ниже формате.

            Смещение    Длина    Описание

                0         1      Байт знака. Этот байт должен всегда

                                 содержать шестнадцатиричное значение AC.

                1         8      8-байтовое имя, которое однозначно

                                 идентифицирует альтернативную

                                 последовательность поиска для Btrieve.

                9        256     256-байтовая таблица, содержащая

                                 значение сортировки для каждого символа.

                                 Храните значение для каждого символа

                                 сортировки со смещением, соответствующим

                                 представлению символа в ASCII

                                 последовательности поиска. Например, для

                                 сортировки символа A как чего-то другого

                                 чем 0x41, храните новое значение

                                 сортировки со смещением 0x41 в этой

                                 таблице.

        Например, если вы хотите вставить символ с шестнадцатиричным

        значением 5D между буквами U (шестнадцатиричное 55) и V

        (шестнадцатиричное 56) в Вашей последовательности, байт 5D в

        этой последовательности будет содержать значение 56, а байты

        56-5C в этой последовательности будет содержать значения 57-5D.

        Файл UPPER.ALT, который Вы найдете на Вашей програмной дискете,

        содержит пример альтернативной последовательности поиска. Эта

        частная последовательность сравнивает символы верхнего и нижнего

        регистра так, как будто они бы были все в верхнем регистре. Если

        Вы имеете множество файлов с различными альтернативными

        последовательностями поиска, все последовательности должны иметь

        различные имена.

КОМАНДЫ BUTIL

Следующие разделы описывают, как применять команды BUTIL:

Команда Функция

             CLONE        Создает пустой Btrieve-файл с теми же самыми

                          спецификациями, что и у существующего файла.

             COPY         Копирует содержимое одного Btrieve-файла в

                          другой Btrieve-файл

             CREATE       Создает Btrieve-файл

             DROP         Отбрасывает дополнительный индекс

             EXTEND       Создает разделенный файл

             INDEX        Создает внешний индексный файл

             LOAD         Загружает содержимое стандартного

                          последовательного файла в Btrieve-файл

             RECOVER      Восстанавливает данные поврежденого

                          Btrieve-файла

             RESET        Закрывает файлы данных и освобождает ресурсы

             SAVE         Сохраняет содержимое Btrieve-файла в

                          стандартном последовательном файле

             SINDEX       Создает дополнительный индекс

             STAT         Показывает статистику по атрибутам и текущим

                          размерам файла

             STOP         Завершает BREQUEST и локальный Record Manager

                          (если он заружен) и удаляет их из памяти

             VER          Показывает версию Btrieve и номера пересмотра

CLONE

Ф о р м а т к о м а н д ы

BUTIL-CLONE <Существующий файл><Новый файл>[-O <Владелец>]

О п и с а н и е

        Команда CLONE создает новый пустой Btrieve-файл с теми же сам

        спецификациями файла, включая дополнительные индексы,что и у

        существующего файла. Вы можете применять CLONE, когда Вы хотите

        заменить существующий файл, но не хотите разрушать информацию,

        содержащуюся в существующем файле, как это происходит при

        применении Вами операции CREATE. Вдобавок, CLONE не требует

        файла-описания для создания нового файла.

        К а к   п р и м е н я т ь   CLONE

        Для запуска CLONE введите команду в показанном выше формате.

        Вместо <Существующий файл> введите имя Btrieve-файла, который Вы

        хотите получить. Вы можете задать полное имя пути, если

        требуется.

        Вместо <Новый файл> введите имя, которое Вы хотите использовать

        для нового пустого Btrieve-файла. Вы можете задать полное имя

        пути, если требуется.

        Вместо <Владелец> введите имя владельца существующего файла,

        если оно требуется. Новый файл будет с именем владельца

        существующего файла.

        П р и м е р

        Следующая команда получает файл NEWINV08-14-92T из файла INVOICE08-14-92T

        Имя владельца файла INVOICE08-14-92T - "Sandy"

             BUTIL-CLONE INVOICE08-14-92T NEWINV08-14-92T -O Sandy

COPY

Ф о р м а т к о м а н д ы

             BUTIL-COPY <Входной файл><Выходной файл>[-O <Владелец1>

                        [-O<Владелец2>]]

        О п и с а н и е

        Команда COPY копирует содержимое одного Btrieve-файла в другой.

        Наиболее общее применение COPY - изменение характеристик ключей

        (таких как позиция ключа, длина ключа или значения ключей-

        дубликатов) Btrieve-файла.

        COPY берет каждую запись из входного файла и вставляет ее в

        выходной файл, используя операции Btrieve Get и Insert. COPY

        выполняет за один шаг ту же самую функцию, что и SAVE и следуемая

        за ней LOAD.

        К а к   п р и м е н я т ь   COPY

        Для запуска COPY введите команду в показанном выше формате.

        Замените <Входной файл> на имя Btrieve-файла, из которого Вы

        пересылаете записи. Вы можете задать полное имя пути, если

        требуется.

        Замените <Выходной файл> на имя Btrieve-файла, в который Вы

        хотите вставить записи. Файл может быть как пустой, так и нет.

        Вы можете задать полное имя пути, если требуется.

        Замените <Владелец1> и <Владелец2> именами владельцев Btrieve-

        файлов, если требуется. Если <Входной файл> требует имя владельца

        Вы можете задать имя для <Владелец1> или использовать опцию

        "звездочка", описанную в начале этой главы. Если <Выходной файл>

        требует имя владельца, испоьзуйте обе опции <Владелец1> и

        <Владелец2>. Если выходной файл не требует имя владельца, Вы

        можете оставить пробел вместо <Владелец1>. Используйте

        <Владелец2> для задания имени владельца для  <Выходной файл>.

        После того6 как записи были скопированы из входного файла в

        выходной файл, COPY отобразит на экране суммарное число

        скопированных записей.

        П р и м е р

        Следующая команда копирует записи из файла CUSTOMER08-14-92T в файл

        ACCTRECV08-14-92T . Файл CUSTOMER08-14-92T не требует имя владельца.

        Файл ACCTRECV08-14-92T имеет имя владельца "Pam".

             BUTIL-COPY CUSTOMER08-14-92T ACCTRECV08-14-92T -O -O Pam

CREATE

Ф о р м а т к о м а н д ы

BUTIL-CREATE <Новое имя файла><Файл-описание>

О п и с а н и е

        Команда CREATE генерирует пустой Btrieve-файл, используя

        характеристики заданные в файле-описании.

        К а к   п р и м е н я т ь   CREATE

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

        сгенерировать файл-описание в текстовом редакторе. Файлы-

        описанияля описаны в "Файлы-описания BUTIL".

        Для запуска CREATE введите команду в показанном выше формате.

        Замените <Новое имя файла> на имя файла, который Вы хотите

        создать. Вы можете задать полное имя пути, если требуется.

------------------------------------

Примечание:

             Если имя, заданное в <Новое имя файла> - имя существующего

             Btrieve-файла, BUTIL создаст новый пустой файл вместо

             существующего файла. Все данные, хранящиеся в существующем

             файле, будут потеряны и их нельзя будет восстановить.

             -----------------------------------------------------------

        Вместо <Файл-описание> введите имя файла-описания, содержащего

        спецификации для нового файла. Вы можете задать полное имя пути,

        если требуется.

        П р и м е р   файла-описания для BUTIL-CREATE

        Файл-описание, показанный на Рисунке 3.1, создает Btrieve-файл с

        размером страницы 512 байт и двумя ключами. Фиксированная часть

        записи - длиной 98 байт. Файл допускает записи переменной длины,

        но не использует отсечение пробелов. Файл использует сжатие

        данных. Граница свободного пространства установлена на 20%.

        Btrieve будет перераспределять 100 страниц при создании файла.

        Первый ключ (Ключ 0) - сегментированный ключ с двумя допускающими

        дубликаты, немодифицируемыми, строковыми сегментами с

        альтернативной последовательностью поиска, определенной в файле

        UPPER.ALT, и с пробелом вместо пустого значения. Второй ключ

        (Ключ 2) - числовой ключ без сегментов, не допускающий дубликатов

        но позволяющий модификацию. Он отсортирован в убывающем порядке.

                                |    record=98 variable=y truncation=n

             Спецификации файла {    compress=y key=2 page=512

                                |    allocation=100 replace=n fthreshold=20

                                |    position=1 length=5 duplicates=y

             Ключ 0, сегмент 1  {    modifiable=n type=string alternate=y

                                |    null=y value=20 segment=y

                                |    position=6 length=10 duplicates=y

             Ключ 0, сегмент 2  {    modifiable=n type=string alternate=y

                                |    null=y value=20 segment=n

                                |    position=16 length=2 duplicates=n

             Ключ 1             {    modifiable=y type=numeric

                                |    descending=y alternate=n null=n

                                |    segment=n

             Имя файла          |

             альтернативной     {    name=UPPER.ALT

             последовательности |

             поиска             |

                              Рисунок 1.3

                  Пример файла-описания для CREATE

        П р и м е р

        Следующая команда создает Btrieve-файл по имени ACCTS.NEW,

        используя описание, обеспечиваемое файлом-описанием BUILD.DES

             BUTIL-CREATE ACCTS.NEW BUILD.DES

DROP

Ф о р м а т к о м а н д ы

BUTIL-DROP <Btrieve-файл><Номер ключа>[-O <Владелец>]

О п и с а н и е

        Вы можете применять команду DROP для удаления дополнительного

        индекса из Btrieve-файла.

        Btrieve обновляет номер ключа других дополнительных индексов,

        если требуется, до завершения команды DROP.

        К а к   п р и м е н я т ь   DROP

        Для запуска DROP введите команду в показанном выше формате.

        Замените <Btrieve-файл> на имя Btrieve-файла, из которого Вы

        удаляете индекс. Вы можете задать полное имя пути, если

        требуется.

        Замените <Номер ключа> на номер дополнительного индекса, который

        Вы хотите отбросить.

        Замените <Владелец> именем владельца файла, если он существует.

        П р и м е р

        Следующий пример отбрасывает ключ с номером 6, дополнительный

        индекс, из файла MAILER.ADR Имя владельца файла - "Sales".

             BUTIL-DROP MAILER.ADR 6 -O Sales

EXTEND

Ф о р м а т к о м а н д ы

BUTIL-EXTEND <Btrieve-файл><Расширение файла>[-O <Владелец>]

О п и с а н и е

        Когда Вы создаете Btrieve-файл, Вы можете определять файл только

        для одного тома. EXTEND позволяет Вам расширять существующий

        файл на два логических диска. Этот пункт полезен, когда данные,

        содержащиеся в одном файле, превышают физическую память одного

        диска или максимальный размер тома, поддерживаемый операционной

        системой.

        К а к   п р и м е н я т ь   EXTEND

        Для запуска EXTEND введите команду в показанном выше формате.

        Замените <Btrieve-файл> на имя Btrieve-файла, который Вы хотите

        расширить. Вы можете задать полное имя пути, если требуется.

        Замените <Расширение файла> на имя, которое Вы хотите

        использовать для расширения файла. Обязательно включите

        спецификацию устройства для нового устройства. Устройство должно

        отличаться от заданного Вами для первоначального файла. Вы можете

        задать полное имя пути, если требуется.

        Замените <Владелец> именем владельца файла, если он существует.

        Если файл расширяется на два диска, Вы должны загрузить оба диска

        до того, как Вы получите доступ к файлу. Более того, Вы должны

        загружать расширение файла на то же устройство, что Вы задавли

        при первом расширении файла. После того, как файл был расширен,

        нельзя выполнить обратную операцию.

        П р и м е р

        Следующий пример расширяет файл MAILER.ADR в файл MAILER2.ADR в

        директорий \SALES устройства E. Имя владельца файла - "Sales".

             BUTIL-EXTEND MAILER.ADR E:\SALES\MAILER2.ADR -O Sales

INDEX

Ф о р м а т к о м а н д ы

             BUTIL-INDEX <Btrieve-файл><Индексный файл><Файл-описание>

                         [-O <Владелец>]

        О п и с а н и е

        Команда INDEX строит внешний индексный файл, опираясь на поле,

        которое Вы предварительно не задали как ключ. Записи в новом

        файле состоят только из 4-байтового адреса каждой записи в

        первоначальном Btrieve-файле, за которым следует значение, по

        которому Вы хотите сортировать.

        После того, как Btrieve создал внешний индекс, Вы можете

        использовать внешний индекс для поиска записей данных в

        первоначальном файле двумя способами:

          - Вы можете применять команду SAVE для поиска записей файла,

            используя внешний индексный файл. См. обсуждение команды SAVE

            для дополнительной информации.

          - Вы можете создать прикладную программу, которая исследует

            файл, используя внешний индекс. Прикладная программа должна

            сперва найти 4-байтовый адрес, используя значение ключа из

            индексного файла. Ваша прикладная программа может затем искать

            запись из первоначального файла, используя 4-байтовый адрес в

            операции Get Direct.

        К а к   п р и м е н я т ь   INDEX

        До того, как Вы сможете построить внешний индекс, применяя

        команду INDEX, Вы должны создать файл-описание для задания

        характеристик нового ключа.

        Для запуска INDEX введите команду в показанном выше формате.

        Замените <Btrieve-файл> на имя существующего Btrieve-файла, для

        которого Вы хотите построить внешний индекс. Вы можете задать

        полное имя пути, если требуется.

        Замените <Индексный файл> на имя файла, в котором Btrieve должен

        хранить внешний индекс. Вы можете задать полное имя пути, если

        требуется.

             -----------------------------------------------------------

             ПРИМЕЧАНИЕ:

             Так как и файл-оригинал, и индексный файл могут иметь

             соответствующие прообразы, Вы не должны использовать одно и

             то же имя файла с двумя различными расширениями.

             -----------------------------------------------------------

        Вместо <Файл-описание> введите имя создаваемого файла,

        содержащее определение нового ключа. Файл должен содержать

        определение каждого сегмента нового ключа. Вы можете задать

        полное имя пути, если требуется. См. "Файлы-описания BUTIL" для

        полной информации о файлах-описаниях.

        Замените <Владелец> именем владельца файла, если он существует.

        П р и м е р   файла-описания для BUTIL-INDEX

        Например, файл-описание на Рисунке 4.2 определяет новый ключ с

        одним сегментом. Ключ начинается в 30-ом байте записи и имеет

        длину в 10 байтов. Он допускает дубликаты, модифицируемый,

        строкового типа и не использует альтернативную последовательность

        поиска.

             position=30 length=10 duplicates=y modifable=y type=string

             alternate=n segment=n

        После того, как Вы определили ключ для внешнего файла, INDEX

        создает файл. После создания файла INDEX отобразит на экране

        количество проиндексированных записей.

        П р и м е р

        Следующая команда создает внешний индексный файл QUICKREF.IDX

        для файла CUSTOMER08-14-92T Файл CUSTOMER08-14-92T не требует имя

        владельца. Файл-описание, содержащий определение нового ключа, -

        NEWIDX.DES.

             BUTIL-INDEX CUSTOMER08-14-92T QUICKREF.IDX NEWIDX.DES

LOAD

Ф о р м а т к о м а н д ы

BUTIL-LOAD <Входной файл><Btrieve-файл>[-O <Владелец>]

О п и с а н и е

        Команда LOAD позволяет Вам добавлять записи из последовательного

        файла в Btrieve-файл без создания специально для этой цели

        прикладной программы. LOAD также обеспечивает удобный способ

        передачи записей из последовательного файла, созданного другой

        программой, в Btrieve-файл. LOAD не выполняет преобразования

        данных в загружаемом файле.

        После того, как Btrieve передаст записи, он отобразит на экране

        суммарное число записей, загруженных в Btrieve-файл.

        К а к   п р и м е н я т ь   LOAD

        До того, как Вы запустите команду LOAD, Вы должны создать

        последовательный файл, содержащий новые записи. Вы можете

        создать файл, применяя стандартный текстовый редактор или

        прикладную программу.

        Для запуска команды LOAD ведите команду в показанном выше формате.

        Замените <Входной файл> на имя последовательного файла,

        содержащего записи для загрузки в Btrieve-файл. Вы можете задать

        полное имя пути, если требуется.

        Замените <Btrieve-файл> на имя Btrieve-файла, в который Вы хотите

        добавлять записи. Вы можете задать полное имя пути, если

        требуется.

        Замените <Владелец> именем владельца Btrieve-файла, если он

        существует.

        LOAD ожидает, что каждая запись в <Входной файл> будет в

        следующем формате:

          - Первые n байтов должны быть длиной записи в ASCII.

            ДЛЯ ФАЙЛОВ С ЗАПИСЯМИ ФИКСИРОВАННОЙ ДЛИНЫ задаваемая длина

            должна всегда равняться длине записи, задаваемой Вами при

            создании файла.

            ДЛЯ ФАЙЛОВ С ЗАПИСЯМИ ПЕРЕМЕННОЙ ДЛИНЫ задаваемая длина

            должна быть по крайней мере равна минимальной фиксированной

            длине записи, задаваемой Вами при создании файла.

          - За длиной должен следовать один символ-разделитель (или

            запятая, или пробел).

          - За разделителем должны следовать сами данные. Длина данного

            должна быть в точности равна длине, заданной в начале записи

          - Запись должна завершаться возвратом каретки/переводом строки

            (шестнадцатеричному 0D0A )

          - Последняя запись в файле должна содержать символ конца файла.

            (Ctrl-Z или шестнадцатеричное 1A). большинство текстовых

            редакторов и команда SAVE автоматически вставляют этот символ

            в файл.

        Вы можете создавть Ваш входной файл с помощью текстового

        редактора или прикладной программы.

        ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ ТЕКСТОВЫЙ РЕДАКТОР ПРИ СОЗДАНИИ ЗАГРУЖАЕМОГО

        ВАМИ ФАЙЛА, удостоверьтесь, что Вы дополнили каждую запись

        пробелами для достижения заданной вами в начале записи длины.

        Поля, содержащие двоичные данные, не могут быть отредактированы

        большинством текстовых редакторов.

        ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ ПРИКЛАДНУЮ ПРОГРАММУ ПРИ СОЗДАНИИ

        ЗАГРУЖАЕМОГО ВАМИ ФАЙЛА, удостоверьтесь, что Вы добавили в

        каждую запись возврат каретки и перевод страницы и включили

        конец файла в запись. Последовательные запросы ввода/вывода,

        обеспечиваемые большинством процессоров языков высокого уровня,

        добавляют автоматически символы возврата каретки, перевод строки

        и конца файла.

        Рисунок 4.3 иллюстрирует правильный формат каждой записи в

        выходном файле. Допустим, что Btrieve-файл не допускает записи

        переменной длины и имеет длину записи, равную 40 байт.

         40,Запись за разделителем "запятая". <CR/LF>

         ¦ ¦   \________________________/    ¦   ¦

         ¦ ¦                                 ¦   L- Возврат каретки/

         ¦ ¦          Данное                 ¦      перевод строки

         ¦ ¦                                 ¦

         ¦ ¦                                 L- 1 пробел для дополнения

         ¦ ¦                                    до соответствующей длины

         ¦ L------ Разделитель "запятая"

         ¦

         L-------- Длина записи

                                  Рисунок 4.3

                       Формат записи для выходного файла

П р и м е р

        Следующий пример загружает последовательные записи из файла

        MAILT в файл MAILER08-14-92T. Имя владельца для файла MAILER.ADR -

        "Sales".

             BUTIL-LOAD MAILT MAILER.ADR -O Sales

RECOVER

Ф о р м а т к о м а н д ы

BUTIL-RECOVER <Btrieve-файл> <Выходной файл> [-O <Владелец>]

О п и с а н и е

        Команда RECOVER читает записи из заданного Btrieve-файла,

        используя операции Step, и создает последовательный файл,

        совместимый с командой LOAD. Каждая запись заканчивается

        возвратом каретки и переводом строки (шестнадцатиричное 0D0A).

        Файл завершается концом файла (шестнадцатиричное 1A).

        Вы можете применять RECOVER для поиска данных из поврежденного

        Btrieve-файла. Например, файл может быть поарежден при сбое

        системы во время доступа к файлу в ускоренном режиме. Команда

        RECOVER сможет найти многие, а возможно и все, записи из файла.

        Вы можете затем использовать команду LOAD для добавления записей

        в новый неповрежденный Btrieve-файл.

        К а к   п р и м е н я т ь   RECOVER

        Для запуска команды RECOVER введите команду в показанном выше

        формате.

        Замените <Выходной файл> на имя файла, где RECOVER будет

        сохранять восстановленные записи. Вы можете задать полное имя

        пути, если требуется.

        Замените <Btrieve-файл> на имя Btrieve-файла, который Вы хотите

        восстановить. Вы можете задать полное имя пути, если требуется.

        Замените <Владелец> именем владельца Btrieve-файла, если он

        существует.

        После того, как RECOVER найдет записи, она отобразит на экране

        общее число восстановленных записей. Если логическое устройство,

        содержащее Ваш выходной файл, будет заполнено до того, как весь

        файл будет восстановлен, RECOVER остановится, отобразит

        количество уже восстановленных записей и затем выдаст следующее

        сообщение:

             Disk volume is full. Enter new file name to continue

             or . to quit, then press <ENTER>.

            (Том диска заполнен. Введите имя нового файла для продолжения

             или . для выхода, затем нажмите <ENTER>.)

        Для продолжения операции в другой выходной файл выполните одну из

        следующих инструкций:

          - ЕСЛИ ВЫ ВОССТАНАВЛИВАЕТЕ BTRIEVE-ФАЙЛ НА ДИСКЕТУ, уберите

            полную дискету и замените ее другой отформатированной

            дискетой.

          - ЕСЛИ ВЫ ВОССТАНАВЛИВАЕТЕ BTRIEVE-ФАЙЛ НА ВИНЧЕСТЕР, задайте

            другое логическое устройство, имеющее свободное пространство.

        В обоих случаях введите имя файла, который Вы хотите, чтобы

        Btrieve использовал для продолжения хранения записей и нажмите

        клавишу Enter. Btrieve продолжит копирование записей из Btrieve-

        файла в новый выходной файл.

        Если логическое устройство заполнено, а Вы хотите завершить

        операцию RECOVER, введите точку (.) и нажмите <Enter>.

        П р и м е р

        Следующий пример ищет записи из файла MAILER.ADR загружает их в

        последовательный файл файл MAILT. Имя владельца для файла

        MAILER.ADR - "Sales".

             BUTIL-RECOVER MAILER.ADR MAILT -O Sales

RESET

Ф о р м а т к о м а н д ы

BUTIL-RESET <Номер связи>

О п и с а н и е

        RESET выполняет Btrieve-операцию Reset для освобождения ресурсов

        используемых BREQUEST и Record Manager на рабочей станции. Она

        освобождает все захваты, отменяет все незавершенные транзакции и

        закрывает все открытые файлы станции.

        Вы можете освобождать рескрсы и чужой станции, введя номер связи

        станции <Номер связи>. Если Вы не знаете номер связи, консольные

        команды B ACTIVE, WHOAMI и USERLIST возвращают номера связей как

        часть своего выхода.

        К а к   п р и м е н я т ь   RESET

        Для запуска команды RESET введите команду в показанном выше

        формате.

        Вы можете запросить эту команду с любой рабочей станции сети, на

        которую загружен BREQUEST. Если Вы не задали номер станции,

        BUTIL-RESET освободит ресурсы данной станции.

        П р и м е р

        Следующий пример освобождает ресурсы рабочей станции, используя

        номер связи 12 сети.

             BUTIL-RESET 12

SAVE

Ф о р м а т к о м а н д ы

             BUTIL-SAVE <Btrieve-файл> <Выходной файл> <Индекс(Y/N)>

                [<Индексный файл> |<Номер ключа>][-O<Владелец>]

        О п и с а н и е

        SAVE позволяет Вам искать записи из Btrieve-файлов и хранить их в

        отсортированном порядке в последовательном файле. Это - точная

        инверсия LOAD. Эта команда может быть использована в дополнение к

        LOAD так, что данные из Btrieve-файла могут быть легко извлечены,

        отредактированы и затем сохранены в другом Btrieve-файле.

        SAVE генерирует одну запись в выходном файле идля каждой записи,

        читаемой из Btrieve-файла. Каждая запись начинается со своей

        длины и заканчивается возвратом каретки и переводом строки

        (0D0AH). Файл завершается концом файла (1AH) и совместим с

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

        преобразования данных в записях. Поэтому, если Вы используете

        текстовый редактор для модификации выходного файла, содержащего

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

        После того, как SAVE завершит этот процесс, на экране будет

        отображено суммарное число сохраненных записей.

К а к п р и м е н я т ь SAVE

Для запуска SAVE введите команду в показанном выше формате.

        Замените <Btrieve-файл> на имя Btrieve-файла, содержащего записи

        для сохранения. Вы можете задать полное имя пути, если

        требуется.

        Замените <Выходной файл> на имя последовательного файла, в

        котором Вы хотите, чтобы Btrieve хранил записи. Вы можете задать

        полное имя пути, если требуется.

        Применяйте один из следующих методов для задания порядка, в

        котором Вы хотите, чтобы SAVE хранила записи:

          - ЕСЛИ ВЫ ХОТИТЕ СОХРАНИТЬ ЗАПИСИ С ПОМОЩЬЮ ВНЕШНЕГО ИНДЕКСА,

            задайте Y для <Индекс (Y/N)> и замените <Индексный файл>

            именем внешнего индексного файла. Вы можете задать полное имя

            пути, если требуется.

          - ЕСЛИ ВЫ ХОТИТЕ СОХРАНИТЬ ЗАПИСИ С ПОМОЩЬЮ КЛЮЧА ОТЛИЧНОГО ОТ

            0,задайте N для <Индекс (Y/N)> и замените <Номер ключа>

            номером соответствующего ключа.

          - ЕСЛИ ВЫ ХОТИТЕ СОХРАНИТЬ ЗАПИСИ С ПОМОЩЬЮ КЛЮЧА 0, не

            задавайте индексный файл или номер ключа.

        Замените <Владелец> именем владельца Btrieve-файла, если он

        существует.

        Если логическое устройство, содержащее Ваш выходной файл, будет

        заполнено до того, как был  сохранен весь файл, SAVE остановится,

        отобразит количество уже сохраненных записей и затем выдаст

        следующее сообщение:

             Disk volume is full. Enter new file name to continue

             or . to quit, then press <ENTER>.

            (Том диска заполнен. Введите имя нового файла для продолжения

             или . для выхода, затем нажмите <ENTER>.)

        Для продолжения операции в другой выходной файл выполните одну из

        следующих инструкций:

          - ЕСЛИ ВЫ СОХРАНЯЕТ BTRIEVE-ФАЙЛ НА ДИСКЕТЕ, уберите

            полную дискету и замените ее другой отформатированной

            дискетой.

          - ЕСЛИ ВЫ СОХРАНЯЕТЕ BTRIEVE-ФАЙЛ НА ВИНЧЕСТЕРЕ, задайте

            другое логическое устройство, имеющее свободное пространство.

        В обоих случаях введите имя файла, который Вы хотите, чтобы

        Btrieve использовал для продолжения хранения записей и нажмите

        клавишу Enter. Btrieve продолжит копирование записей из Btrieve-

        файла в новый выходной файл.

        Если логическое устройство заполнено, а Вы хотите завершить

        операцию RECOVER, введите точку (.) и нажмите <Enter>.

        П р и м е р

        Следующие два примера иллюстрируют, как применять SAVE для поиска

        записей файла.

        Первый пример используют файл внешних индексов QUICKER.IDX для

        поиска записей мз файла CUSTOMER08-14-92T и сохранения их в

        последовательном файле CUST.SAV.

             BUTIL-SAVE CUSTOMER08-14-92T CUST.SAV Y QUICKREF.IDX

        Следующий пример ищет записи из файла CUSTOMER08-14-92T, используя

        номер ключа 3 и сохраненяя их в последовательном файле CUST.SAV.

             BUTIL-SAVE CUSTOMER08-14-92T CUST.SAV N 3

        SINDEX

        Ф о р м а т   к о м а н д ы

             BUTIL-SINDEX <Btrieve-файл> <Файл-описание> [-O <Владелец>]

        О п и с а н и е

        SINDEX создает дополнительный индекс для существующего Btrieve-

        файла. Номер ключа нового индекса будет на единицу выше номера

        предыдущего наивысшего ключа для этого файла.

        К а к   п р и м е н я т ь   SINDEX

        До того, как Вы сможете запустиь SINDEX, Вы должны обеспечить

        определение дополнительного индекса в файле-описании. См. "Файл-

        описание BUTIL" для дополнительной информации о файлах-описаниях

        BUTIL. Смотрите примеры файла-описания в разделе "SAVE" для

        руководства по созданию файла-описания SINDEX.

        Для запуска SINDEX введите команду в показанном выше формате.

        Замените <Btrieve-файл> на имя существующего Btrieve-файла, для

        которого Вы хотите создать индекс. Вы можете задать полное имя

        пути, если требуется.

        Замените <Файл-описание> именем Btrieve-файла, для которого Вы

        создаете индекс. Вы можете задать полное имя пути, если

        требуется.

        Замените <Владелец> именем владельца Btrieve-файла, если он

        существует.

        П р и м е р

        Следующий пример создает дополнительный индекс для файла

        MAILER.ADR. Имя файла-описания - SUPPIDX.DES. Имя владельца

        Btrieve-файла - "Sales".

             BUTIL-SINDEX CMAILER.ADR SUPPIDX.DES -O Sales

        STAT

        Ф о р м а т   к о м а н д ы

             BUTIL-RECOVER <Имя файла> [-O <Владелец>]

        О п и с а н и е

        STAT показывает определенные характеристики Btrieve-файла и

        статистику по его содержанию.  Вы можете использовать STAT для

        определения всех параметров, заданных для нового файла командой

        CREATE. Команда STAT также обеспечивает информацию по объему

        ключей и записей файла и по имени файла-расширения, если он

        существует.

        К а к   п р и м е н я т ь   STAT

        Для запуска STAT введите команду в показанном выше формате.

        Замените <Имя файла> на имя существующего Btrieve-файла, по

        которому Вы хотите получить статистику. Вы можете задать любое

        количество уровней директорий в имени файла.

        Замените <Владелец> именем владельца Btrieve-файла, если он

        существует.

        П р и м е р

        Следующий пример - получение статистики по файлу ADDRESS.BTR.

        Файл не имеет имени владельца.

             BUTIL-STAT ADDRESS.BTR

        Этот пример показывает, что файл ADDRESS.BTR был определен с

        размером страницы в 1536 байт, длиной записи 147 байт и

        2 ключами. Файл использует сжатие данных, допускает записи

        переменной длины и имеет границу свободного пространства 10%.

        Первый ключ (Ключ 0) состоит из одного сегмента, начинается в

        позиции один, длиной 30 символов, допускает дубликаты,

        немодифицируемый, имеет строковый тип ключа и не имеет

        определенного пустого значения. Ключ 0 отсортирован в убывающем

        порядке.

        Второй ключ (Ключ 1) допускает дубликаты, модифицируемый, ручной

        и имеет пустое значение - шестнадцатиричное 20 (пробел). Он

        состоит из двух сегментов.

        Первый сегмент начинается в позиции 31, длиной в 30 байтов,

        имеет строковый тип ключа и пустое значение -  шестнадцатиричное

        20 (пробел). Второй сегмент начинается в позиции 55, имеет длину

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

        шестнадцатиричное 20 (пробел).

        В файл было добавлено четырнадцать записей. Файл содержит 14

        уникальных значений первого ключа и пять уникальных значений

        второго. Файла-расширения нет.

         --------------------------------------------------------------¬

         ¦                                                             ¦

         ¦ File Stats for address.btr                                  ¦

         ¦                                                             ¦

         ¦ Record Length = 147          Compressed Records = Yes       ¦

         ¦ Variable Records = Yes       Free Space Threshold = 10%     ¦

         ¦ Number of Keys = 2                                          ¦

         ¦ Page Size = 1536             Unused Pages = 0               ¦

         ¦ Total Records = 14                                          ¦

         ¦                                                             ¦

         ¦                                                             ¦

         ¦ Key Position Length Duplicates Modifiable  Type  Null  Total¦

         ¦                                                             ¦

         ¦  0       1      30     Yes         No     String< __     14 ¦

         ¦  1      31      30     Yes        Yes     String  20M     5 ¦

         ¦  1      55       4     Yes        Yes     String< 20M     5 ¦

         ¦                                                             ¦

         L--------------------------------------------------------------

                                  Рисунок 4.4

                           Пример выхода BUTIL-STAT

STOP

Ф о р м а т к о м а н д ы

BUTIL-STOP

        О п и с а н и е

        STOP удаляет BREQUEST и Btrieve Record Manager из памяти и,

        когда возможно, возвращает распределенную память в операционную

        систему. После того, как Вы один раз запросили команду STOP, Вы

        не можете запускать прикладную программу Btrieve до тех пор, пока

        не перезагрузите BREQUEST или Btrieve Record Manager.

        К а к   п р и м е н я т ь   STOP

        Для запуска STOP введите команду в показанном выше формате.

VER

Ф о р м а т к о м а н д ы

BUTIL-VER

О п и с а н и е

VER сообщает версию BREQUEST, загруженную на рабочую станцию.

К а к п р и м е н я т ь VER

Для запуска VER введите команду в показанном выше формате.

ИСПОЛНИТЕЛЬ ФУНКЦИЙ BTRIEVE

        Дискета Btrieve включает программу B, позволяющую Вам выполнять

        индивидуальные Btrieve-операции интерактивно. B.EXE - прикладная

        программа Btrieve, выполняющая Btrieve-операции, опираясь на

        задаваемые Вами для различных подсказок значения. Каждая

        подсказка обьяснена дальше. Программа B полезна для изучения

        работы Btrieve, тестирования логики Вашей программы и отладки.

        Для выполнения B введите следующую команду после DOS-подсказки:

            B <Enter>

        Когда Вы выполните B, появится меню с подсказками для каждого

        требуемого при вызове Btrieve параметра. Список кодов операций

        Btrieve приведен за подсказками.

        Для выполнения вызова Btrieve проинициализируйте все Btrieve-

        параметры, обычно требуемые для этой операции. Смотрите

        обсуждение Btrieve-операций записи в Главе 6 для информации о

        требуемых параметрах. Например, для выполнения операции Open

        выполните следующие шаги.

        1) Задайте код операции 0.

        2) Задайте режим "open" на подсказку "Key Number" (если надо).

        3) Задайте имя файла на подсказку "Key Buffer".

        4) Нажмите <F1> для выполнения Btrieve-операции.

           Программа B выполнит обращение к Btrieve и отобразит результат.

        Вы можете продолжить выполнение Btrieve-операций. Для завершения

        программы сперва закройте все открытые файлы, а затем нажмите

        клавишу Escape.

        Следующий список описывает все подсказки меню утилиты B.

             Подсказка       Описание

             Function        Введите код Btrieve-операции, которую Вы

                             хотите выполнить. Список кодов операций

                             будет показан в нижней половине экрана.

                             В Приложении A также имеется список кодов

                             Btrieve-операций.

             Key Path        Задайте номер ключа для Btrieve-операции в

                             поле пути ключа.

             Position Block  Задайте файл, к которому Вы хотите получить

                             доступ, в блоке позиции. B присвоит номер

                             файлу на подсказку блока позиции, когда Вы

                             успешно откроете файл в Btrieve.

                             Вы можете иметь до 10 открытых файлов. Когда

                             Вы открываете файлы, задавайте номер файла в

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

                             9 включительно. Начинайте с 0 для первого

                             открываемого файла, 1 - для второго файла и

                             так далее. После того, как Вы открыли файл,

                             идентифицируйте его в последующих операциях,

                             вводя его номер в поле блока позиции.

             Status          Btrieve возвращает статус из каждой операции

                             в это поле. Полезно проинициализировать

                             статус значением 99 или другим невероятным

                             кодом перед каждой операцией. Это позволит

                             Вам увидеть изменение кода статуса при

                             завершении Btrieve-операции.

             Data Buffer     Установите длину буфера данных в правильное

             Length          значение для операции, которую Вы хотите

                             выполнить.

             Data Buffer     Введите данные записи в это поле для

                             операций Insert или Update. Вы можете вводить

                             данные только в формате ASCII. Для операций

                             Get Btrieve возвращает затребованные Вами

                             данные в буфер данных. Только ASCII данные

                             отображаются на экране.

             Key Buffer      Сохраните или имя файла или значение ключа,

                             в зависимости от выполняемой операции, в

                             буфере ключа. Как и в случае буфера данных,

                             только ASCII данные могут быть введены или

                             отображены.

Следующие клавиши могут быть использованы при запуске программы B:

Клавиши Описание

<Esc> Завершает программу

<F1> Выполняет Btrieve-вызов

<Home> Передвигает на первую подсказку

<End> Передвигает на последнюю подсказку

<Up> Передвигает на предыдущую подсказку

<Down> Передвигает на следующую подсказку

<Left> Передвигает на символ влево

<Right> Передвигает на символ вправо

             <Обратная        Передвигает на предыдущую подсказку

              табуляция>

             <Табуляция>      Передвигает на следующую подсказку

             <Ctrl-Home>      Передвигает на начало поля

             <Ctrl-End>       Передвигает на конец поля

             <Delete>         Удаляет символ

             <Insert>         Включает режим вставки

        Вы можете задавать только ASCII значения в параметрах буфера

        данных и буфера ключа.

КОНСОЛЬНЫЕ КОМАНДЫ

        Btrieve обеспечивает консльными командами, позволяющими Вам

        управлять файлами и текущим уровнем применения процесса BSERVER.

        Вы можете выполнять эти команды с консоли любого файл-сервера,

        куда загружен BSERVER.VAP.

        Следующие разделы описывают консольные команды NetWare Btrieve.

        Каждое описание включает следующую информацию:

          - Ф о р м а т   к о м а н д ы . Этот раздел представляет

            консольную команду в том формате6 в каком она должна быть

            введена на файл=сервере, где загружен BSERVER.

          - Н а з н а ч е н и е . Этот раздел описывает применение

            команды.

          - К а к   п р и м е н я т ь  ( к о м а н д у ) . Этот раздел

            описывает , как запрашивать команду, и результат выполнения

            команды.

B ACTIVE

Ф о р м а т к о м а н д ы .

B ACTIVE <Экран>

О п и с а н и е

        Консольная команда B ACTIVE позволяет Вам получить список всех

        Btrieve-файлов, открытых в текущее время на файл-сервере, и

        увидеть номер связи (рабочей станции) для каждого открытого файла

        и типы захватов для каждого файла.

        Btrieve отобразит результат команды в формате таблицы на экране.

        Следующая информация будет показана для каждого файла:

          - Полное имя пути файла.

          - Номер связи сети, имеющей открытый файл.

          - Тип захватов для файла.

        Вы можете использовать номер связи, возвращаемый B ACTIVE, для

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

        использовать этот номер как параметр команд B RESET, BUTIL-RESET

        или Btrieve-операции Reset для закрытия файлов и освобождения

        ресурсов некоторой станции.

        Если другой VAP имеет открытым этот же файл, B ACTIVE отобразит

        двухсимвольный код номера связи. Например, двухсимвольный код

        для NetWare SQL - "NS". вы не можете использовать этот

        двухсимвольный код как вход команды B RESET. Смотрите обсуждение

        команды B RESET на следующих страницах.

        Коды для трех видов захвата:

            Захват                   Код

            Транзакция                T

            Единичная запись          A

            Множество записей         M

        К а к   п р и м е н я т ь  B ACTIVE

        Для запуска B ACTIVE введите команду в показанном выше формате на

        сервере, где загружен BSERVER.VAP.

        Вставьте пробел между B и ACTIVE. Вы можете вводить команду

        символами как нижнего, так и верхнего регистров.

        B ACTIVE будет показывать сообщение на верху экрана до тех пор,

        пока не отобразит все активные файлы. Для просмотра

        дополнительных экранов введите вновь команду B ACTIVE с номером

        <Экрана>, который Вы хотите посмотреть. Например, для прсмотра

        второго экрана B ACTIVE введите следующее:

             B ACTIVE 2 <Enter>

B DOWN

Ф о р м а т к о м а н д ы .

B DOWN

О п и с а н и е

        Консольная команда B DOWN освобождает все ресурсы, используемые

        BSERVER, и завершает выполнение BSERVER. Когда Вы запрашиваете

        B DOWN, Btrieve:

          - Закроет все открытые на файл-сервере файлы;

          - Освободит все захваты Btrieve на файл-сервере;

          - Снимет все транзакции на файл-сервере;

          - Отменит выполнение BSERVER.

        Если Вы запускаете другой VAP, используя BSERVER для доступа к

        файлам сети, Вы должны перед запросом команды B DOWN :

          - Запросить команду B ACTIVE, чтобы удостовериться, что нет

            открытых файлов для других VAP.

          - Если другие VAP имеют открытые Btrieve-файлы на файл-сервере,

            вы должны запросить соответствующую команду для этого VAP для

            того, чтобы закрыть его файлы и прервать процесс.

        Например, если Вы запускаете NetWare SQL, Вы запросите команды

        NS RESET и NS DOWN для того6 чтобы удостовериться, что все файлы

        NetWare SQL закрыты. После того, как Вы запросите команду B DOWN

        рабочие станции и другие VAP не смогут получить доступ к Btrieve-

        файлам через BSERVER до тех пор, пока вновь не будет запущен

        файл-сервер.

        К а к   п р и м е н я т ь  B DOWN

        Для запуска B DOWN введите команду в показанном выше формате на

        сервере, где загружен BSERVER.VAP. Вставьте пробел между B и

        DOWN. Вы можете вводить команду символами как нижнего, так и

        верхнего регистров.

B OFF

Ф о р м а т к о м а н д ы .

B OFF

О п и с а н и е

        Консольная команда B OFFпрекращает обновление экрана предыдущей

        утилитой командной строки Btrieve.

        Вы можете запросить B OFF после того, как B ACTIVE, B STATUS или

        B USAGE показали необходимую Вам информацию. Если Вы не запросите

        B OFF, эти команды продолжат обновление экрана, даже если Вы

        запросите другую команду.

        К а к   п р и м е н я т ь  B OFF

        Для запуска B OFF введите команду в показанном выше формате на

        сервере, где загружен BSERVER.VAP.

        Вставьте пробел между B и OFF. Вы можете вводить команду

        символами как нижнего, так и верхнего регистров.

B RESET

Ф о р м а т к о м а н д ы .

B RESET <Номер связи>

О п и с а н и е

        Консольная команда B RESET освобождает все ресурсы, используемые

        какой-либо станцией сети. Когда Вы запросите консольную команду

        B RESET с номером связи станции, Btrieve:

          - Закроет все открытые на станции файлы;

          - Освободит все захваты станции;

          - Снимет все транзакции на станции;

          - Отменит выполнение BSERVER.

        К а к   п р и м е н я т ь  B RESET

        Для запуска B RESET введите команду в показанном выше формате на

        сервере, где загружен BSERVER.VAP. Вставьте пробел между B и

        RESET. Вы можете вводить команду символами как нижнего, так и

        верхнего регистров.

        Подставьте номер связи станции вместо <Номер связи>. Например,

        для освобождения ресурсов станции 12 Вы должны будете запросить

        следующую команду на консоли сервера:

             B RESET 12 <Enter>

        Используйте звездочку (*) для всех станций сети Btrieve, а не

        одной станции. Для освобождения всех станций сети, имеющих

        открытые Btrieve-файлы, запросите следующую команду на консоли

        сервера:

             B RESET * <Enter>

        Операция B RESET не допускает двухсимвольную ASCII связь ID,

        означающую VAP, как вход. Для освобождения файлов, открытых VAP,

        Вы должны использовать соответствующую команду для VAP.

B STATUS

Ф о р м а т к о м а н д ы .

             B STATUS

        О п и с а н и е

        Вы можете применять B STATUS для помощи в определении наиболее

        эффективного уровня ресурсов, распределенных для BSERVER, для

        Вашей среды.

        B STATUS возвращает информацию о запросах сети, пакетных буферах

        и проведенных сеансах для файл-сервера, с которого Вы запросили

        команду. Команда также возвращает сколько раз обновлялся экран

        со времени запроса команды.

        К а к   п р и м е н я т ь  B STATUS

        Для запуска B STATUS введите команду в показанном выше формате на

        сервере, где загружен BSERVER.VAP. Вставьте пробел между B и

        STATUS. Вы можете вводить команду символами как нижнего, так и

        верхнего регистров.

        Когда Вы выполните B STATUS, Btrieve покажет следующий экран:

                 Status for NetWare Btrieve Server VAP v5.xx

          Current, Total requests processed:           nn   nn

          Available, Max request buffers:              nn   nn

          Available, Max SPX packet buffers:           nn   nn

          Unprocessed SPX packet buffers:              nn

          Current, Total SPX packets received:         nn   nn

          Current, Total SPX packets sent:             nn   nn

          Current, Total SPX requests processed:       nn   nn

          Current, Max, Peak SPX sessions:             nn   nn   nn

          Nuber of display iterations:                 nn

        Значения "Current" - значения, накопленные во время запроса

        команды B STATUS и отображаемые в первом столбце. Значения

        Total" - значения, накопленные со времени загрузки BSERVER

        и отображаемые во втором столбце. Значения "Max" - максимальные

        значения ресурсов, допустимых в сети текущей конфигурации,

        отображаются во втором столбце. Значения "Peak' отражают самую

        высокую степень использования ресурсов со времени загрузки

        BSERVER. Следующие абзацы описывают информацию, возвращаемую

        командой B STATUS.

        "Current, Total requests processed" отражает число запросов

        сети с помощью BSERVER с рабочих станций и других VAP таких,

        как NetWare SQL.

        "Available, Max request buffers" отражает число активных

        процессов для VAP. Для BSERVER это значение должно быть всегда

        равно 1.

        "Available, Max SPX packet buffers" отражает число пакетных

        буферов NetWare, допустимых на BSERVER, и максимальное число

        на сервере.

        "Unprocessed SPX packet buffers" отражает разницу между

        максимальным числом допускаемых NetWare пакетных буферов на

        сервере, и числом, допустимых для BSERVER.

        "Current, Total SPX packets received" отражает число сетевых

        пакетов, полученных BSERVER с рабочей станции.

        "Current, Total SPX packets sent" отражает число сетевых

        пакетов, посланных BSERVER на рабочую станцию.

        "Current, Max, Peak SPX sessions" отражает число проведенных

        сеанcов BSERVER и максимальное число. допустимое BSERVER.

        "Nuber of display iterations" отражает, сколько раз был

        обновлен экран со времени запроса команды B STATUS.

B USAGE

Ф о р м а т к о м а н д ы .

B USAGE

О п и с а н и е

        Вы можете применять B USAGE для помощи в определении, был ли

        BSERVER сконфигурирован самым эффективным образом для Вашей среды.

        Консольная команда B USAGE возвращает информацию о следующих

        опциях конфигурации Btrieve:

          - Открытые файлы

          - Драйверы файлов

          - Захваты

          - Транзакции

        К а к   п р и м е н я т ь  B USAGE

        Для запуска B USAGE введите команду в показанном выше формате на

        сервере, где загружен BSERVER.VAP. Вставьте пробел между B и

        USAGE. Вы можете вводить команду символами как нижнего, так и

        верхнего регистров. Когда Вы выполняете B USAGE, Btrieve покажет

        на экране:

                 Usage for NetWare Btrieve Server VAP v5.xx

          Current, Max, Peak files:                    nn   nn   nn

          Current, Max, Peak handles:                  nn   nn   nn

          Current, Max, Peak locks:                    nn   nn   nn

          Current, Max, Peak transactions:             nn   nn   nn

        Значения "Current" - значения, находящиеся в использовании в

        настоящий момент и отображаемые в первом столбце. Значения

        "Max" - максимальные значения ресурсов, допустимых в сети текущей

        конфигурации BSERVER, отображаются во втором столбце. Значения

        "Peak" отражают самую высокую степень использования ресурсов со

        времени загрузки BSERVER.

{[logo.gif]}  {[eXclusive Banner Network]}{[GooDoo 120]}

{Программы} •{Железо} • {Драйверы} • {Хостинг} •{Энциклопедия рекламы}

| {<<} | {<} | {>} | {>>}

------------------------------------

ГЛАВА 5.ИНТЕРФЕЙС ПРИКЛАДНЫХ

Интерфейс прикладных программ Btrieve дает Вам доступ к структурам Btrieve-файлов из ваших прикладных программ. Через эти программы Ваша прикладная программа посылает вызовы, определяющие операцию для выполнения, данные для передачи или получения, информацию о статусе и позиционировании. Эта глава описывает, как вызывать Btrieve из программм, написанных на одном из следующих языков:

* IBM (или Microsoft) BASIC и BASIC-компилятор

* IBM (или Microsoft) Pascal

* Turbo Pascal

* Microsoft COBOL

* Microsoft C

* Lattice c

* Ассемблер

Для описания интерфейса, не имеющегося в данном руководстве, смотрите файл INTERFACE.DOC на программной дискете Btrieve.

------------------------------------

Примечание:

         До того, как Вы сможете вызвать Btrieve из прикладной

         программы на любом языке, Вы должны загрузить BREQUEST

         (Инициатор запросов Btrieve) в память рабочей станции.

         ---------------------------------------------------------

СВЯЗЬ BTRIVE И BASIC

        Интерфейс с Btrieve - в основном одинаков и для BASIC-

        компилятора, и для BASIC-интерпретатора. Для BASIC-

        компилятора Вы связываете интерфейс Btrieve с Вашей BASIC-

        программой после компиляции. Для BASIC-интерпретатора Вы

        загружаете интерфейс Btrieve как резидентную в памяти программу.

        Формат обращений к Btrieve - один и тот же для обоих.

        BASIC-ИНТЕРПРЕТАТОР

        Для вызова Btrieve из BASIC-интерпретатора Ваша прикладная

        программа должна инициировать выполнение BASIC с соответствующими

        параметрами и правильно загрузить Btrieve-интерфейс с BASIC.

        Если Вы не выполнили правильно эти два шага, прикладная программа

        Btrieve не стартует надлежащим образом, если вообще стартует.

        И н т е р ф е й с   BASIC-интерпретатора

        Btrieve-интерфейс с BASIC - подпрограмма на ассемблере,

        называющаяся BASXBTRV.EXE, которую прикладная программа на BASIC

        должна вызывать для для связи с Btrieve Record Manager.

        В операционной  системе MS-DOS BASIC-интерфейс -  резидентная в

        памяти программа, которую вы должны загрузить до того, как Вы

        сможете запустить Вашу прикладную программу на BASIC. Каждая

        рабочая станция должна иметь свою загруженную копию BASXBTRV.

        После того, как Вы один раз запустили Btrieve-интерфейс с BASIC,

        Ваша прикладная программа может использовать операторы CALL для

        выполнения Btrieve-операций.

        Интерфейсная программа пишет одну запись в выходной файл,

        содержащий адрес сегмента, в который она загружена, в десятичной

        форме. Ваша BASIC-программа читает этот файл и использует

        хранящийся там адрес сегмента в операторе DEF SEG. После того,

        как Ваша программа выполнит DEF SEG, она может использовать

        оператор CALL (описанный далее в этой главе) для связи с Btrieve

        Record Manager.

        Для загрузки резидентного в памяти интерфейса введите следующую

        команду:

             <Устройство>BASXBTRV<Имя файла.Расширение>

        Замените <Устройство> на имя устройства, содержащего Btrieve-

        файлы.

        Замените <Имя файла.Расширение> на имя файла, который будет

        содержать адрес сегмента интерфейса. Вы должны задать имя файла

        в виде:

             <Устройство>:<имя файла.Расширение>

        Вы можете опустить <Устройство>, если Вы намерены использовать

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

        загрузили интерфейс, он остается в памяти до перезапуска системы.

        Для сетевой среды важно, является ли заданное для BASXBTRV при

        инициализации имя файла локальным или уникальным именем файла.

        Так как адрес сегмента, куда загружается BASXBTRV, может

        отличаться для рабочих станций, каждая рабочая станция должна

        иметь свой собственный файл с адресом сегмента. Например, для

        загрузки BASXBTRV и задания SEGMENT.ADR в качестве файла с

        адресом сегмента Вы долджны запросить следующую команду:

             BASXBTRV SEGMENT.ADR

        После того, как BASIC-интерфейс загрузится в память и запишет

        свой адрес сегмента в файл, на дисплее появится следующее

        сообщение:

             Btrieve Basic interface loaded at segment xxxxx

            (Btrieve Basic интерфейс загружен в сегмент xxxxx)

        Ваша программа в BASIC-интерпретаторе должна включать следующие

        операторы чтения и определения адреса сегмента, чтобы обращаться

        к Btrieve:

        30 OPEN "SEGMENT.ADR" FOR INPUT AS #1 'Открыть файл, содержаший

                                                адрес сегмента

        40 INPUT #1, SEG.ADDR%                'Получить адрес

                                               сегмента интерфейса

        50 DEF SEG = SEG.ADDR%                'Установить адрес для

                                               обращений к Btrieve

        Рисунок 4.1 иллюстрирует различные программы, загруженные в

        память, при запуске прикладной программы Btrieve, напмсанной на

        BASIC-интерпретаторе. Первым загружен MS-DOS, за ним следует

        резидентный в памяти BASIC-интерфейс - BASXBTRV. Btrieve загружен

        после интерфейса. Оставшаяся память доступна Вашей прикладной

        программе.

                   Начало

                   памяти>>>  ------------------------------¬

                              ¦                             ¦

                              ¦           DOS 3.x           ¦

                              ¦                             ¦

                              +-----------------------------+

                              ¦                             ¦

                              ¦          BASXBTRV           ¦

                              ¦(Интерфейс BASIC-интерпрет.) ¦

                              ¦                             ¦

                              +-----------------------------+

                              ¦                             ¦

                              ¦          BREQUEST           ¦

                              ¦                             ¦

                              +-----------------------------+

                              ¦                             ¦

                              ¦Прикладная программа Btrieve ¦

                              ¦                             ¦

                              L------------------------------ <<Конец

                                                                памяти

                                Рисунок 5.1

              Карта резидентного в памяти BASIC-интерфейса

З а п у с к BASIC-интерпретатора

        Обычно BASIC допускает длину записи 128 байт для любого

        открываемого программой файла. Для доступа к Btrieve-файлу с

        длиной логической записи большей 128 байтов Вы должны включить

        параметр размера файла, задающий длину логической записи файла,

        в команду, вызывающую BASIC-интерпретатор:

             BASIC  [/S:yyy]

        В приведенном выше примере yyy - длина логической записи самого

        большого Btrieve-файла, к которому Ваша программа будет иметь

        доступ. См. руководство по BASIC для дополнительной информации

        по заданию этой опции.

        BASIC-КОМПИЛЯТОР

        Для выполнения программы BASIC-компилятора, обращающейся к

        Btrieve, Вы должны связать программы соответствующего Btrieve-

        интерфейса с об'ектным файлом BASIC-компилятора. Btrieve-

        дискеиа содержит файл, который Вы должны включить в Ваш редактор

        BASIC-а: BASXBTRV.OBJ. Подробное описание редактора связей см. в

        руководстве по Вашей операционной системе и по BASIC.

        Для редактирования связей BASIC-программы, для которой об'ектный

        файл хранится в файле BASPROG, с Btrieve-интерфейсом BASICа

        BASXBTRV.OBJ Вы должны ответить на подсказку редактора связей

        для об'ектных модклей следующим образом:

              Object Modules [.OBJ]:basprog+basxbtrv

             -----------------------------------------------------------

             ПРИМЕЧАНИЕ:

             Microsoft Quick BASIC использует файл QBIXBTRV.OBJ как

             программу Btrieve-интерфейса и требует процедуры, отличные

             от других версий BASIC-а, для открытия файлов и просмотра

             буфера данных. См. файл INTRFACE.DOC на дискете "PROGRAM"

             -----------------------------------------------------------

ВЫЗОВ BTRIEVE ИЗ BASIC

При использовании BASIC-компилятора и BASIC-интерпретатора шаги для вызова Btrieve - одни ите же. Для доступа к данным Btrieve- файла Ваша BASIC-прикладная программа должна сперва выполнить стандартный оператор BASICа OPEN NUL для размещения буфера:

OPEN "NUL" AS # 1

Когда BASIC выполнит оператор OPEN, он разместит область "Блок

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

Например, если Вы задаете файл адресов, Ваша прикладная программа должна включать следующий оператор:

         FIELD #1, 30 AS NAM$, 30 AS STREETS$, 30 AS CITY$,

                   2 AS STATE$, 5 AS ZIP$

Этот оператор показывает, что буфер полей, предварительно распределенный для файла #1, содержит записи, в которых первые 30 символов содержат имя, следующие 30 символов - улицу и т.д.

BASIC ограничивает весь оператор длиной 255 символов. Если Ваша запись содержит очень много полей, Вы может быть и не сумеете полностью описать Ваши данные в одном операторе BASIC. BASIC позволяет применять столько операторов FIELDS, сколько потребуется для описания записей. Различные имена во всех операторах FIELD применимы в одно и то же время. Каждый новый оператор FIELD переопределяет буфер с позиции первого символа. Поэтому Вы должны использовать фиктивное поле как первый вход в последовательности операторов FIELD для расчета полей, которые были уже заданы.

Например, если записи определенные предыдущим оператором FIELD содержали номер телефона после почтового индекса, Вы можете определить поле номера телефона в следующем операторе:

FIELD #1, 97 AS DUMMY$, 7 AS PHONE$

Так как Btrieve использует буфер в FCB для передачи записей, прикладная программа должна включать оператор FIELD для того, чтобы иметь доступ к данным, возвращаемым Btrieve. Смотрите руководство по BASIc для полного описания операторов OPEN и FIELD. вы должны использовать команду LSET для сохранения значений в буфере, определенном оператором FIELD.

После того, как стандартный оператор BASIC OPEN откроет Btrieve- файл, Ваша прикладная программа готова посылать запросы Btrieve Record Manager. Сперва Ваша прикладная программа выполняет Btrieve-операцию Open. После этого Btrieve обрабатывает все чтения, записи и модификации файлов через btrieve-запросы. Ваша прикладная пограмма должна выполнить Btrieve-операцию Close для завершения работы.

Все обращения к Btrieve из BASIc должны быть в следующем формате:

          CALL BTRV (Операция, Статус, FCB, Длина буфера данных,

               Буфер ключа, Номер ключа)

Для BASIC-интерпретатора BTRV должно быть числом 0. В BASIC- компиляторе BTRV - внешнее имя, разрешаемое редактором связей. Хотя при каждом обращении требуются все параметры, Btrieve не использует все параметры для каждой операции. В некоторых случаях Btrieve игнорирует их значение. Более детальное описание параметров смотрите в Главе 5 этого руководства. Следующие разделы описывают каждый параметр.

К о д о п е р а ц и и

Параметр операции определяет, какую Btrieve-функцию вы хотите выполнить. Задаваемая Вами переменная должна быть целого типа и может быть одним из допустимых кодов Btrieve-операции, описанных в Главе 6 этого руководства. (также смотрите Приложение A для полного списка этих кодов). ваша прикладная программа должна задавать правильный код операции при каждом обращении к Btrieve. Btrieve Record Manager никогда не изменяет код.

К о д с т а т у с а

Параметр статуса содержит значение кода, показывающее на возникновение ошибки во время Btrieve-операции. Btrieve Record Manager возвращает код статуса 0 после успешной операции. Btrieve показывает на все ошибки во время выполнения, возвращая ненулевое значение в параметр кода статуса.

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

Б л о к у п р а в л е н и я ф а й л о м

BASIC размещает область "Блока управления файлом" (FCB) при выполнении оператора OPEN. Btrieve использует этот блок для поддержки своей позиционной информации и передачи записей данных. Поэтому Ваша прикладная программа должна передавать адрес FCB для Record Manager при каждом обращении. Ваша прикладная программа должна использовать разные адреса FCB для каждого отдельного Btrieve-файла, к которому она имеет доступ.

Для определения адреса FCB Ваша прикладная программа на Бейсике должна использовать оператор VARPTR. В следующем примере BASIC возвращает адрес FCB для файла, открытого как #1, в целую переменную FCB.ADDR%.

             FCB.ADDR% = VARPTR(#1)

Смотрите руководство по BASIC для полного описания оператора VARPTR.

Д л и н а б у ф е р а д а н н ы х

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

Б у ф е р к л ю ч а

При каждом Btrieve-обращении Ваша BASIC- программа должна передать строковую переменную, содержащую значение ключа. Если значение ключа - целое число, Ваша прграмма должна перевести ее в строковую, используя оператор MKI$ до обращения к Btrieve. Если ключ состоит из двух или более разрывных сегментов, вы должны объединить их в одну строковую переменную и передать эту переменную как буфер ключа. В зависимости от операции ваша программа может устанавливать переменные или Record Manager может возвращать их.

Record Manager возвращает ошибку, если строковая переменная, передаваемая как буфер ключа, короче, чем заданная длина ключа. Если первый вызов Вашей прикладной программы не требует инициализации буфера ключа, Вы должны присвоить строковой переменной значение SPACEUNDEF, где x представляет заданную длину ключа. До тех пор, пока Ваша прикладная программа не присвоит в BASIC значение строковой переменной, она будет иметь длину 0.

Н о м е р к л ю ч а

Вы можете задавать до 24 различных ключей при создании Btrieve- файла. Когда Ваша прикладная программа будет иметь доступ к файлу, она должна сообщить Record Manager путь доступа для операции. Параметр номера ключа - целая переменная со значением от 0 до 23, где 0 -сегмент первого ключа. определенного для файла. Btrieve никогда не повторяет это значение.

ПРИМЕР СПИСКА ПАРАМЕТРОВ

BASIC-программа, показанная ниже на Рисунке 4.2, открывает Btrieve-файл и ищет запись данных, соответствующую первому

значению ключа 0 - полю имени.

'Строки с 5 по 20 применимы только для BASIC-интерпретатора. 'Не включайте их в BASIC-компилятор 5 BTRV = 0

10 OPEN "SEGMENT.ADR" FOR INPUT AS #1 15 INPUT #1, SEG.ADDR%

20 DEF SEG = SEG.ADDR%

30 OPEN "NUL" AS #2

40 FIELD #2, 30 AS NAME$, 30 AS STREETS$,

30 AS CITY$, 2 AS STATE$, 6 AS ZIP$ 50 OP% = 0 : STATUS% = 0

70 FCB.ADDR% = VARPTR(#2) : BUF.LEN% = 98 80 KEY.BUF$ = "ADDRESS.BTR

90 KEY.NUM% = 0

100 CALL BTRV(OP%,STATUS%,FCB.ADDR%,BUF.LEN%,KEY.BUF$,KEY.NUM%) 110 IF STATUS% <> O THEN

PRINT "Ошибка открытия файла. Статус =", STATUS% : END 120 OP% = 12

125 KEY.BUF$ = SPACEUNDEF

130 CALL BTRV(OP%,STATUS%,FCB.ADDR%,BUF.LEN%,KEY.BUF$,KEY.NUM%) 140 IF STATUS% <> O THEN

PRINT "Ошибка открытия файла. Статус =", STATUS% : END 150 PRINT "Первая запись файла",NAM$,STREET$,CITY$,STATE$,ZIP$

                    Рисунок 5.2

               Btrieve-вызов из BASIC

СВЯЗЬ BTRIVE И PASCAL

Для доступа к Btrieve-файлам прикладная программа на Паскале должна задать BTRV как целую функцию. Когда Ваша прикладная программа вызывает эту функцию, она выполняет различные типы доступа к файлу в зависимости от заданных параметров. Интерфейс Паскаля взаимодействует с Btrieve Record Manager. Вы должны загрузить Record Manager, резидентную в памяти программу на ассемблере, до запуска Вашей прикладной программы.

Объявите Btrieve-функцию как внешнюю для IBM (или Microsoft) Pascal. Btrieve обеспечивает маленькой программой на ассемблере которую вы можете связать с Вашей прикладной программой на Паскале как внешнюю функцию. Для Turbo Pascal Btrieve обеспечивает исходный код интерфейса таким образом, что вы можете включить его с Вашей программой на Паскале для компиляции.

Программная дискета Btrieve содержит файл, требуемый для включения в Ваш исходный файл на Паскале. Для IBM Pascal файл содержит объявление внешней функции для BTRV. Для Turbo Pascal файл содержит код всего Btrieve-интерфейса.

Ваша прикладная программа получает доступ ко всем Btrieve-файлам, вызывая функцию BTRV. Это -целая функция, возвращающая статус операции. Если вы используете IBM (или Microsoft) Pascal, используйте метакоманду $INCLUDE для подключения файла BEXTERN114S. пример ниже показывает как определена внешняя функция BTRV:

        function BTRV (     OP           : integer;

                 vars POS_BLOCK    : string;

                 vars DATA_BUFFER  : string;

                 vars DATA_LEN     : integer;

                 vars KEY_BUFFER   : string;

                   KEY_NUMBER   : integer ) :integer; extern;

Если вы используете Turbo Pascal, применяйте команду $I для подключения файла TURXBTRV114S. Btrieve-функция определяется следующим образом:

        function BTRV (     OP           : integer;

                 var  POS_BLOCK,

                 var  DATA_BUFFER;

                 var  DATA_LEN     : integer;

                 var  KEY_BUFFER;

                   KEY_NUMBER   : integer ) :integer;

КОМПОНОВКА ПРИКЛАДНОЙ PASCAL-ПРОГРАММЫ С BTRIEVE

Если вы используете IBM (или Microsoft) Pascal, вы должны подключить файл PASXBTRV.OBJ к редактору связей Паскаля. Для компановки объектного файла Паскаля (PASPROG) с интерфейсом IBM Pascal Вы должны ответить на подсказку редактора связей следующим образом:

Object Modules[.OBJ]:pasprog+pasxbtrv

Если Вы используете Turbo Pascal подключайте исходный файл интерфейса TURXBTRV114S к Вашей программе при компиляции.

ВЫЗОВ BTRIEVE ИЗ PASCAL

Ваша Pascal-прикладная программа никогда не должна выполнять стандартный ввод/вывод Паскаля для Btrieve-файлов. Ваша прикладная программа должна выполнять весь ввод/вывод Btrieve- файла с помощью Btrieve-функций. Первый Btrieve-вызов, который должна выполнить Ваша прикладная программа, -операция Open. Вслед за этим Вы можете читать, писать и модифицировать файлы через обращения к Btrieve. До завершения Вашей прикладной программы необходимо выполнить Btrieve-операцию Close.

Все обращения к Btrieve должны быть выполнены через BTRV- функцию. Результат функции всегда целое значение, соответствующее одному из кодов статуса, перечисленных в Приложении B. После вызова Btrieve ваша прикладная программа должна всегда проверять значение переменной статуса. Статус 0 показывает на успешное выполнение операции. Ваша прикладная программа должна быть способна распознавать и принимать решения по ненулевым статусам.

Хотя при каждом обращении требуются все параметры, Btrieve не использует все параметры для каждой операции. В некоторых случаях Btrieve игнорирует их значение. Более детальное описание параметров смотрите в Главе 5 этого руководства. Следующие разделы описывают каждый параметр.

К о д о п е р а ц и и

Параметр операции определяет, какой тип Btrieve-функции Вы хотите выполнить. Ваша прикладная программа должна быть способна задавать правильный код операции при каждом обращении к Btrieve. Record Manager никогда не изменяет код операции. Задаваемая Вами переменная должна быть целого типа и может быть одним из допустимых кодов операций, описанных в Главе 6. Приложение A содержит полный список этих кодов

Б л о к п о з и ц и и

Ваша прикладная программа должна размещать отдельный блок позиции для каждого открываемого Btrieve-файла. Btrieve инициализирует блок позиции при выполнении операции Open и ссылается и корректирует данные в блоке позиции при всех операциях над файлами. Поэтому Ваша прикладная программа должна посылать один и тот же блок позиции при всех последовательных Btrieve-операциях над файлами. Когда Ваша прикладная программа имеет более одного открытого файла одновременно, btrieve использует блок позиции для определения, на какой файл ссылаются при каком-либо вызове. Вдобавок, Ваша прикладная программа никогда не должна изменять значения в блоке позиции.

IBM Pascal прикладная программа должна размещать 128-байтовую строку для блока позиции. Если вы используете Turbo Pascal, Вы должны размещать параметр блоак позиции как 128-байтовый символьный массив.

Б у ф е р д а н н ы х

Буфер данных содержит записи, передавемые Вашей прикладной программой в Btrieve и из него. Btrieve ожидает строковый тип для IBM Pascal. Для Turbo Pascal вы можете использовать любой тип данных.

Вы можете захотеть задать структуру записи Паскаля для описания

данных, хранимых в файле. Для передачи переменной типа записи в IBM Pascal применяйте опцию case для задания переменной строкового типа структуры. Для Turbo Pascal Вы можете посылать саму запись.

Когда Вы вычисляете длину переменной строки, примите в расчет, что элементы четной длины в записи могут потребовать дополнительный байт для хранения, независимо от того, была ли упакована запись или нет. Это также важно рассматривать при определении длины записи для утилиты CREATE. Смотрите руководство по Паскалю для дополнительной информации о типах записи.

Д л и н а б у ф е р а д а н н ы х

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

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

Б у ф е р к л ю ч а

Ваша прикладная программа должна передать строковую переменную для IBM Pascal или переменнуб любого типа для Turbo Pascal, содержащую значение ключа при каждом обращении к Btrueve. В зависимости от операции Ваша прикладная программа может устанавливать эту переменную или Record Manager может возвращать ее.

Ддя IBM Pascal, если значение ключа - целое число, Вы должны определить ее как структуру записи с двумя переменными. Одна переменная определяет ключ как целое. другая определяет его как двухсимвольную строку. Вы должны использовать строковую переменную для обращений к Btrieve.

Для Turbo Pascal Вы можете передавть сам буфер ключа, независимо от типа.

Если ключ состоит из двух или более сегментов, используйте структуру записи для определения полей ключа. Затем используйте переменную для передачи буфера ключа в Btrieve.

Н о м е р к л ю ч а

Вы можете задавать до 24 различных ключей при создании Btrieve-

файла. Поэтому Ваша прикладная программа должна сообщить Record Manager путь доступа для данной операции. Параметр номера ключа - целая переменная со значением от 0 до 23, где 0 -сегмент первого ключа. определенного для файла. Record Manager никогда не повторяет этот параметр.

ПРИМЕР СПИСКА ПАРАМЕТРОВ

IBM (или Microsoft) Pascal-программа, показанная ниже на Рисунке 5.3, открывает Btrieve-файл и ищет запись данных, соответствующую первому значению ключа 0 - полю имени.

        const

          B_GET_FST = 12;

          B_OPEN = 0;

        type

          ADDRESS_REc = record

         case integer of

          1: (NAME      : string(30);

             STREET     : string(30);

             CITY       : string(30);

             STATE      : string(2);

             ZIP        : string(5));

          2: (ENTIRE    : string(98));

         end;

        var

          DATA_BUF         : ADDRESS.REC;

          DB_LEN           : integer;

          FILE_NAME        : string(14);

          KEY_BUF          : string(30);

          POS_BLOCK        : string(128);

          STATUS           : integer;

        begin

          FILE_NAME :='B:ADDRESS.BTR';

          STATUS :=BTRV(B_OPEN,POS_BLOCK,DATA_BUF.ENTIRE,DB_LEN,

                  FILE_NAME,0);

          if STATUS <> O then

              begin

           writelen(OUTPUT,'Ошибка открытия файла. Статус =',

                    STATUS); return;

           end;

          DB_LEN :=sizeof(ADDRESS_REC);

          STATUS :=BTRV(B_GET_FST,POS_BLOCK,DATA_BUF.ENTIRE,DB_LEN,

                  KEY_BUF,0);

          if STATUS <> O then

              begin

           writelen(OUTPUT,'Ошибка открытия файла. Статус =',

                    STATUS);

          else

           writelen(OUTPUT,'Первая запись файла',DATA_BUF.ENTIRE);

        end.

                   Рисунок 5.3

              Обращение к Btrieve из IBM PAscal

Рисунок 5.4 показывает ту же самую программу, написанную на Turbo Pascal. Это единственный пример для Turbo Pascal в этом руководстве. Все другие примеры приведены для IBM (Microsoft) Pascal.

На рисунке 5.4 прикладная программа использует символьные массивы вместо строк для полей в буфере данных и буфере ключа, потому что Turbo Pascal хранит байт двоичной длины в первой позиции строкового поля при инициализации поля. Если Вы пытаетесь использовать такое значение как ключ Btrieve-файла без определения его как l-строки, результат будет непредсказуем. Когда Btrieve сравнивает значения ключей при случайном или последовательном поиске, он сравнивае их байт за байтом от абсолютного базиса. Байт длины рассматривается как часть значения вместо индикатора длины, пока ключ не будет определен как l-строка.

Хотя пример на Рисунке 5.4 использует переменные записи для параметров блока позиции, буфера данных и буфера ключа, Btrieve не требует этого от Вас. Этот пример просто иллюстрирует один из способов написания программы.

        const

          B_GET_FST = 12;

          B_OPEN = 0;

        type

          ADDRESS_REC = record

         {Structure of address file entry}

         case integer of

          1: (NAME      : array[1..30] of char;

             STREET     : array[1..30] of char;

             CITY       : array[1..30] of char;

             STATE      : array[1..2] of char;

             ZIP        : array[1..5] of char;

          2: (START     : integer);

         end;

          FILE_NAME = record

          case integer of

             1:(VALUE   : array[1..14] of char);

             2:(START   : integer);

          end;

          KEY_BUF = record

          case integer of

             1:(VALUE   : array[1..30] of char);

             2:(START   : integer);

          end;

        var

          DATA_BUF         : ADDRESS.REC;

          DB_LEN           : integer;

          FNAME            : FILE_NAME;

          KBUF             : KEY_BUF;

          POS              : record

          case integer of

             1:(START   : integer);

             2:(BLK     :array[1..128] of byte);

          end;

          STATUS           : integer;

          I                : integer;

        {$I TURXBTRV119S}

        begin

          FNAME.VALUE :='B:ADDRESS.BTR';

          STATUS :=BTRV(B_OPEN,POS_START,DATA_BUF.START,DB_LEN,

                  FNAME.START,0);

          if STATUS <> O then

           writelen(OUTPUT,'Ошибка открытия файла. Статус =',

                    STATUS)

          else

           begin

          DB_LEN :=sizeof(ADDRESS_REC);

          STATUS :=BTRV(B_GET_FST,POS.START,DATA_BUF.START,DB_LEN,

                  KBUF.STAT,0);

          if STATUS <> O then

           writelen(OUTPUT,'Ошибка открытия файла. Статус =',

                    STATUS)

          else

           writelen(OUTPUT,'Первая запись файла',DATA_BUF.NAME,

                    DATA_BUF.STREET,DATA_BUF.CITY,DATA_BUF.STATE,

                 DATA_BUF.ZIP);

          end;

        end.

                   Рисунок 5.4

              Обращение к Btrieve из Turbo Pascal

СВЯЗЬ BTRIVE И C

Btrieve-дискета содержит интерфейс для Microsoft и Latice C и для других компиляторов C. Формат обращений к Btrieve идентичен для всех. Связь с другими компиляторами C смотрите в Приложении F которое описывает, как связать Btrieve из ассемблера.

Ваша Btrieve программная дискета содержит исходный код для каждого из этих интерфейсов. Весь C-интерфейс написан на C.

Для доступа к Btrieve-файлу Ваша прикладная программа должна вызвать целую функцию BTRV. Btrieve обеспечивает небольшой интерфейсной программой, связывающей Btrieve Record Manager с Вашей прикладной программой на C. Вы должны загрузить Record Manager до того, как стартуете Вашу прикладную программу.

КОМПОНОВКА ПРИКЛАДНОЙ C-ПРОГРАММЫ С BTRIEVE

После успешной компиляции программы на C скомпануйте ее с C-интерфейсом. Метод, применяемый при компоновке с C-интерфейсом, немного зависит от применяемого Вами компилятора C. Полное описание компоновки смотрите в руководствах по операционной системе и по компилятора.

Если вы используете компилятор Microsoft C, Вы должны скомпилировать интерфейсный файл MSCXBTRV.C с помощью Вашего компилятора. Если Вы компилируете большую модель, Вы должны отредактировать исходный файл интерфейса и сделать изменения, описанные в этом документе. Компануйте Вашу прикладную программу как показано ниже в примере:

Object Modules[.OBJ]:c+cprog+mscxbtrv

ВЫЗОВ BTRIEVE ИЗ C

Ваша прикладная программа никогда не должна выполнять стандартный ввод/вывод C для Btrieve-файлов. Ваша прикладная программа должна выполнять весь ввод/вывод Btrieve- файла с помощью Btrieve-функций. После выполнения операции Open Ваша программа можете читать, писать и модифицировать файлы через обращения к Btrieve. До завершения Вашей прикладной программы необходимо выполнить Btrieve-операцию Close.

Ваша прикладная программа выполняет обращения к Btrieve через целую функцию BTRV. Результат функции всегда целое значение, соответствующее одному из кодов статуса, перечисленных в

Приложении B. После вызова Btrieve Ваша прикладная программа должна всегда проверять значение переменной статуса. Статус 0 показывает на успешное выполнение операции. Ваша прикладная программа должна быть способна распознавать и принимать решения по ненулевым статусам.

Функция BTRV ожидает параметры следующего типа:

          int BTRV(OP,POS_BLK,DATA_BUF,BUF_LEN,KEY_BUF,KEY_NUM)

             int   OP;         /* код операции */

             char  POS_BLK[];  /* блок позиции */

             char  DATA_BUF[]; /* буфер данных */

             int   *BUF_LEN;   /* длина буфера данных */

             char  KEY_BUF[];  /* буфер ключа */

             int   KEY_NUM;    /* номер ключа */

Хотя при каждом обращении требуются все параметры, Btrieve не использует все параметры для каждой операции. В некоторых случаях Btrieve игнорирует их значение. Более детальное описание параметров смотрите в Главе 5 этого руководства. Следующие разделы описывают каждый параметр.

К о д о п е р а ц и и

Параметр операции определяет, какой тип Btrieve-функции Вы хотите выполнить. Могут быть операции чтения, записи, удаления или корректировки. Ваша прикладная программа должна быть способна задавать правильный код операции при каждом обращении к Btrieve. Record Manager никогда не изменяет код операции. Задаваемая Вами переменная должна быть целого типа и может быть одним из допустимых кодов операций, описанных в Главе 6. Приложение A содержит полный список этих кодов.

Б л о к п о з и ц и и

Прикладная программа на C размещает 128-байтовый массив, который Btrieve использует для хранения структур ввода/вывода файла и позиционной информации, описанной в Главе 2. Btrieve инициализирует этот массив, когда Ваша прикладная программа выполняет операцию Open. Btrieve ссылается на данные этого массива и корректирует их при всех операциях над файлом. Ваша прикладная программа никогда не должна изменять значения, хранящиеся в этом массиве.

Когда Ваша прикладная программа имеет более одного открытого файла одновременно, Btrieve использует блок позиции для определения, на какой файл ссылаются при каком-либо вызове. Ваша прикладная программа должна размещать отдельный блок позиции для каждого открываемого Btrieve-файла.

Б у ф е р д а н н ы х

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

Д л и н а б у ф е р а д а н н ы х

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

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

Б у ф е р к л ю ч а

Ваша прикладная программа должна передать адрес переменной, содержащей значение ключа при каждом обращении к Btrieve. Если вы определяете ключ как двоичное, когда Вы впервые создаете файл, вы должны определить переменную типа int, long или unsigned. Если Вы определили ключ как строку, Вы должны определить переменную буфера ключа как структуру или символьный массив. Если ключ состоит из двух или более сегментов, используйте переменную структуры, состоящую из полей сегментов в правильном порядке. В зависимости от операции Ваша прикладная программа может устанавливать эту переменную или Btrieve Record Manager может возвращать ее.

Btrieve не может определить длину буфера ключа при вызове из программы на C. Поэтому вы должны удостовериться, что буфер - по крайней мере не меньше длины ключа, заданной Вами при создании файла. Иначе Btrieve-запросы могут разрушить данные, хранящиеся в памяти за буфером ключа.

Н о м е р к л ю ч а

Вы можете задавать до 24 различных ключей при создании Btrieve- файла. Поэтому Ваша прикладная программа должна сообщить Record Manager путь доступа для данной операции. Параметр номера ключа - целая переменная со значением от 0 до 23, где 0 -сегмент первого ключа. определенного для файла. Record Manager никогда не

повторяет этот параметр.

ПРИМЕР СПИСКА ПАРАМЕТРОВ

C-программа на Рисунке 5.6 открывает Btrieve-файл и ищет запись данных, соответствующую первому значению ключа 0 - полю имени.

#define B_OPEN 0

#define B_FIRST 12

main(){

      struct ADDR_REC          /* Структура записи адреса в файле*/

          {

             char  NAME[30];

             char  STREET[30];

             char  CITY[30];

             char  STATE[2];

             char  ZIP[5];

           };

struct ADDR_REC ADDR_BUF;

int DB_LEN;

char KEY_BUF[30];

char POS_BLK[128];

int STATUS;

STATUS =BTRV(B_OPEN,POS_BLK,&ADDR_BUF,&DB_LEN,"ADDRESS.BTR",0); if (STATUS != O)

        {

           print("Ошибка открытия файла. Статус = %d", STATUS);

           exit(0);

        }

         DB_LEN = sizeof(ADDR_BUF);

STATUS = BTRV(B_FIRST,POS_BLK,&ADDR_BUF,&DB_LEN,KEY_BUF,0); if (STATUS != O)

print("Ошибка открытия файла. Статус = %d", STATUS); else

print("Первая запись файла: %.97s",&ADDR_BUF); };

                   Рисунок 5.6

                Обращение к Btrieve из C

СВЯЗЬ BTRIVE И АCСЕМБЛЕРА

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

* Хранения Btrieve-параметров в памяти в формате, ожидаемом Btrieve Record Manager

* Проверки, что Record Manager был загружен в память

* Вызова Record Manager с помощью выполнения прерывания, передающего управление Btrieve

ХРАНЕНИЕ ПАРАМЕТРОВ

Предыдущие разделы этой главы описывали только семь Btrieve- параметров: статус, код операции, блок позиции, буфер данных, длина буфера данных, буфер ключа и номер ключа. (BASIC-интерфейс объединяет блок позиции и буфер данных в один параметр - FCB. Паскаль и C интерфейс возвращают код статуса как значение функции.)

В действительности Record Manager ожидает десять параметров. Программы интерфейса с языками, обеспечиваемые Btrieve, извлекают три параметра до передачи управления Record Manager. Для создания на ассемблере своего собственного интерфейса с Btrieve Вы должны проинициализировать все десять параметров. Следующий рисунок показывает все десять параметров Btrieve и их формат.

         --------------T----------T-----------------------------¬

         ¦ N параметра ¦ Смещение ¦        Содержание           ¦

         +-------------+----------+-----------------------------+

         ¦      1      ¦     0    ¦  смещение буфера данных     ¦

         +-------------+----------+-----------------------------+

         ¦             ¦          ¦  сегмент  буфера данных     ¦

         +-------------+----------+-----------------------------+

         ¦      2      ¦     4    ¦  длина    буфера данных     ¦

         +-------------+----------+-----------------------------+

         ¦      3      ¦     6    ¦  смещение позиц.информации  ¦

         +-------------+----------+-----------------------------+

         ¦             ¦          ¦  сегмент  позиц.информации  ¦

         +-------------+----------+-----------------------------+

         ¦      4      ¦     10   ¦  смещение FCB               ¦

         +-------------+----------+-----------------------------+

         ¦             ¦          ¦  сегмент  FCB               ¦

         +-------------+----------+-----------------------------+

         ¦      5      ¦     14   ¦  код операции               ¦

         +-------------+----------+-----------------------------+

         ¦      6      ¦     16   ¦  смещение буфера ключа      ¦

         +-------------+----------+-----------------------------+

         ¦             ¦          ¦  сегмент  буфера ключа      ¦

         +-------------+----------+-----------------------------+

         ¦     7,8     ¦     20   ¦  длина ключа  | номер ключа ¦

         +-------------+----------+-----------------------------+

         ¦      9      ¦     22   ¦  смещение статуса           ¦

         +-------------+----------+-----------------------------+

         ¦             ¦          ¦  сегмент  статуса           ¦

         +-------------+----------+-----------------------------+

         ¦      10     ¦     26   ¦  ID интерфейса              ¦

         L-------------+----------+------------------------------

                   Рисунок 5.7

               Структура Btrieve-параметров

До того, как Вы сможете обратиться к Btrieve, Вы должны проинициализировать область данных, содержащую все десять параметров, перечисленных на Рисунке 5.1. Храните смещение этой области данных в регистре DX. Btrieve ожидает адрес блока параметров в DS:DX, когда он получает управление.

ОПИСАНИЕ ПАРАМЕТРОВ

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

Б у ф е р д а н н ы х

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

Д л и н а б у ф е р а д а н н ы х

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

П о з и ц и о н н а я и н ф о р м а ц и я

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

Это один из параметров, извлекаемых Btrieve-интерфейсом прикладной программы. В BASIC эта область получается из FCB. В других языках для этой цели используется часть параметра блока позиции. Вы должны обеспечить Record Manager адресом 90-байтовой области для использования при вызове Btrieve из ассемблера. Та же самая область данных должна быть передана в Btrieve при всех обращениях к тому же файлу.

FCB

Передавайте FCB как двойное слово, содержащее адрес сегмента и смещение 38-байтовой области данных, используемой Btrieve для хранения DOS FCB. Это один из параметров, извлекаемых Btrieve- интерфейсом прикладной программы. В BASIC эта область получается из BASIC FCB. В других языках для этой цели используется часть параметра блока позиции. Вы должны обеспечить Record Manager адресом 38-байтовой области для использования при вызове Btrieve из ассемблера. Тот же самый FCB должен быть передан в Btrieve при всех обращениях к тому же файлу.

К о д о п е р а ц и и

Передавайте код операции как слово, содержащее дкод операции Btrieve. Это должен быть один из кодов Btrieve-операции, перечисленных в Приложении A.

Б у ф е р к л ю ч а

Передавайте буфер ключа как двойное слово, содержащее адрес сегмента и смещение буфера ключа прикладной программы.

Д л и н а к л ю ч а

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

Интерфейсы Btrieve с COBOL и C не могут определить длину буфера ключа, так как он не передается с типом данных при компиляции. В этих случаях Btrieve передает максимальную допустимую длину ключа. Record Manager никогда не будет записывать буфер ключа за заданную длину ключа. Record Manager возвратит ошибку, если этот параметр короче, чем заданная длина ключа.

Н о м е р к л ю ч а

Передавайте номер ключа как байт, содержащий номер ключа, с помощью которого можно получить доступ к файлу.

К о д с т а т у с а

Передавайте код статуса как двойное слово, содержащее адрес сегмента и смещение параметра статуса. Это адрес, по которому Btrieve будет хранить код статуса после выполнения операции.

ID и н т е р ф е й с а

Передавайте ID интерфейса как слово, проинициализированное значением 06176H. Если Вы установите идентификатор в любое другое значение, Btrieve не позволит иметь доступ к записям переменной длины. Эта проверка позволяет Btrieve определять, был ли он вызван из прикладных программ, скомпанованных с предыдущими версиями интерфейса, которые не понимают записи переменной длины7

ПРОВЕРКА ЗАГРУЗКИ RECORD MANAGER

Как только параметры проинициализированы, проверьте, что Record Manager загружен, до обращения к нему. Когда Record Manager загружен, он хранит точку входа в векторе прерываний 07BH. Удостоверьтесь, что слово вектора прерывания 07BH проинициализировано значением 033H, чтобы интерфейс мог определить, загружен ли Record Manager.

ВЫЗОВ RECORD MANAGER

После того, как Вы сохранили адрес Btrieve-параметров в DX и проверили, что Record Manager загружен, Вы готовы к вызову Btrieve. выполните прерывание 07BH и Record Manager выполнит Ваш запрос. Когда операция выполнена, Record Manager вернет управление в Вашу программу по инструкции, следующей за прерыванием. Следующий пример показывает программу, которая проверяет загружен ли Record Manager изатем выполняет прерывание.

          BTR_ERR           EQU 20

          BTR_VECTOR        EQU 07BH*4

          PUSH DS

          SUB  BX,BX                         ;Очистка BX

          MOV  DS,BX                         ;DS=>абсолютный 0

          CMP  WORD PTR BTR_VECTOR[BX],033H  ;Был ли Btrieve

                                  инициализирован

          POP  DS

          JE   DO_INT                        ;Да - переход на

                                  выполнение прерывания

          MOV  STAT,BTR_ERR                  ;Нет - установка

                                  статуса 20

          JMP  OUT                           ;и возврат к вызывающей

                                  программе

          DO_INT:

          INT  07BH                          ;Вызов Record Manager

ИНТЕРФЕЙС OS/2

NetWare Btrieve включает два интерфейса для C-компилятора OS/2 (C2XBTRV.C и C2FXBTRV.C), которые Вы можете подключать к прикладным прогаммам, запускаемым на рабочих станциях OS/2. Интерфейс C2XBTRV.C - для применения с прикладными программами в защищенном режиме. Интерфейс C2FXBTRV.C - для применения с программами OS/2 FAPI.

Если Вы используете язык, который может вызывать программу на ассемблере, Вы можете написать на ассемблере интерфейс с Btrieve, используя как руководство любой исходный текст интерфейса. Следующий раздел содержит руководство по применению интерфейса C и создания своего собственного интерфейса на ассемблере.

ЯЗЫК C

Если Вы применяете C-компилятор, поставляемые с OS/2, Вы имеете две опции:

* Вы можете компилировать или C2XBTRV.C или C2FXBTRV.C интерфейс отдельно от Вашей программы. Или подключайте результирующие объектные модули, когда Вы компануете Ваши программы, или инсталируйте объектную программу в библиотечный файл, который Вы можете подключать к Вашему редактору связей.

* Вы можете подключать исходную программу интерфейса, содержащуюся или в C2XBTRV.C или в C2FXBTRV.C, к исходному тексту Вашей прикладной программы при компиляции Вашей программы.

ЯЗЫК АССЕМБЛЕР

Если вы используете ассемблер, Ваша прикладная программа должна применять механизм динамической компановки OS/2 для получения доступа к Btrieve-программам. Пользуйтесь следующим руководством при создании интерфейса на ассемблере для OS/2:

* Посылайте все параметры в стек.

* Используйте регистр AX для получения кода возвраиа из

Btrieve.

* Используйте форму selector:offset (селектор:смещение) для всех адресов интерфейса.

* Используйте FAR CALL для доступа к программе редактора динамических связей.

* Не извлекайте возвращаемые параметры из стека.

* Задавайте имя программы редактора динамческих связей символами верхнего регистра.

КОМПАНОВКА ПРИКЛАДНЫХ ПРОГРАММ OS/2

Внешние ссылки к программам редактора динамических связей одинаково разрешены и для C и для ассемблера.

Вы должны обеспечить редактору связей библиотеку BTRCALLS.LIB при компановке Ваших объектных файлов. Библиотека содержит записи-определения динамических связей, обеспечивающих соответствие между вызываемой программой и файлом BTRCALLS.DLL. если редактор связей не имеет доступа к BTRCALLS.LIB, он сообщит о недопустимой компановке для точек входа редактора динамических связей.

------------------------------------

Примечание:

          Для домашних прикладных программ Вы должны использовать

          интерфейс C2FXBTRV.C, скомпоновать Вашу прикладную

          программу и затем запустить утилиту OS/2 BIND. Программа

          BUTIL.EXE - пример прикладной программы FAPI.

          -----------------------------------------------------------

ИНТЕРФЕЙС С BROUTER

Если Вы создаете VAP, использующий Btrieve-файлы, Вы должны подключить интерфейс с BROUTER к Вашей программе. Следуйте процедурам, описанным в разделе "Связь Btrieve с ассемблером" со следующими дополнениями:

* Запрашивайте вызов функции "Get Interrupt Vector" для определения, загружен ли BROUTER.

* Сохраните уникальный номер ID клиента в регистре AX до выполнения прерывания 7B.

* Идентифицируйте каждую рабочую станцию, имеющую доступ к

         Вашему VAP, уникальным 2-байтовым номером ID клиента. Вы

         должны обеспечить этот номер для BROUTER для целей процессов

         парралелизма и транзакций. Удобный метод для создания номера

         ID клиента - сохранение номера связи рабочей станции в первом

         байте и уникальное двоичное значение во втором байте.

* Идентифицируйте Ваш VAP в BROUTER, используя уникальный 2-сивол, ASCII идентификатор в регистре BX. Этот идентификатор отличает Ваш VAP от всех других VAP, имеющих доступ к BROUTER. Свяжитесь с Novell Development Products Division, чтобы получить идентификатор для Вашего VAP. Адрес Novell Development Products Division:

               Novell Development Products Division

                  6034 West Courtyard

                   Suite 220

                  Austin, TX 78730

Обычно Ваш интерфейс с BROUTER должен выполнить все следующие шаги:

* Проверить, загружен ли BROUTER, с помощью выполнения обращения к функции "Get Interrupt Vector".

* Сохранить блок Btrieve-параметров в памяти в формате, ожидаемом Record Manager.

* Сохранить адрес блока Btrieve-параметров в регистре DX.

* Сохранить номер ID клиента, который является уникальным для каждой рабочей станции, в регистре AX.

* Сохранить уникальный 2-символ, ASCII идентификатор для VAP, в регистре BX.

* Выполнить прерывание 7B, которое передает управление из Вашего VAP в BROUTER.

{[logo.gif]}  {[eXclusive Banner Network]}{[GooDoo 120]}

{Программы} •{Железо} • {Драйверы} • {Хостинг} •{Энциклопедия рекламы}

| {<<} | {<} | {>} | {>>}

------------------------------------

ГЛАВА 6. ОПЕРАЦИИ ЗАПИСИ BTRIEVE

        В этой главе описаны все 36 операций, которые может выполнять

        Ваша прикладная программа при использовании Btrieve. Для каждой

        операции в этой главе представлена следующая информация:

          - Назначение операции.

          - Таблица, иллюстрирующая значения параметров ожидаемых Btrieve

            от Вашей прикладной программы и посылаемых Btrieve в Вашу

            прикладную программу.

          - Описание действия операции.

          - Предварительные условия, которым должна удовлетворять Ваша

            прикладная программа для успешного выполнения операции.

          - Процедура инициализации параметров, требуемых для выполнения

            операции.

          - Результаты успешного и ошибочного завершения операции.

          - Эффект, оказываемый операцией на Вашу текущую позицию в

            файле.

        Таблица параметров содержит шесть параметров Btrieve, включая

        блок позиции и буфер данных. В Бейсике эти два параметра

        объединены в один FCB параметр в интерфейсе Бейсика. При каждом

        вызове Btrieve Ваша прикладная программа должна посылать в

        Btrieve все параметры, требуемые для используемого Вами языка,

        даже если Btrieve не ждет значения какого-либо параметра или не

        посылает значение какого-либо параметра.

        Параметр статуса не показан в таблице, т.к. Btrieve устанавливает

        его одним и тем же образом для всех операций. До вызова Btrieve

        не ожидает инициализации статуса от Вашей прикладной программы и

        всегда возвращает значение статуса в Вашу прикладную программу.

        Примеры программ, иллюстрирующие каждую операцию для Pascal,

        COBOL, C и BASIC включены в Приложения C, D, E и F.

ABORT TRANSACTION (21)

(Отмена транзакции)

Н а з н а ч е н и е :

        Abort Transaction отменяет все операции, выполненные с начала

        активной транзакции и завершает транзакцию.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦         ¦            ¦      ¦     ¦

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

О п и с а н и е :

        Ваша прикладная программа может выполнять операцию

        Abort Transaction , чтобы завершить прерванную транзакцию.

        Abort Transaction  отменяет все операции, выполненные после

        начала предыдущей операции Begin Transaction, и завершает текущую

        транзакцию.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До выполнения в Вашей прикладной программе операции Abort

        Transaction должны быть выполнены следующие предварительные

        условия:

          - Вы должны задать файл контроля достоверности транзакции

            (используя опцию запуска /T) при загрузке Btrieve&

          - Вы должны успешно выполнить операцию Begin Transaction до

            выполнения операции  Abort Transaction.

        П р о ц е д у р а  :

        Для выполнения операции  Abort Transaction установите код

        операции 21 до выполнения вызова Btrueve. Btrieve проигнорирует

        все остальные параметры при вызове Abort Transaction.

        Р е з у л ь т а т  :

        Если операция Abort Transaction завершилась успешно, Btrieve

        возвратит код статуса равный 0. Все операции Insert(2), Update(3)

        и Delete(4), выполненные с начала транзакции будут удалены из

        файлов.

        Если операция Abort Transaction завершится с ошибками Btrieve

        возвратит ненулевой код статуса, указывающий на причину ошибки.

        Наиболее распространенные ненулевые коды статуса для этой

        операции:

          - 36  Нет конфигурации для транзакций.

          - 39  Нет Begin Transaction

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Abort Transaction не оказывает влияния на

        позиционирование.

BEGIN TRANSACTION (19)

(Начало транзакции)

Н а з н а ч е н и е :

        Операция Begin Transaction помечает начало множества логически

        связанных Btrieve-операций.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦         ¦            ¦      ¦     ¦

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Операция Begin Transaction определяет начало транзакции.

        Транзакции полезны, когда Вам необходимо выполнить множество

        Btrieve-операций для записи единственного события и если Ваша

        база данных несовместима, если все операции не завершены.

        Транзакция может включать любое число Btrieve-операций над не

        более чем 12 файлами. Заключая множество операций между Begin и

        End Transaction Вы можете быть уверены, что Btrieve не запишет

        какую-либо из этих операций до тех пор, пока не будут успешно

        завершены все операции.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию,

        должны быть выполнены следующие предварительные условия:

          - Вы должны задать файл контроля достоверности транзакци при

            конфигурации BSERVER.

          - Ваша прикладная программа должна закончить или отменить все

            предыдущие транзакции.

        П р о ц е д у р а  :

        Для выполнения Begin Transaction установите код операции в 19 до

        вызова Btrieve. Btrieve проигнорирует все другие параметры при

        вызове Begin Transaction.

        Р е з у л ь т а т  :

        Если операция Begin Transaction завершилась успешно, Btrieve

        вернет код статуса равный 0.

        Если операция завершится с ошибками, Btrieve вернет ненулевой код

        статуса. Наиболее распространееные ненулевые коды статуса для

        этой операции:

          - 36  Нет конфигурации для транзакций

          - 37  Транзакция не активна

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Begin Transaction не оказывает влияния на

        позиционирование.

        CLEAR OWNER (30)

        (Очистить владельца)

        Н а з н а ч е н и е  :

        Операция Clear Owner удаляет имя владельца, связанное с Btrieve-

        файлом.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦      ¦     ¦

        Возвращаемые        ¦    x    ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Clear Owner удаляет имя владельца, присвоенное Вами файлу

        операцией Set Owner. Если предварительно данные были зашифрованы

        Btrieve расшифрует данные во время операции Clear Owner.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию

        Clear Owner должны быть выполнены следующие предварительные

        условия:

          - Btrieve-файл должен быть открыт.

          - Имя владельца должно быть присвоено файлу.

          - Не должно быть активных транзакций.

        П р о ц е д у р а  :

        Для выполнения операции Clear Owner установите следующие Btrieve-

        параметры:

          - Установите код операции в 30.

          - Передайте блок позиции, идентифицированный с файлом, который

            Вы хотите очистить

        Р е з у л ь т а т  :

        После операции Clear Owner Btrieve больше не запрашивает имя

        владельца при попытке открыть файл. Если Вы предварительно

        зашифровали данные в Btrieve-файле,когда задавали владельца,

        Btrieve расшифрует данные во время операции Clear Owner  Чем

        больше данных должен расшифровать Btrieve, тем дольше выполняется

        операция Clear Owner.

        Наиболее распростанееные ненулевые коды статуса для этой операции

          -  3  Файл не открыт

          -  41  Операция недопустима

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Clear Owner не оказывает эффекта на позиционирование.

CLOSE (1)

(Закрыть)

Н а з н а ч е н и е :

Операция Close закрывает Btrieve-файл.

П р и м е н е н и е п а р а м е т р о в :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦      ¦     ¦

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

О п и с а н и е :

        При завершении Вашей задачей доступа к Btrieve-файлу необходимо

        выполнить операцию Close. Эта операция закрывает файл, связанный

        с заданным блоком позиции и отменяет все запреты, наложенные

        прикладной задачей на файл. После операции Close Ваша прикладная

        программа не может вновь иметь доступ к файлу до объявления

        другой операции Open для этого файла.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию Close

        должны быть выполнены следующие предварительные условия:

          - Btrieve-файл должен быть открыт.

          - Все транзакции должны быть закончены или отменены.

        П р о ц е д у р а  :

        Для выполнения этой операции установите следующие Btrieve-

        параметры:

           - Установите код операции в 1.

          - Передайте достоверный блок позиции для файла, который Вы

            хотите закрыть

        Р е з у л ь т а т  :

        Если операция Close завершилась успешно, произойдет следующее:

          - Блок позиции дя закрытого файла не будет больше достоверным.

            Ваша прикладная программа может использовать его для другого

            файла или может использовать область данных для других целей.

        Если операция Close завершилась ошибочно, файл останется открытым

        Наиболее распростанееный ненулевой код статуса для этой операции

        статус 3 (файл не открыт).

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Close удаляет всю позиционную информацию, связанную с файлом.

        CREATE (14)

        (Создать)

        Н а з н а ч е н и е  :

        Операция Create создает Btrieve-файл с заданным набором

        характеристик.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦   x     ¦      x     ¦   x  ¦  x  ¦  x

        Возвращаемые        ¦   x     ¦            ¦   x  ¦     ¦

        О п и с а н и е  :

        Операция Create позволяет Вам создать Btrieve-файл из Вашей

        прикладной программы. Она выполняет ту же функцию, что и утилита

        CREATE, описанная в Главе 3. См. Главы 3 и 4 этого руководства

        для дополнительной информации о характеристиках файлов и ключей,

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

        Следующие разделы описывают как хранить определение Btrieve-файла

        в буфере данных. Порядок, в котором должны хранится различные

        спецификации файла и ключей, приведены в таблице. За таблицей

        следуют разделы, описывающие как задавать:

          - Спецификации файла

          - Характеристики ключей

          - Альтернативну последовательность поиска

          _ Длину буфера данных

        Btrieve ожидает, что буфер данных будет отформатирован как

        показано в Таблице 6.1.

                          ¦   Описание            ¦Длина¦

                          +-----------------------+-----+

                          ¦ длина записи          ¦  2  ¦

                          ¦-----------------------¦-----¦

                          ¦ размер страницы       ¦  2  ¦

                          ¦-----------------------¦-----¦

           спецификации   ¦ кол-во индексов       ¦  2  ¦

              файла       ¦-----------------------¦-----¦

                          ¦ не используется       ¦  2  ¦

                          ¦-----------------------¦-----¦

                          ¦ флаги файла           ¦  4  ¦

                          ¦-----------------------¦-----¦

                          ¦ резервное слово       ¦  2  ¦

                          ¦-----------------------¦-----¦

                          ¦ размещение            ¦  2  ¦

                          L-----------------------+------

                          ¦   Описание             Длина¦

                          +-----------------------T-----+

                          ¦ позиция ключа         ¦  2  ¦

                          ¦-----------------------¦-----¦

                          ¦ длина ключа           ¦  2  ¦

           спецификации   ¦-----------------------¦-----¦

             ключей       ¦ флаги ключа           ¦  2  ¦

                          ¦-----------------------¦-----¦

           (повторяются)  ¦ не используется       ¦  4  ¦

                          ¦-----------------------¦-----¦

                          ¦ тип расширенного ключа¦  4  ¦

                          ¦-----------------------¦-----¦

                          ¦ пустое значение       ¦  2  ¦

                          ¦-----------------------¦-----¦

                          ¦ зарезервировано       ¦  2  ¦

                          L-----------------------+------

                                 Таблица 6.1

                   Структура буфера данных для операции Create

        С п е ц и ф и к а ц и и   ф а й л а . Храните спецификации файла

        в первых 16 байтах буфера данных. Байты пронумерованы начиная с 0

        Храните информацию о длине записи, размере страницы и количестве

        индексов как целые. Для создания файла, состоящего только из

        данных, установите число индексов в ноль.

        Вы должны разместить "неиспользуемые" и "зарезервированные"

        области буфера данных, даже если Btrieve не использует их в

        операции Create. Инициализируете зарезервированные области нулем,

        чтобы обеспечить совместимость с будующими версиями Btrieve.

        Установка битов в слове флагов файла задает, допускает ли файл

        записи переменной длины, усечение пробелов или сжатие данных, и

        должен ли Btrieve перераспределять дисковое пространство для

        файла, Используйте два старших бита младшего айта для задания

        границы свободного пространства для страниц переменной длины.

        Биты в слове флагов файла пронумерованы с 0 до 15, начиная с 0

        бита. Установите биты в соответствии со следующим описанием:

          - Если бит 0 = 1, Btrieve позволит файлу содержать записи

            переменной длины.

          - Если бит 1 = 1, Btrieve усечет пробельные концы в записях

            переменной длины.

          - Если бит 2 = 1, Btrieve перераспределит количество страниц,

            заданных Вами в слове распределения.

          - Если бит 3 = 1, Btrieve сожмет данные в файле.

          - Если бит 4 = 1, Btrieve создаст файл, состоящий только из

            ключей.

          - Если бит 6 = 1, Btrieve установит 10% границу свободного

            пространства для страниц записей переменной длины.

          - Если бит 7 = 1, Btrieve установит 20% границу свободного

            пространства для страниц записей переменной длины.

          - Если бит 6 = 1 и бит 7 = 1, Btrieve установит 30% границу

            свободного пространства для страниц записей переменной длины.

        Следующая таблица показывает двоичное и десятичное представление

        значений флагов файла:

            Значения                     Двоичное          Десятичное

            переменная длина             00000001             1

            усечение пробелов            00000010             2

            перераспределение            00000100             4

            сжатие данных                00001000             8

            только ключи                 00010000            16

            10% свободное пространство   01000000            64

            20% свободное пространство   10000000           128

            30% свободное пространство   11000000           192

        Если Вам необходимо задать комбинацию из атрибутов файла.

        добавьте соответствующее значение флага. Например, для задания

        файла, допускающего записи переменной длины и усечение пробелов,

        инициализируйте флаги файла значением 3 (2+1). Btrieve игнорирует

        флаги усечение пробелов и грницы свободного пространства, если

        флаг переменной длины установлен в 0.

        Если Вы устанавливаете бит флага перераспределения, используйте

        слово распределения для хранения целого значения, задающего число

        страниц, которое Вы хотите перераспределить файлу.

        Х а р а к т е р и с т и к и   к л ю ч а . Поместите характеристики

        ключей после блока спецификации файла. Назначьте 16-битовый блок

        спецификации ключа для каждого сегмента ключа в файле. Код типа

        расширенного ключа и пустой символ имеют длину в 1 байт.

        Храните информацию для позиции ключа и длины ключа как целые.

        Установите флаги ключа для задания атрибутов, нужных Вам для

        ключа, в соответствии со следующим описанием:

          - Если бит 0 = 1, ключ допускает дубликаты.

          - Если бит 1 = 1, ключ - модифицируемый.

          - Если бит 2 = 0 и бит 8 = 0, ключ - строковый.

          - Если бит 2 = 1 и бит 8 = 0, ключ - двоичный.

          - Если бит 3 = 1, ключ имеет пустое значение.

          - Если бит 4 = 1, ключ имеет другой сегмент.

          - Если бит 5 = 1, ключ отсортирован с помощью последовательности

            альтернативного поиска.

          - Если бит 6 = 1, ключ отсортирован в убывающем порядке.

          - Бит 7 игнорируется для операции Create.

          - Если бит 8 = 0, ключ - стандартного типа.

          - Если бит 8 = 1, ключ - расширенного типа,

          - Если бит 9 = 1, ключ - ручной.

        Хотя Btrieve игнорирует бит 7 для операции Create, Вы должны

        инициализировать его значением 0 при создании файла. Когда Вы

        объявите операцию Stat (15), Btrieve установит бит 7 в 1, если

        ключ имеет дополнительный индекс и возвратит флаги ключа в

        буфер данных.

        Следующая таблица показывает двоичные, шестнадцетиричные и

        десятичные значения флагов ключа:

          Атрибут             Двоичное   Шестнадцатиричное   Десятичное

          двойной             00000001            01              1

          модифицируемый      00000010            02              2

          двоичный            00000100            04              4

          пустой              00001000            08              8

          сегментированный    00010000            10             16

          альт.посл.поиска    00100000            20             32

          убывающий           01000000            40             64

          дополнительный      10000000            80            128

          расширенного типа 1 00000000           100            256

          ручной           10 00000000           200            512

        Присваивайте одни и те же атрибуты двойной, модифицируемый и

        пустой для всех сегментов одного и того же ключа. Если Вы задаете

        пустой атрибут для ключа, Вы должны присвоить различные пустые

        характеристики для отдельных сегментов.

        Атрибут сегментированного ключа - флаг, показывающий что блок

        следующего ключа в буфере данных ссылается на следующий сегмент

        этого же ключа. Кроме того, Вы можете сделать каждый сегмент

        ключа или возрастающим или убывающим и задать любой тип данных.

        Например, для создания файла с двумя ключами, первый из которых

        состоит из двух сегментов, а второй - из одного сегмента,

        используйте бит 4 флагов ключа следующим образом:

          - В первом блоке ключей установите бит 4 слова флагов ключа

            в 1, показывающую что за этим ключом следует определение

            другого ключевого сегмента.

          - Во втором блоке ключей установите бит 4 слова флагов ключа

            в 0, показывающий что этот блок ключей определяет последний

            сегмент первого ключа.

          - В третьем блоке ключей установите бит 4 слова флагов ключа

            в 0, показывающую что второй ключ имеет только один сегмент.

        Задайте тип расширенного ключа как двоичное значение в байте 10

        блока спецификации ключей. Значения типов расширенных ключей

        показаны ниже:

                        Тип                              Значение

                 string (строка)                            0

                 integer (целое)                            1

                 float (с плавающей запятой)                2

                 date (дата)                                3

                 time (время)                               4

                 decimal (десятичное)                       5

                 money (деньги)                             6

                 logical (логическое)                       7

                 numeric (числовое)                         8

                 bfloat                                     9

                 lstring (l-строка)                        10

                 zstring (z-строка)                        11

                 unsigned binary (двоичное без знака)      14

                 autoincrement (автоинкремент)             15

        Как и в случае флагов файла Вы можете задать комбинации

        атрибутов ключей складывая соответствующие им значения флагов.

        Например, если ключ - расширенного типа, часть сегментированного

        ключа и должен быть отсортирован в убывающем порядке, Вы должны

        будете хранить 150H (336 десятичное) в слове флагов.

             --------------------------------------------------------

             Примечание:

             Вы можете определить типы расширенного ключа "строка" и

             "двоичное без знака" как стандартные типы так и как

             расширенные типы. Это обеспечивает совместимость с

             прикладными программами, написанными для ранних версий

             Btrieve, в то время как в новых прикладных программах

             допустимо использовать исключительно типы расширенных

             ключей.

             --------------------------------------------------------

        А л ь т е р н а т и в н а я  п о с л е д о в а т е л ь н о с т ь

        п о и с к а . Вы можете задать альтернативную последовательность

        поиска для сортировки по любому числу ключевых сегментов файла.

        Однако, Вы можете задать только ОДНУ альтернативную

        последовательность поиска для всего файла. Вы можете задать, что

        некоторые сегменты одного ключа  должны быть отсортированы в

        стандартной ASCII последовательности поиска, а другие сегменты

        должны быть отсортированы в альтернативной последовательности.

        Вы можете задать альтернативную последовательность поиска для

        ключа типа "l-строка", " z-строка" и "строка". Если Вы

        устанавливаете флаг альтернативной последовательности поиска для

        всех ключей или сегментов ключа в файле, поместите определение

        последовательности поиска непосредственно за последним блоком

        спецификации ключей.

        Т.е. актуальная последовательность поиска сама должна следовать

        за блоком спецификации ключей вместо имени файла, содержащего

        эту последовательность. Определение альтернативной

        последовательности поиска состоит из девяти байтов заголовка, за

        которыми следуют 256 символов, как это описано в разделе

        "Альтернативная последовательность поиска" в Главе 4.

             --------------------------------------------------------

             Примечание:

             Если Вы создаете множество файлов с различными

             альтернативными последовательностями поиска, используйте

             разные имена для каждой последовательности.

             --------------------------------------------------------

        Д л и н а   б у ф е р а   д а н н ы х. Длина буфера данных должна

        быть достаточной для включения спецификаций файла, характеристик

        ключей и альтернативной последовательности поиска, если она

        задана. НЕ задавайте длину записи файла в этом параметре.

        Например, для создания файла с двумя ключами, каждый из которых

        имеет по одному сегменту, и с альтернативной последовательностью

        поиска, буфер данных для операции Create должен иметь длину по

        крайней мере 313 байтов, как показано ниже:

                Спец.     Спец.       Спец.       Альт.

                файла  +  ключа 1  +  ключа 2  +  П-ть

                ________________________________________

                 16    +   16      +    16     +   265     =  313

        Н о м е р   к л ю ч а .  Вы можете использовать параметр номера

        ключа для того, чтобы задать хотите ли Вы, чтобы Btrieve

        предупредил Вас о существовании файла с тем же именем. Задайте

        значение номера ключа следующим образом:

          - ЕСЛИ ВЫ НЕ ХОТИТЕ, ЧТОБЫ BTRIEVE СОЗДАВАЛ НОВЫЙ ФАЙЛ ВМЕСТО

            СУЩЕСТВУЮЩЕГО, установите параметр номера ключа в -1. Если

            файл с тем же самым именем уже существует, Btrieve вернет

            ненулевой статус и не будет создавать новый файл.

          - ЕСЛИ ВЫ ХОТИТЕ, ЧТОБЫ BTRIEVE СОЗДАВАЛ НОВЫЙ ФАЙЛ ВМЕСТО

            СУЩЕСТВУЮЩЕГО, ИЛИ ЕСЛИ ВЫ НЕ ХОТИТЕ ПРОВЕРЯТЬ НАЛИЧИЕ

            СУЩЕСТВОВАНИЯ ФАЙЛА, установите параметр номера ключа в

            ненулевое значение, предпочтительно в 0.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        Если Вы создаете пустой Btrieve-файл вместо ранее

        существовавшего Btrieve-файла, будьте уверены, что файл закрыт

        перед выполнением операции Create.

        П р о ц е д у р а  :

        Для выполнения операции Create установите следующие Btrieve-

        параметры:

          - Установите код операции в 14.

          - Задайте спецификации файла, характеристики ключей и все

            альтернативные последовательности поиска в буфере данных.

            Все значения для спецификации файла и характеристики ключей,

            хранимые в буфере данных, должны быть в двоичном формате.

          - Задайте длину буфера данных.

          - Установите параметр номера ключа в -1, если Вы хотите, чтобы

            Btrieve предупредил Вас о существовании файла с тем же самым

            именем. Иначе, установите параметр номера ключа в 0.

          - Задайте имя файла в буфере ключа. Удостовертесь, что имя

            файла завершается пробелом или двоичным нулем. Вы можете

            задать имя устройства и путь для файла, включая любое число

            уровней директорий.

        Р е з у л ь т а т  :

        Если операция завершилась успешно Btrieve предупредит Вас о

        существовании файла с тем же самым именем или создаст новый файл

        согласно Вашим спецификациям. Новый файл не будет содержать

        записей. Операция Create не открывает файл. Ваша прикладная

        программа должна выполнить операцию Open до того, как файл станет

        доступен.

        Если операция завершилась безуспешно, Btrieve вернет ненулевой

        код статуса, информирующий о причине. Наиболее часто встречающие

        ненулевые коды:

          -  2 Ошибка ввода/вывода файла

          - 22 Буфер данных слишком мал

          - 24 Ошибка размера страницы

          - 25 Ошибка ввода/вывода при создании

          - 26 Число ключей

          - 27 Неверная позиция ключа

          - 28 Неверная длина записи

          - 29 Неверная длина ключа

          - 48 Неверное определение альтернативной последовательности

          - 49 Ошибка типа ключа

          - 59 Файл уже существует

        См. в Приложении B объяснение кодов статуса.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Create не устанавливает какую-либо позиционную

        информацию.

        CREATE SUPPLEMENTAL INDEX

        (Создание дополнительного индекса)

        Н а з н а ч е н и е  :

        Операция Create Supplemental Index добавляет дополнительный

        индекс в файл.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦     x      ¦  x   ¦     ¦

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Применяйте операцию Create Supplemental Index для добавления

        индекса в файл в любое время после того, как ббыл создан файл.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию

        Create Supplemental Index, должны быть выполнены следующие

        предварительные условия:

          - Btrieve-файл должен быть открыт.

          - Количество существующих сегментов ключа в файле должно быть

            меньше или равно следующей формуле:

              24 - (число сегментов, которые надо добавить)

          - Флаги ключей, позиция и длина нового индекса должны

            соответствовать файлу, в который Вы добавляете индекс.

          - Не должно быть активных транзакций.

        П р о ц е д у р а  :

        Для создания дополнительного индекса установите следующие

        Btrieve-параметры:

          - Установите код операции в 31.

          - Пошлите Btrieve блок позиции для файла, в который Вы хотите

            добавить индекс.

          - Сохраните спецификации ключа для нового индекса в буфере

            данных. Буфер данных состоит из 16-байтового блока

            спецификации ключа для каждого сегмента создаваемого Вами

            дополнительного индекса. Используйте ту же самую структуру

            как в блоке спецификации ключа, используемом в  операции

            Create (14).

          - Установите параметр длины буфера данных равным количеству

            байтов в буфере данных. Для нового индекса без альтернативной

            последовательности поиска используйте следующую формулу для

            определения правильной длины буфера данных:

               16 *  (число сегментов)

            Если новый ключ имеет альтернативную последовательность

            поиска, используйте следующую формулу для определения

            правильной длины буфера данных:

               16 *   (число сегментов) + 265

        Р е з у л ь т а т  :

        Btrieve немедленно начнет добавлять новый индекс в файл. Время,

        требуемое для этой операции, зависит от общего числа записей,

        которые будут индексированы, размера файла и длины нового индекса.

        Номер ключа нового индекса на единицу больше, чем номер

        предыдущего самого старшего ключа. Вы можете использовать новый

        индекс для доступа к Вашим данным сразу по завершении операции.

        Если Btrieve не может создать дополнительный индекс по какой-либо

        причине, он вернет ненулевой статус показывающий причину и

        отбросит часть дополнительного индекса, которая уже построена.

        Страницы файла, размещенные в дополнительном индексе до ошибки

        будут помещены в список свободного пространства файла и будут

        повторно использованы, когда Вы добавляете записи или создаете

        другой дополнительный индекс.

        Наиболее часто встречающие ошибки:

          - 22 Буфер данных слишком мал

          - 27 Неверная позиция ключа

          - 28 Неверная длина записи

          - 41 Недопустимая операция

          - 45 Несуществующие флаги ключа

          - 49 Ошибка типа ключа

          - 56 Незавершенный индекс

        Если во время создания дополнительного индекса отключится питание

        или система перезагрузится, Вы сможете получить доступ к данным

        файла через другие индексы файла. Однако, Btrieve вернет

        ненулевой статус, если Вы попытаетесь получить доступ к данных

        через незавершенный индекс. В этом случае отбросьте незавершенный

        индекс с помощью операции Drop Supplemental Index (32) и

        запросите операцию Create Supplemental Index.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Create Supplemental Index не оказывает эффекта на

        позиционирование.

        DELETE (4)

        (Удалить)

        Н а з н а ч е н и е  :

        Delete удаляет существующую запись из Btrieve-файла.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦  x   ¦     ¦  x

        Возвращаемые        ¦    x    ¦            ¦  x   ¦     ¦

        О п и с а н и е  :

        Вы можете удалить существующую запись из файла, используя

        операцию Delete. После удаления пространство в файле, где

        хранилась удаленная запись, помещается в список свободного

        пространства.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию Delete

        должны быть выполнены следующие предварительные условия:

          - Файл данных должен быть открыт.

          - Вы не должны обращаться к файлу, содержащему запись для

            удаления, между поиском этой записи и ее удалением.

        П р о ц е д у р а  :

        Для выполнения операции Delete установите следующие Btrieve-

        параметры:

          - Задайте код операции равный 4.

          - Передайте Btrieve блок позиции файла, из которого должна

            быть удалена запись.

          - Проинициализируйте параметр длины буфера данных величиной,

            равной длине удаляемой записи.

          - Сохраните номер ключа, используемый для поиска записи, в

            параметре номера ключа.

        Р е з у л ь т а т  :

        Если операция Delete завершилась успешно, Btrieve:

          - Полностью удалит запись из файла;

          - Обновит все индексы ключей, чтобы отразить удаление;

          - Установит длину буфера данных равной длине удаленной записи.

        Если невозможно успешно удалить запись, Btrieve возвратит

        ненулевой код статуса.

        Наиболее часто встречающие ошибки:

          - 7 Другой номер ключа

          - 8 Неверное позиционирование

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        После операции Delete Btrieve удаляет всю существующую

        позиционную информацию и устанавливает позицию в файле

        следующим образом:

          - Если существует дубликат, СЛЕДУЮЩЕЙ записью становится

            первый дубликат, следующий за удаленной записью. Иначе,

            следующей записью становится первая запись со значением

            ключа большим, чем значение ключа удаленной записи.

          - Если существует дубликат, ПРЕДЫДУЩЕЙ записью становится

            предыдущий дубликат с этим значением ключа. Иначе,

            предыдующей записью становится последняя запись данных для

            предыдущего значения ключа.

        DROP SUPPLEMENTAL INDEX (32)

        (Отбросить дополнительный индекс)

        Н а з н а ч е н и е  :

        Операция Drop Supplemental Index удаляет дополнительный индекс

        из существующего Btrieve-файла.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦      ¦     ¦  x

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Используйте операцию Drop Supplemental Index для удаления

        дополнительного индекса из файла.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию

        Drop Supplemental Index, должны быть выполнены следующие

        предварительные условия:

          - Файл должен быть открыт.

          - Дополнительный индекс должен существовать в файле.

          - Не должно быть активных транзакций

        П р о ц е д у р а  :

        Для отбрасывания дополнительного индекса установите следующие

        Btrieve-параметры:

          - Установите код операции равный 32.

          - Передайте блок позиции Btrieve-файла

          - Сохраните номер ключа для дополнительного индекса, который

            Вы хотите отбросить, в параметре номера ключа.

        Р е з у л ь т а т  :

        Если операция Drop Supplemental Index завершилась успешно,

        Btrieve:

          - Поместит страницы файла, размещенные для этого индекса, в

            список свободного пространства для дальнейшего использования;

          - Декриментируйте (уменьшите на один) номера ключей всех

            других дополнительных индексов с номерами ключей старшими,

            чем отбрасываемый индекс.

        Если операция не была успешной, Btrieve возвратит ненулевой код

        статуса в Вашу прикладную программу. Наиболее часто встречающиеся

        ненулевые коды статуса для этой операции:

          -  6 Неверный номер ключа

          - 41 Недопустимая операция

        Если процесс прерван во время отбрасывания индекса. Вы можете

        получить доступ к данным файла через другие индексы файла.

        Btrieve возвратит код статуса 56 (Незавершенный индекс), если Вы

        попытаетесь получить доступ к файлу через незавершенный индекс. В

        этом случае запросите вновь операцию Drop Supplemental Index.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Drop Supplemental Index не оказывает эффект на

        позиционирование.

        END TRANSACTION (20)

        (Конец транзакции)

        Н а з н а ч е н и е  :

        End Transaction завершает транзакцию и делает соответствующие

        изменения в файлах данных.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦         ¦            ¦      ¦     ¦

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

        О п и с а н и е  :

        End Transaction отмечает завершение набора логически связанных

        Btrieve-операций.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию

        End Transaction, она должна выполнить успешно операцию Begin

        Transaction (19).

        П р о ц е д у р а  :

        Для выполнения операции End Transaction установите код операции

        равный 20. Btrieve проигнорирует все другие параметры вызова

        End Transaction.

        Р е з у л ь т а т  :

        Если операция End Transaction завершилась успешно, все операции

        ограниченные этой транзакцией будут записаны в Вашу базу данных.

        Ваша прикладная программа не может отменить транзакцию после

        операции End Transaction.

        Если операция не была успешной, Btrieve возвратит ненулевой

        статус. Наиболее часто встречающийся ненулевой код статуса - код

        38 (Ошибка управления транзакциями файла), которая появляется,

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

        записан по какой-либо причине.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция End Transaction не оказывает эффект на позиционирование.

        EXTEND (16)

        (Расширить)

        Н а з н а ч е н и е  :

        Extend разделяет файл на два логических устройства.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦      ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Операция Extend позволяет Вашей прикладной программе

        распространять один Btrieve-файл на второе логическое устройство.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию Extend,

        должны быть выполнены следующие предварительные условия:

          - Файл должен быть открыт.

          - Btrieve должен иметь доступ к тому, на который будет расширен

            файл.

          - Не должно быть активных транзакций.

        П р о ц е д у р а  :

        Для выполнения операции Extend установите следующие Btrueve-

        параметры:

          - Установите код операции равный 16.

          - Передайте блок позиции для расширяемого файла.

          - Сохраните имя расширяемого файла в буфере ключа. Задайте

            имя устройства и имя полного пути файла. Завершайте имя

            расширяемого файла пробелом или двоичным нулем.

          - Задайте значение -1 в параметре номера ключа при выполнении

            операции Extend, если Вы хотите, чтобы Btrieve начал

            немедленно хранить данные в расширяемом файле. Обычно Btrieve

            не помещает данные в расширяемый файл до того, как устройство

            содержащее первоначальный файл не заполнится.

        Р е з у л ь т а т  :

        Если операция Extend завершилась успешно, Btrieve распространит

        файл на два логических тома. Для получения доступа к расширенному

        файлу пользуйтесь следующим руководством:

          - Немедленно после расширения файла ваша прикладная задача

            должна закрыть и открыть вновь файл до того, как она получит

            доступ к расширению.

          - Как первоначальное устройство так и устройство расширения

            должны бвть в "online", когда Ваша программа получает доступ

            к расширенному файлу. Btrieve должен быть способен найти

            расширенный файл на заданном Вами логическом устройстве.

          - После того, как Вы создали расширенный файл, Вы не можете

            перемещать его на другое устройство. Когда Вы расширяете файл

            Btrieve пишет имя полного пути, заданного для этого

            расштрения в адрес первоначального файла данных. Поэтому

            каждая рабочая станция должна использовать одно и то же

            определение устройства для ссылки на устройство, содержащее

            расширяемый файл.

        Если операция не была успешной, Btrieve возвратит ненулевой

        статус. Наиболее часто встречающиеся ошибки, возвращаемые

        операцией Extend:

          - 31 Файл уже расширен

          - 32 Ошиббка ввода/выода при расширении

          - 34 Невернре имя расширения

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Extend не оказывает эффект на позиционирование.

        GET DIRECT (23)

        (Получить направление)

        Н а з н а ч е н и е  :

        Get Direct ищет запись данных, расположенную по заданному

        физическому адресу в Btrieve-файле.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦      x     ¦   x  ¦     ¦  x

        Возвращаемые        ¦    x    ¦      x     ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Операция Get Direct позволяет Вашей прикладной программе

        искать запись, используя ее физическое расположение в файле

        вместо использования одного из заданных индексных путей.

        Вы можете использовать Get Direct следующим образом:

          - Вы можете искать запись быстрее, используя физическое

            расположение вместо значения ключа.

          - Вы можете использовать операцию Get Direct для поиска

            4-байтового расположения записи, сохранить расположение и

            затем позже использовать Get Direct для возврата

            непосредственно в это место.

          - Вы можете использовать 4-байтовое расположение для поиска

            записи в цепочке дубликатов без повторного чтения всех

            записей с начала цепочки.

          - Вы можете изменить текущий путь доступа. Операция

            Get Position, следуемая за операцией Get Direct с другим

            номером ключа, устанавливает позиционирование для текущей

            записи в другом индексном дереве. Get Next возвратит

            следующую запись в файле, опираясь на новый путь доступа.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию

        Get Direct, должны быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Ваша прикладная программа должна предварительно найти

            4-байтовое расположение записи, запросив операцию

            Get Position.

        П р о ц е д у р а  :

        Для выполнения операции Get Direct установите следующие Btrueve-

        параметры:

          - Установите код операции равный 23.

          - Сохраните 4-байтовую позицию требуемой записи в первых

            четырех байтах буфера данных.

          - Задайте общую длину буфера данных таким образом, чтобы

            Btrieve мог определить, войдет ли запись в Ваш буфер.

          - Задайте путь доступа, для которого должен установить

            позиционирование Btrieve, в параметре номера ключа.

        Р е з у л ь т а т  :

        Если операция Get Direct завершилась успешно, Btrieve

          - Сохранит требуемую запись в буфере данных, переписав

            4-байтовую точку входа в первых четырех байтах.

          - Сохранит актуальную длину записи в параметре длины буфера

            данных;

          - Сохраните значение ключа для заданного ключа доступа в

            буфере ключа.

        Если Btrieve не может возвратить требуемую запись, он вернет

        ненулевой статус. Наиболее часто встречающиеся ненулевые коды

        статуса:

          - 22 Буфер данных слишком мал

          - 43 Неверный адрес записи данных

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        После операции Get Direct Btrieve удаляет всю существующую

        позиционную информацию и устанавливает текущую позицию согласно

        заданному номеру ключа.

          - СЛЕДУЮЩАЯ запись становится следующим дубликатом

            возвращаемого значения ключа. Иначе, она становится первой

            записью для значения ключа большего, чем требуемое.

          - ПРЕДЫДУЩАЯ запись становится или предыдущим дубликатом для

            возвращаемого ключа или последним дубликатом значения ключа

            меньшего, чем возвращаемое.

        GET DIRECTORY (18)

        (Получить директорию)

        Н а з н а ч е н и е  :

        Get Directory ищет текущую директорию.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦         ¦            ¦      ¦     ¦  x

        Возвращаемые        ¦         ¦            ¦      ¦  x  ¦

        О п и с а н и е  :

        Операция Get Directory возвращает текущую директорию для

        заданного логического устройства.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа сможет запрсить операцию

        Get Directory непосредственно после загрузки Record Manager.

        Буфер ключа должен быть по крайней мере длиной в 65 символов.

        П р о ц е д у р а  :

        Для поиска текущей директории установите следующие Btrueve-

        параметры:

          - Установите код операции равный 18.

          - Сохраните номер логического устройства в параметре номера

            ключа до вызова Btrieve. Задайте устройство A как 1, 2 для B

            и т.д. Для использования устройства по умолчанию задайте 0.

        Р е з у л ь т а т  :

        Btrieve возвратит текущую директорию, завершенную двоичным нулем

        в буфере ключа.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Get Directory  не оказывает эффект на позиционирование.

        GET EQUAL (5)

        (Получить равную)

        Н а з н а ч е н и е  :

        Get Equal ищет запись, соответствующую заданному значению ключа.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦     ¦

        О п и с а н и е  :

        Используя операцию Get Equal, Ваша прикладная программа может

        искать запись, опираясь на значение ключа заданное в буфере

        ключа.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа сможет запрсить операцию

        Get Equal должны быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Файл не может быть файлом, состоящим только из данных без

            определенных индексов.

        П р о ц е д у р а  :

        Для выполнения операции установите следующие Btrueve-параметры:

          - Проинициализируйте код операции значением 5.

          - Передайте блок позиции для файла.

          - Задайте требуемое значение ключа в буфере ключа.

          - Установите номер ключа в правильный путь доступа.

          - Проинициализируйте длину буфера данных значением равным длине

            записи, которую Вы хотите найти.

        Р е з у л ь т а т  :

        Если операция Get Equal завершилась успешно, Btrieve

          - Вернет требуемую запись в буфер данных.

          - Вернет длину записи в байтах в параметр длины буфера данных.

        Если операция Get Equal не была успешной,Btrieve вернет ненулевой

        код статуса указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  4 Не найдено значение ключа

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        После операции Get Equal Btrieve удаляет всю существующую

        позиционную информацию и устанавливает свою позицию в индексе

        следующим образом:

          - Если дубликат существует, СЛЕДУЮЩАЯ запись становится первым

            дубликатом возвращаемого значения ключа. Иначе, следующая

            запись становится первой записью для значения ключа большего,

            чем требуемое.

          - ПРЕДЫДУЩАЯ запись становится последним дубликатом значения

            ключа меньшего, чем возвращаемое. Если не существует

            дубликатов, предыдущая запись становится единственной записью

            для значения ключа меньшего, чем возвращаемое.

        GET FIRST (12)

        (Получить первую)

        Н а з н а ч е н и е  :

        Get First ищет запись, соответствующую первому значению ключа для

        заданного пути доступа.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦     ¦  x

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Операция Get First позволяет Вашей прикладной программе искать

        запись, соответствующую первому значению ключа для заданного

        номера ключа.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа сможет запрсить операцию

        Get First должны быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Файл не может быть файлом, состоящим только из данных без

            определенных индексов.

        П р о ц е д у р а  :

        Для выполнения операции установите следующие Btrueve-параметры:

          - Проинициализируйте код операции значением 12.

          - Передайте блок позиции для файла.

          - Задайте номер ключа для данного пути доступа.

          - Задайте длину буфера данных.

        Р е з у л ь т а т  :

        Если операция Get First завершилась успешно, Btrieve

          - Вернет требуемую запись в буфер данных.

          - Сохранит соответствующее значение ключа в буфере данных;

          - Вернет длину записи в параметр длины буфера данных.

        Если операция Get First не была успешной, Btrieve вернет

        ненулевой код статуса указывающий на причину. Наиболее часто

        встречающиеся ненулевые коды статуса:

          -  3 Файл не открыт

          -  6 Неверный номер ключа

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        После операции Get First Btrieve удаляет всю существующую

        позиционную информацию и устанавливает свою позицию в индексе

        следующим образом:

          - ПРЕДЫДУЩАЯ запись указывает за начало файла.

          - СЛЕДУЮЩАЯ запись становится следующим дубликатом

            возвращаемого значения ключа или, если не существует

            дубликатов, первой записью для значения ключа большего, чем

            возвращаемое.

        GET GREATER (8)

        (Получить большую)

        Н а з н а ч е н и е  :

        Get Greater ищет запись, соответствующую значению ключа большего

        чем заданное значение ключа.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Используя операцию Get Greater Ваша прикладная программа может

        поднять путь доступа, задавая номер ключа для нахождения первого

        значения ключа большего, чем задано в буфере ключа.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию

        Get Greater, должны быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Файл не может быть файлом, состоящим только из данных.

        П р о ц е д у р а  :

        Для выполнения операции Get Greater установите следующие

        Btrieve-параметры:

          - Установите код операции равный 8.

          - Передайте блок позиции для файла.

          - Сохраните значение ключа в параметре буфера ключа.

          - Установите параметр номера ключа в соответствии с правильным

            путем доступа.

          - Задайте длину буфера данных.

Р е з у л ь т а т :

Если операция завершилась успешно, Btrieve

* Вернет соответствующую запись в буфер данных.

* Вернет длину записи в параметр длины буфера данных.

        Если операция не была успешной, Btrieve вернет ненулевой код

        статуса, указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  6 Неверный номер ключа

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        После операции Get Greater Btrieve удаляет всю существующую

        позиционную информацию и устанавливает свою позицию в индексе

        следующим образом:

          - Если дубликат существует, СЛЕДУЮЩАЯ запись становится

            первым дубликатом возвращаемого значения. Иначе, следующая

            запись становится первой записью для значения ключа большего,

            чем возвращаемое.

* ПРЕДЫДУЩАЯ запись становится последним дубликатом значения ключа меньшего возвращаемого. Иначе, предыдущая запись становится единственной записью для значения ключа меньшего, чем возвращаемое.

        GET GREATER OR EQUAL (9)

        (Получить большую или равную)

        Н а з н а ч е н и е  :

        Get Greater Or Equal ищет запись со значением ключа большим или

        равным заданному значению ключа.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Операция Get Greater Or Equal позволяет Вашей прикладной

        программе находить запись или равную или большую чем заданное

        значение ключа. Btrieve сперва ищет значение ключа равное

        заданному значению. Если Btrieve не может найти равное значение

        ключа, он поднимает путь доступа до тех пор. пока он не найдет

        запись со следующим старшим значением ключа.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию

        Get Greater Or Equal, должны быть выполнены следующие

        предварительные условия:

          - Файл должен быть открыт.

          - Файл не может быть файлом, состоящим только из данных.

        П р о ц е д у р а  :

        Для выполнения операции Get Greater Or Equal установите следующие

        Btrieve-параметры:

          - Установите код операции равный 9.

          - Передайте блок позиции для файла.

          - Сохраните значение ключа в параметре буфера ключа.

          - Установите параметр номера ключа в соответствии с правильным

            путем доступа.

          - Задайте длину буфера данных.

        Р е з у л ь т а т  :

        Если операция завершилась успешно, Btrieve

          - Вернет соответствующую запись в буфер данных.

          - Вернет длину записи в параметр длины буфера данных.

        Если операция не была успешной, Btrieve вернет ненулевой код

        статуса, указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  6 Неверный номер ключа

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        После операции Get Greater Or Equal Btrieve удаляет всю

        существующую позиционную информацию и устанавливает текущую

        позицию следующим образом:

          - СЛЕДУЮЩАЯ запись становится первым дубликатом возвращаемого

            значения ключа, если дубликат существует. Иначе, он

            становится первой записью для значения ключа большего,

            чем возвращаемое.

          - ПРЕДЫДУЩАЯ запись становится последним дубликатом значения

            ключа меньшего возвращаемого, или, если дубликат не

            существует, единственной записью для значения ключа меньшего,

            чем возвращаемое.

        GET KEY (+50)

        (Получить ключ)

        Н а з н а ч е н и е  :

        Get Key позволяет Вам выполнять операцию Get без действительного

        поиска записи даных. Вы можете использовать Get Key для

        определения наличия значения в файле. Операция Get Key как правило

        быстрее, чем соответствующая Get операция. Операция Get Key

        может быть использована с любой из следующих Get операций:

          - GET EQUAL (5)

          - GET NEXT (6)

          - GET PREVIOUS (7)

          - GET GREATER (8)

          - GET GREATER OR EQUAL (9)

          - GET LESS THAN (10)

          - GET LESS THAN OR EQUAL (11)

          - GET FIRST (12)

          - GET LAST (13)

        П р и м е н е н и е   п а р а м е т р о в  :

        Параметры - те же самые как и в соответствующей Get операции, за

        исключением того, что Btrieve игнорирует длину буфера данных и

        не возвращает запись в буфер данных.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        Предварительные условия для операции Get Key - те же самые, что

        и в соответствующей Get операции.

        П р о ц е д у р а  :

        Для выполнения операции Get Key установите Btrieve-параметры так

        как бы Вы установили их для соответствующей Get операции. Вам не

        требуется инициализировать длину буфера данных.

        Вы должны добавить 50 к коду операции Get, которую Вы хотите

        выполнить. Например, для выполнения операции Get Key (код

        операции 50) с операцией Get Equal (код операции 5) используйте

        55 для кода операции.

        Если Btrieve найдет требуемый ключ, он возвратит ключ в буфер

        ключа и статус равный 0. Иначе, Btrieve возвратит ненулевой код

        статуса, показывающий почему он не может найти ключ.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Get Key устанавливает текущее позиционирование точно в

        соответствии с тем, что делает соответствующая Get операция, за

        исключением того, что Get Next Key и Get Previous Key не

        возвращает дубликаты.

        GET LAST (13)

        (Получить последнюю)

        Н а з н а ч е н и е  :

        Get Last ищет запись, сооответствующую значению последнего ключа

        для заданного пути доступа.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦     ¦  x

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Используя операцию Get Last Ваша прикладная программа может

        находить последнюю запись, которая соответствует последнему

        значению ключа для заданного номера ключа. Если дубликаты

        существуют для последнего значения ключа, возвращаемая запись

        будет последним дубликатом.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию

        Get Last, должны быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Файл не может быть файлом, состоящим только из данных без

            заданных индексов.

        П р о ц е д у р а  :

        Для выполнения этой операции установите следующие Btrieve-

        параметры:

          - Проинициализируйте код операции значением 13.

          - Передайте блок позиции для файла.

          - Задайте длину буфера данных.

          - Задайте номер ключа для пути доступа.

Р е з у л ь т а т :

Если операция завершилась успешно, Btrieve

* Вернет требуемую запись в буфер данных.

* Сохранит значение соответствующего ключа в буфере ключа;

* Возвратит длину записи в параметре длины буфера данных.

        Если Btrieve не может вернуть запись, он возвратит ненулевой код

        статуса, указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  6 Неверный номер ключа

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        После операции Get Last Btrieve удаляет всю существующую

        позиционную информацию и устанавливает текущую позицию в индексе

        следующим образом:

          - СЛЕДУЮЩАЯ запись указывает за конец файла.

          - ПРЕДЫДУЩАЯ запись становится предыдущим дубликатом

            возвращаемого значения ключа или, если дубликат не

            существует, последним дубликатом для значения ключа меньшего,

            чем возвращаемое.

        GET LESS THAN (10)

        (Получить меньшую чем)

        Н а з н а ч е н и е  :

        Get Less Than ищет запись, сооответствующую значению ключа,

        которое сеньше заданного значения ключа.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Используя операцию Get Less Than Ваша прикладная программа может

        находить запись, которая соответствует первому значению ключа

        меньшему чем заданное значение ключа. Btrieve поднимает путь

        доступа, заданный номером ключа для нахождения первого значения

        ключа меньшего требуемого. Как только он найдет правильное

        значение ключа, он возвратит соответствующую запись данных в

        буфер данных.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию

        Get Less Tnan, должны быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Файл не может быть файлом, состоящим только из данных без

            заданных индексов.

        П р о ц е д у р а  :

        Для выполнения операции Get Less Than установите следующие

        Btrieve-параметры:

          - Установите код операции в 10.

          - Передайте блок позиции для файла.

          - Сохраните значение ключа в параметре буфера ключа.

          - Установите параметр номера ключа в соответствии с правильным

            путем доступа.

          - Задайте длину буфера данных.

        Р е з у л ь т а т  :

        Если операция завершилась успешно, Btrieve

          - Вернет запись в буфер данных.

          - Вернет значение ключа для этой записи в буфер ключа;

          - Возвратит длину записи в параметре длины буфера данных.

        Если Btrieve не может вернуть запись, он возвратит ненулевой код

        статуса, указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  6 Неверный номер ключа

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        После операции Get Less Than Btrieve удаляет всю существующую

        позиционную информацию и устанавливает текущую позицию в индексе

        следующим образом:

          - Если дубликат существует, СЛЕДУЮЩАЯ запись становится

            первым дубликатом возвращаемого значения. Иначе, следующая

            запись становится первой записью для значения ключа большего,

            чем возвращаемое.

          - Если дубликат существует, ПРЕДЫДУЩАЯ запись становится

            последним дубликатом значения ключа меньшего возвращаемого.

            Иначе, предыдущая запись становится единственной записью для

            значения ключа меньшего, чем возвращаемое.

        GET LESS THAN OR EQUAL (11)

        (Получить меньшую или равную)

        Н а з н а ч е н и е  :

        Get Less Than Or Equal ищет запись со значением ключа меньшим или

        равным заданному значению ключа.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Используя операцию Get Less Than Or Equal Ваша прикладная

        программа может находить запись, которая равна или меньше

        заданному значению ключа. Btrieve сперва ищет в пути доступа для

        заданного значения ключа. Если он не находит значение, то

        поднимает путь доступа, заданный номером ключа для нахождения

        первого значения ключа меньшего требуемого. Как только он найдет

        правильное значение ключа, он возвратит соответствующую запись

        данных в буфер данных.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию

        Get Less Tnan Or Equal, должны быть выполнены следующие

        предварительные условия:

          - Файл должен быть открыт.

          - Файл не может быть файлом, состоящим только из данных без

            заданных индексов.

        П р о ц е д у р а  :

        Для выполнения операции Get Less Than Or Equal установите

        следующие Btrieve-параметры:

          - Установите код операции в 11.

          - Передайте блок позиции для файла.

          - Сохраните значение ключа в параметре буфера ключа.

          - Установите параметр номера ключа в соответствии с правильным

            путем доступа.

          - Задайте длину буфера данных.

        Р е з у л ь т а т  :

        Если операция завершилась успешно, Btrieve

          - Вернет запись в буфер данных.

          - Вернет значение ключа для этой записи в буфер ключа;

          - Возвратит длину записи в параметре длины буфера данных.

        Если Btrieve не может вернуть запись, он возвратит ненулевой код

        статуса, указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  6 Неверный номер ключа

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        После операции Get Less Than Or Equal Btrieve удаляет всю

        существующую позиционную информацию и устанавливает текущую

        позицию в индексе следующим образом:

          - Если дубликат существует, СЛЕДУЮЩАЯ запись становится

            первым дубликатом возвращаемого значения. Иначе, следующая

            запись становится первой записью для значения ключа большего,

            чем возвращаемое.

          - Если дубликат существует, ПРЕДЫДУЩАЯ запись становится

            последним дубликатом значения ключа меньшего возвращаемого.

            Иначе, предыдущая запись становится единственной записью для

            значения ключа меньшего, чем возвращаемое.

        GET NEXT (6)

        (Получить следующую)

        Н а з н а ч е н и е  :

        Get Next ищет запись из Btrieve-файла, следующую за текущей

        записью в пути ключей.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Используя операцию Get Next Ваша прикладная программа может

        находить записи в порядке согласно заданному пути доступа. Только

        операции Get First, Get Next, Get Previous и Get Last позволяют

        прикладной программе искать записи для значений ключей-дубликатов

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию

        Get Next, должны быть выполнены следующие предварительные условия:

          - Файл должен быть открыт.

          - Файл не может быть файлом, состоящим только из данных без

            заданных индексов.

          - Ваша прикладная программа должна установить позицию в индексе

            при Btrieve-вызове немедленно перед операцией Get Next.

        П р о ц е д у р а  :

        Для выполнения операции Get Next установите следующие Btrieve-

        параметры:

          - Установите код операции в 6.

          - Передайте блок позиции для файла.

          - Сохраните значение ключа из предыдущей операции в буфере

            ключа. Передайте буфер ключа ТОЧНО соответствующее

            возвращаемому Btrieve при предыдущем вызове, т.к. Btrieve

            может понадобиться предварительно сохраненная там информация

            для определения текущей позиции в файле.

          - Установите параметр номера ключа в соответствии с путем

            доступа, используемым при предыдущем обращении. Вы не можете

            изменять пути доступа, используя операцию Get Next.

          - Задайте длину буфера данных.

        Р е з у л ь т а т  :

        Если операция завершилась успешно, Btrieve

          - Вернет запись в буфер данных.

          - Вернет значение ключа для этой записи в буфер ключа;

          - Возвратит длину записи в параметре длины буфера данных.

        Если Btrieve не может вернуть запись, он возвратит ненулевой код

        статуса, указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  6 Неверный номер ключа

          -  7 Другой номер ключа

          -  9 Конец файла

          - 22 Буфер данных слишком мал

          - 82 Потеря позиции

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Btrieve использует позиционирование, установленное предыдущим

        вызовом, для выполнения операции Get Next, заменяя позиционную

        информацию следующим образом:

          - Если дубликат существует, СЛЕДУЮЩАЯ запись становится

            первым дубликатом возвращаемого значения. Иначе, следующая

            запись становится первой записью для значения ключа большего,

            чем возвращаемое.

          - Если дубликат существует, ПРЕДЫДУЩАЯ запись становится

            последним дубликатом значения ключа меньшего возвращаемого.

            Иначе, предыдущая запись становится единственной записью для

            значения ключа меньшего, чем возвращаемое.

        GET POSITION (22)

        (Получить позицию)

        Н а з н а ч е н и е  :

        Get Position возвращает физическую позицию текущей записи.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦     ¦

        Возвращаемые        ¦    x    ¦      x     ¦   x  ¦     ¦

        О п и с а н и е  :

        Используя операцию Get Position Ваша прикладная программа

        может получить 4-байтовую позицию текущей записи в Btrieve-

        файле. Для того, чтобы установить текущую запись Ваша прикладная

        программа может выполнить любую другую Get операцию, операцию

        Insert или операцию Update. Ваша прикладная программа может

        затем запросить операцию Get Position для поиска адреса записи.

        Как только Ваша прикладная программа узнает адрес записи, она

        может использовать операцию Get Direct для поиска этой записи

        непосредственно по физическому расположению в файле.

        Btrieve не выполняет какой либо ввод/вывод на диск при запросе

        Get Direct.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию

        Get Position, должны быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Btrieve-обращение к файлу непосредственно до вызова Get

            Position должно найти запись. Вы не можете запросить вызов,

            используя тот же самый блок позиции, между поиском записи и

            вызовом Get Position.

        П р о ц е д у р а  :

        Для выполнения операции Get Position установите следующие

        Btrueve-параметры:

          - Установите код операции равный 22.

          - Передайте блок позиции для файла.

          - Используйте буфер данных достаточно длинный для хранения

            4-байтовой позиции.

          - Установите длину буфера данных равную по крайней мере

            четырем байтам.

        Р е з у л ь т а т  :

        Если операция Get завершилась успешно, Btrieve

          - Возвратит позицию запсии в буфер данных. Позиция - 4-байтовое

            двоичное значение (самое важное первое слово), показывающее

            точку входа записи (в байтах) в файле.

          - Установит длину буфера данных равную четырем байтам.

        Если Btrieve не может определить текущую запись или не может

        возвратить позицию, он вернет ненулевой код статуса указывающий

        на причину. Наиболее часто встречающийся ненулевой статус,

        возвращаемый Btrieve, - код статуса 8 (Неверное

        позиционирование).

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Get Position не оказывает эффект на позиционирование.

        GET PREVIOUS (7)

        (Получить предыдующую)

        Н а з н а ч е н и е  :

        Get Previous ищет запись, предшествующую текущей записи в пути

        ключей.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Используя операцию Get Previous Ваша прикладная программа может

        находить записи в порядке согласно заданному пути доступа. Только

        операции Get First, Get Next, Get Previous и Get Last позволяют

        прикладной программе искать записи для значений ключей-дубликатов

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию

        Get Previous, должны быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Btrieve-обращение к файлу непосредственно до вызова Get

            Previous должно найти запись. Вы не можете запросить вызов,

            используя тот же самый блок позиции, между поиском записи и

            вызовом Get Previous.

        П р о ц е д у р а  :

        Для выполнения операции Get Previous установите следующие

        Btrieve-параметры:

          - Установите код операции в 7.

          - Передайте блок позиции для файла.

          - Задайте правильный номер ключа.

          - Задайте длину буфера данных.

          - Передайте буфер ключа точно соответствующий возвращаемому

            Btrieve при предыдущем вызове, т.к. Btrieve может

            понадобиться предварительно сохраненная там информация

            для определения текущей позиции в файле.

        Р е з у л ь т а т  :

        Если операция завершилась успешно, Btrieve

          - Заменит буфер ключа значением ключа для новой записи;

          - Возвратит предыдущую запись в буфер данных;

          - Возвратит длину записи в параметре длины буфера данных.

        Если операция не была успешной, Btrieve возвратит ненулевой код

        статуса, указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  9 Конец файла

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Btrieve использует позиционирование, установленное предыдущим

        вызовом, для выполнения операции Get Previous следующим образом:

          - Запись, которая была текущей при инициации вызова, становится

            СЛЕДУЮЩЕЙ записью.

          - Если дубликат существует, ПРЕДЫДУЩАЯ запись становится

            последним дубликатом значения ключа меньшего возвращаемого.

            Иначе, предыдущая запись становится единственной записью для

            значения ключа меньшего, чем возвращаемое.

        INSERT (4)

        (Добавить)

        Н а з н а ч е н и е  :

        Операция Insert добавляет запись в файл.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦      x     ¦  x   ¦     ¦  x

        Возвращаемые        ¦    x    ¦            ¦      ¦  x  ¦

        О п и с а н и е  :

        Ваша прикладная программа может использовать операцию Insert для

        добавления новой записи в файл. Btrieve обновляет все индексы

        ключей для отражения значений ключей новой записи во время

        добавления записи.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию Insert,

        должны быть выполнены следующие предварительные условия:

          - Файл данных должен быть открыт.

          - Добавляемая запись должна быть соответствующей длины и

            значения ключей должны соответствовать ключам, определенным

            для файла.

        П р о ц е д у р а  :

        Для выполнения операции Insert установите следующие Btrieve-

        параметры:

          - Задайте код операции равный 2.

          - Сохраните новую запись данных в буфере данных.

          - Задайте длину буфера данных. Это значение должно быть по

            крайней мере равно длине фиксированной части записи.

          - Задайте номер ключа, для которого Вы хотите, чтобы Btrieve

            сохранял позицию.

        Р е з у л ь т а т  :

        Если операция Insert завершилась успешно, Btrieve:

          - Поместит новую запись в файл;

          - Обновит всю индексную информацию, чтобы отразить добавление

            новой записи;

          - Возвратит значение ключа для текущего пути доступа.

        Если операция Insert не была успешной , Btrieve возвратит

        ненулевой код статуса. Наиболее часто встречающие ошибки:

          -  2 ошибка ввода/вывода

          -  3 Файл не открыт

          -  5 Ошибка дубликатов

          - 14 Ошибка открытия прообраза

          - 15 Ошика ввода/вывода прообраза

          - 18 Диск полный

          - 21 Буфер ключа слишком мал

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Insert удаляет всю существующую позиционную информацию.

        Опираясь на заданный Вами номер ключа Btrieve устанавливает свою

        позицию в индексе следующим образом:

          - Первая запись данных со значением ключа большим только что

            добавленного становится СЛЕДУЮЩЕЙ записью.

          - Последняя запись данных со значением ключа меньшим только что

            добавленного становится ПРЕДЫДУЩЕЙ записью.

        LOCKS

        (Блокировки)

        Н а з н а ч е н и е  :

        Блокировки позволяют Вам управлять доступом к записям и файлам,

        предохраняя рабочую станцию от выполнения конфликтных операций

        над базой данных.

        П  а р а м е т р ы  :

        За исключением кода операции параметры для блокировок - те же

        самые как и в соответствующей операции записи.

        О п и с а н и е  :

        Btrieve различает два различных вида блокировок записей:

        единичные блокировки и множественные блокировки. Вы можете

        задать вид блокировки с ожиданием или без ожидания как для

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

        Вы можете задать блокировку с любой операцией  Get, Stop, Open

        или Begin Transaction. Добавляя смещение блокировки к операции

        Begin Transaction задавайте, хотите ли Вы транзакцию с ожиданием

        или без ожидания. Это не приведет Btrieve к использованию

        блокировок записей в течении транзакции.

        ЕДИНИЧНЫЕ БЛОКИРОВКИ ЗАПИСЕЙ. Когда рабочая станция использует

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

        запись в файле в какой-либо момент времени. Btrieve отменяет

        единичную блокировку записи, когда Btrieve запрашивает другую

        Get операцию с блокировкой для того же самого файла, корректирует

        или удалеет заблокированную запись, или запрашивает операцию

        Unlock.

        МНОЖЕСТВЕННЫЕ БЛОКИРОВКИ ЗАПИСЕЙ. Множественные блокировки

        записей позволяют прикладной программе блокировать множественные

        записи в файле и затем корректировать или удалять эти записи по

        необходимости. Когда Вы используете множественные блокировки

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

        Get операции. Однако, он НЕ отменяет блокировку записи, когда Вы

        корректируете заблокированную запись или запрашивает другую Get

        операцию с множественной блокировкой. Ваша прикладная программа

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

        используя операцию Unlock.

        БЛОКИРОВКИ С ОЖИДАНИЕМ. Если другая рабочая станция имеет

        заблокированную запись или имеет прерванную транзакцию для

        файла, когда Вы запрашиваете блокировку с опцией ожидания,

        Btrieve будет ждать до тех пор, пока запись не станет доступной,

        до того, как вернуть управление в прикладную программу.

        БЛОКИРОВКИ БЕЗ ОЖИДАНИЯ. Если другая рабочая станция имеет

        заблокированную запись или имеет прерванную транзакцию для

        файла, когда Вы запрашиваете блокировку с опцией без ожидания,

        Btrieve немедленно возвратит статус 84 или 85 в прикладную

        программу, показывающий что запись - занята.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        За исключением кода операции требуемые для операции блокировки

        параметры идентичны требуемымв соответствующей операцией без

        блокировки.

        П р о ц е д у р а  :

        Для задания блокировки записи Ваша прикладная программа

        прибавляет значение (называемое "смещение блокировки") к любому

        коду операции Get, Step,, Open или Begin Transaction. Следующая

        таблица иллюстрирует значения смещений блокировки:

               Значение    Тип блокировки

                 +100      единичная блокировка записи с ожиданием

                 +200      единичная блокировка записи без ожидания

                 +300      множественная блокировка записи с ожиданием

                 +400      множественная блокировка записи без ожидания

        Используйте значения смещений блокировки следующим образом:

          - ДЛЯ ЗАДАНИЯ ЕДИНИЧНОЙ БЛОКИРОВКИ ЗАПИСИ прибавьте 100

            (с ожиданием) или 200 (без ожидания) к коду операции.

          - ДЛЯ ЗАДАНИЯ МНОЖЕСТВЕННОЙ БЛОКИРОВКИ ЗАПИСИ прибавьте 300

            (с ожиданием) или 400 (без ожидания) к коду операции.

        Например, для запроса Get Equal с единичной блокировкой записи с

        ожиданием код операции будет (100 + 5) или 105. Для той же самой

        операции со множественной блокировкой записи с ожиданием код

        операции будет (300 + 5) или 305. Для запроса Get Last с

        единичной блокировкой записи без ожидания код операции будет

        (13 + 200) или 213. Для той же самой операции со множественной

        блокировкой записи без ожидания код операции будет (13 + 400) или

        413.

        Для задания транзакции с ожиданием установите код операции в 119

        или 319. В этом случае код блокировки задает, что Вы хотите,

        чтобы Btrieve ждал  файл или запись, если они заняты другой

        рабочей станцией. Задание 319 для операции Begin Transaction -

        эквивалентно заданию или 19 или 119. См. описание управления

        транзакциями в Главе 2 для дополнительной информации.

        Вы можете также запросить Begin transaction без ожидания с кодом

        операции 219 или 419. В этом случае Btrieve возвратит статус 84

        или 85, если Ваша прикладная программа попытается получить доступ

        к заблокированной записи или файлу с транзакцией. См. описание                              выполнения операции Get Key установите Btrieve-параметры так

        управления транзакциями в Главе 2 для дополнительной информации.

        ОТКРЫТИЕ ЗАБЛОКИРОВАННЫХ ФАЙЛОВ. Если файл - заблокирован, когда

        рабочая станция пытается его открыть, Btrieve обычно ждет пока

        файл не станет доступен до выполнения операции Open. Это

        эквивалентно блокировке с ожиданием.

        Вы можете задать запрос открытия без ожидания, посылая или 200

        или 400 как код операции для операции Open (0 + 200 или 0 + 400)

        Если файл, который Вы пытаетесь открыть, заблокирован, Btrieve

        возвратит код статуса 85 (Файл занят) в прикладную прграмму. Вы

        можете попытаться затем повторить операцию, пока файл не станет

        доступен.

        ОТМЕНА МНОЖЕСТВЕННЫХ БЛОКИРОВОК ЗАПИСЕЙ. Как упоминалось раньше,

        Btrieve не отменяет автоматически множественную блокировку, как

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

        блокируете множественной блокировкой записи, остаются

        заблокированы, пока Вы не сделаете следующее:

          - Отмените блокировку запросив Btrieve-операцию Unlock (27).

          - Удалите запись.

          - Запросите Btrieve-операцию Reset (28).

          - Закроете файл.

          - Получите доступ к файлу с транзакцией.

        Р е з у л ь т а т  :

        Вы не можете смешивать единичные и множественные блокировки в

        одном и том же файле с одной рабочей станции. Если единичная

        блокировка записи (+100/+200) не отменена, когда рабочая станция

        посылает запрос со множественной блокировкой (+300/+400), Btrieve

        возвратит ошибку несовместимости блокировок. Обратная ситуация

        приведет к той же самой ошиббке. В обоих случаях Btrieve не

        заблокирует запись. Это не значит, что рабочая станция ограничена

        только одним типом блокировки для файла. Btrieve будет возвращать

        ошибку, если только один тип блокировки ИСПОЛЬЗУЕТСЯ В НАСТОЯЩЕЕ

        ВРЕМЯ, когда рабочая станция пытается использовать блокировку

        другого типа.

        Если рабочая станция пытается разблокировать множественную

        блокировку записи, когда она не установлена в позицию этой

        записи, Btrieve возвратит статус ошибки блокировки.

        Вдобавок, Btrieve возвратит статус ошибки блокировки, если Ваша

        прикладная программа попытается заблокировать больше записей, чем

        Вы задали при конфигурации BSERVER. См. описание опций

        инициализации NetWare Btrieve в Главе 3 для дополнительной

        информации.

        Наиболее часто встречающиеся ненулевые коды статуса, возвращаемые

        Btrieve из безуспешных операций блокировки:

          - 81 Ошибка блокировки

          - 84 Запись занята

          - 85 Файл занят

          - 93 Несовместимый тип бблокировки

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операции запрета не оказывают действия на позицию Btrieve в

        индексе.

        OPEN (0)

        (Открыть)

        Н а з н а ч е н и е  :

        Операция Open делает файл доступным.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦         ¦      x     ¦  x   ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Ваша задача не может получить доступ к Btrieve-файлу до тех пор,

        пока она сперва не выполнит операцию Open. Файл не должен

        находиться в текущей директории, пока вы задаете полное имя пути.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запросит операцию Open,

        должны быть выполнены следующие предварительные условия:

          - Файл, который должен быть открыт, должен существовать на

            доступном устройстве. Если файл имеет расширение, оба

            устройства хранения, на которых расположен файл, должны быть

            доступны.

* Управление файла должно быть доступно для файла.

П р о ц е д у р а :

        Для выполнения операции Open установите следующие Btrieve-

        параметры:

          - Установите код операции в 0.

          - Поместите имя файла, который хотите открыть, в параметр

            ббуфера ключа. Завершите имя файла пробелом или двоичным

            нулем. Если файла нет в текущей директории, задайте имя

            устройства и имя пути для файла, включающее уровни директорий.

          - Если файл имеет владельца, задайте имя владельца, завершенное

            двоичным 0, в ббуфере данных.

          - Задайте длину имени владельца, включая двоичный 0, в

            параметре длины буфера данных.

          - Задайте один из следующих режимов спецификаций в параметре

            номера ключа.

              Режим    Описание

               -1      Ускоренный

                       В ускоренном режиме Ваша прикладная программа

                       может заблокировать способность автоматического

                       восстановления данных для того, чтобы увеличит

                       возможность корректировки. См. "Ускоренный доступ"

                       для более подробного описания этой опции. Btrieve

                       блокирует буфер в кэш-памяти для всех файлов,

                       открытых в режиме ускорения. Число файл, которые

                       Вы можете открыть одновременно в ускоренном

                       режиме, зависит от опций памяти и размера

                       страницы, заданных Вами при загрузке Btrieve.

               -2      Только чтение

                       Этот режим позволяет Вашей прикладной программе

                       открыть поврежденный файл, который Btrieve не

                       может автоматически восстановить. Когда Btrieve

                       открывает файл в режиме "только чтение", Ваша

                       прикладная программа может только читать файл; она

                       не может выполнять корректировки. Если были

                       повреждены индексы файла, записи можно найти

                       открывая файл в режиме "только чтение" и затем

                       используя операцию Step Next.

               -3      Верификация

                       Режим верификации применим только к файлам,

                       расположенным на локальных DOS-дисках. Если Ваша

                       прикладная программа открывает локальный файл в

                       режиме верификации, Btrieve имеет опцию

                       верификации DOS во время каждой операции. После

                       каждой записи на диск операционная система

                       перечитывает данные, чтобы удостовериться в

                       правильности их записи. Хотя ошибки записи на

                       диск очень редки, Btrieve обеспечивает эту функцию

                       на случай, если Вы хотите прверить правильность

                       записи критических данных.

                -4     Исключительный

                       Исключительный режим дает рабочей станции

                       исключительный доступ к файлу на разделяемом

                       устройстве. Никакая другая рабочая станция не

                       может открыть этот файл до тех пор, пока рабочая

                       станция, имеющая исключительный доступ к файлу,

                       не закроет его. Исключительный режим имеет место

                       только для файлов, расположенных на разделяемом

                       устройстве. Если Вы запросите исключительный режим

                       для файла на локальном диске, Btrieve откроет файл

                       в обычном режиме.

               Другие  Нормальный

        Для доступа к Bteieve-файлу из Бейсика необходимы два шага.

        Во-первых, Ваша прикладная программа должна запросить операцию

        BASIC OPEN для устройства NUL для того, чтобы использовать

        утверждение FIELD для буфера данных файла. (См. "Вызов Btrieve

        из BASIC" для дополнительной информации). Во-вторых, прикладная

        программа должна выполнить Btrieve-операцию Open. другие языки не

        требуют первого шага.

        Btrieve допускает до 255 открытых файлов для BASIC-компилятора,

        Pascal, COBOL или C прикладных задач. Когда множественные файлы

        открыты в одно и то же время, Btrieve использует блок текущей

        позиции для определения, к какому файлу нужен доступ при данном

        вызове.

               ---------------------------------------------------------

               ПРИМЕЧАНИЕ:

               Хотя Btrieve позволяет прикладной программе открывать до

               255 файлов, BASIC-интерпретатор и некоторые компиляторы

               BASIC-а позволяют максимально только 15 открытых файлов.

               Для доступа к более, чем трем файлам, BASIC требует, чтобы

               Вы задали параметр файлов / при инициации BASIC-

               интерпретатора. Когда Вы открываете множественные файлы в

               одно и то же время из BASIC-а, Btrieve использует FCB для

               определения, к какому файлу нужен доступ при данном

               вызове. См. документацию по BASIC-интерпретатору или

               компилятору для дополнительной информации.

               ---------------------------------------------------------

        Р е з у л ь т а т  :

        Если операция Opene завершилась успешно, Btrieve:

          - Назначьте обработчик файла для файла.

          - Зарезервируйте блок позиции, передаваемый при вызове Open для

            вновь открываемогофайла;

          - Сделайте файл доступным.

        Если операция Open завершилась ошибочно, Btrieve возвратит

        ненулевой код статуса. Наиболее распростанееные ненулевые коды

        статуса для операции Open:

          -  2 Ошибка ввода/вывода

          - 46 Путь доступа к файлу неверен

          - 85 Файл занят

          - 86 Таблица файла заполнена

          - 87 Таблица обработки заполнена

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Open не устанавливает какую-либо позиционную информацию.

        RESET (28)

        (Сброс)

        Н а з н а ч е н и е  :

        Reset освобождает все ресурсы, захваченные рабочей станцией,

        такие как оставшиеся блокировки при ошибочном завершении

        прикладной программы.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦         ¦            ¦      ¦  x  ¦  x

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Ваша прикладная программа может выполнять операцию Reset для

        освобождения всех ресурсов, захваченных рабочей станцией в сети.

        Эта операция отменяет все транзакции рабочей станции, отменяет все

        блокировки и закрывает открытые файлы рабочей станции.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        Ваша прикладная программа может запрсить операцию Reset в любое

        время после загрузки Record Manager.

        П р о ц е д у р а  :

        Для выполнения операции Reset установите следующие Btrieve-

        параметры:

          - Установите код операции равный 28.

          - Установите парвметр номера ключа в -1, если Ваша прикладная

            программа освобождает ресурсы для другой рабочей станции

            сети.

          - Сохраните номер связи рабочей станции, на которой

            осуществляется сброс, как целое число в первых 2 байтах

            буфера ключа.

        Р е з у л ь т а т  :

        Если операция Reset завершилась успешно, Btrieve:

          - Закроет все открытые файлы для заданной рабочей станции.

          - Отменит все блокировки, заданные данной рабочей станцией.

          - Отменит все активные транзакции на данной рабочей станции.

        Если операция не была успешной  по какой-либо причине, Btrieve

        возвратит ненулевой код статуса.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Reset разрушает всю позиционную информацию, т.к.

        закрывает все открытые файлы.

        SET DIRECTORY (17)

        (Установить директорию)

        Н а з н а ч е н и е  :

        Операция Set Directory устанавливает текущую директорию в

        заданное значение.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦         ¦            ¦      ¦  x  ¦

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Операция Set Directory изменяет текущую директорию на директорию

        заданную в параметре буфера ключа.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию

        Set Directory, устройство-приемник и директория должны стать

        доступны.

        П р о ц е д у р а  :

        Для установки текущей директории установите следующие Btrieve-

        параметры:

          - Установите код операции равный 17.

          - Сохраните требуемое устройство и путь директории, завершенные

            двоичным 0, в буфере ключа. Если Вы опустите имя устройства,

            Btrieve будет использовать устройство, заданное по умолчанию.

            Если Вы не задатите полный путь для директории, Btrieve

            добавит путь директории, заданный в буфере ключа, к текущей

            директории.

        Р е з у л ь т а т  :

        Если операция Set Directory завершилась успешно, Btrieve сделает

        директорию, заданную в буфере ключа, текущей директорией.

        Если операция не была успешной, Btrieve оставит текущую

        директорию неизмененной и возвратит ненулевой статус.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Set Directory не оказывает эффект на позиционирование.

        SET OWNER (29)

        (Установить владельца)

        Н а з н а ч е н и е  :

        Set Owner присваивает имя владельца файлу.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦     x      ¦   x  ¦  x  ¦  x

        Возвращаемые        ¦    x    ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Операция Set Owner присваивает имя владельца файлу таким образом

        что пользователи, не знающие это имя, не могут получить доступ к

        файлу. Если для файла было установлено имя владельца,

        пользователи или прикладные программы должны задавть имя

        владельца всякий раз, как они пытаются открыть файл. Вы можете

        задать, чтобы имя владельца требовалось при любом доступе или

        только при корректировке.

        Когда Вы присвоите имя владельца файлу, Вы можете также указать

        Btrieve зашифровать данные файла на диске. Если Вы задаете

        шифровку данных, Btrieve зашифрует все данные во время операции

        Set Owner. Чем длиннее файл, тем дольше выполняется Set Owner&

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа запрсит операцию

        Set Owner, должны быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Не должно быть активных транзакций.

          - Имя владельца не должно уже быть присвоено файлу.

        П р о ц е д у р а  :

        Для выполнения операции Set Owner установите следующие Btrieve-

        параметры:

          - Установите код операции равный 29.

          - Передайте блок позиции, определяющий файл, что Вы хотите

            защитить.

          - Сохраните имя владельца в буфере данных и в буфере ключа и

            передайте длину буфера данных. Bteieve требует имя в обоих

            буферах, чтобы избежать возможность случайного задания

            неправильного значения. Имя владельца может быть длиной до

            восьми символов и должно завершаться двоичным 0.

          - Установите параметр номера ключа в целое число, задающее тип

            ограничений доступа, которые Вы хотите задать для файла, и

            должны ли быть данные зашифрованы. В Таблице 6.2 перечислены

            значения, задаваемые Вами для номера ключа.

                Значение   Описание

                    0      Запросы имени владельца при любом методе

                           доступа (нет шифровки данных)

                    1      Предоставление доступа "только чтение" без

                           имени владельца (нет шифровки данных)

                    2      Запросы имени владельца при любом методе

                           доступа (с шифровкой данных)

                    3      Предоставление доступа "только чтение" без

                           имени владельца (с шифровкой данных)

                          Таблица 6.2

              Коды имени владельца и шифровки данных

        Р е з у л ь т а т  :

        Если операция Set Owner завершилась успешно, Btrieve:

          - Не позволит получить доступ к файлу, пока не будет задано имя

            владельца;

          - Зашифрует данные в файле, если задана шифровка.

        Как только Ваша прикладная программа установит имя владельца, оно

        останется действительным до тех пор, пока Ваша прикладная

        программа не запросит операцию Clear Owner.

        Если операция Set Owner не была успешной, Btrieve возвратит

        ненулевой статус. Наиболее часто встречающиеся ненулевые коды

        статуса:

          - 41 Недопустимая операция

          - 50 Владелец уже установлен

          - 51 Неправильное имя владельца

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Set Owner не оказывает эффект на позиционирование.

        STAT (15)

        (Статистика)

        Н а з н а ч е н и е  :

        Stat ищет характеристики для заданного файла.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦   x     ¦      x     ¦   x  ¦  x  ¦

        Возвращаемые        ¦         ¦      x     ¦   x  ¦  x  ¦

        О п и с а н и е  :

        Используя операцию Stat Ваша прикладная программа может

        определять характеристики, заданные для файла при его создании.

        Вдобавок операция Stat возвращает число записей в файле, число

        уникальных значений ключей, храниых для каждого индекса в файле,

        число неиспользуемых страниц в файле и все дополнительные индексы

        определенные для файла.

        Btrieve возвращает характеристики файла в буфер данных в том же

        самом двоичном формате как и в операции Create. Для 4-байтовых

        переменных (число ключей и записей) Btrieve возвращает младшую

        часть числа в первых 2 байтах, за которыми следует старшая часть

        числа в последних 2 байтах. Зарезервированные области также

        размещаются, хотя Btrieve игнорирует их в операции Stat.

        Флаги файла появляются как показано ниже:

          - Если бит 0 = 1, файл допускает записи переменной длины.

          - Если бит 1 = 1, Btrieve усечет пробельные концы в записях

            переменной длины.

          - Если бит 2 = 1, Btrieve перераспределит страницы для файла

          - Если бит 3 = 1, Btrieve сожмет данные в файле.

          - Если бит 4 = 1, Btrieve создаст файл, состоящий только из

            ключей.

          - Если бит 6 = 1, Btrieve установит 10% границу свободного

            пространства.

          - Если бит 7 = 1, Btrieve установит 20% границу свободного

            пространства.

          - Если бит 6 = 1 и бит 7 = 1, Btrieve установит 30% границу

            свободного пространства.

        Спецификации ключа появляются непосредственно за спецификациями

        файла и повторяются для каждого сегмента в файле. Btrieve

        устанавливает флаги ключа следующим образом:

          - Если бит 0 = 1, ключ допускает дубликаты.

          - Если бит 1 = 1, ключ - модифицируемый.

          - Если бит 2 = 0 и бит 8 = 0, ключ - строковый.

          - Если бит 2 = 1 и бит 8 = 0, ключ - двоичный.

          - Если бит 3 = 1, ключ имеет пустое значение.

          - Если бит 4 = 1, ключ имеет другой сегмент.

          - Если бит 5 = 1, ключ отсортирован с помощью последовательности

            альтернативного поиска.

          - Если бит 6 = 1, ключ отсортирован в убывающем порядке.

          - Бит 7 игнорируется для операции Create.

          - Если бит 8 = 0, ключ - стандартного типа.

          - Если бит 8 = 1, ключ - расширенного типа,

          - Если бит 9 = 1, ключ - ручной.

        См. операцию Create в этой главе, где находится таблица

        иллюстрирующая десятичные значения этих флагов.

        Если Вы задаете альтернативную последовательность поиска

        для любого из ключей или ключевых сегментов файла, Btrieve

        возвратит определение последовательности непосредственно за

        блоком спецификаций последненго ключа. Btrieve возвратит буфер

        данных в формате, показанном в Таблице 6.3.

                          ¦   Описание            ¦Длина¦

                          +-----------------------+-----+

                          ¦ длина записи          ¦  2  ¦

                          ¦-----------------------¦-----¦

                          ¦ размер страницы       ¦  2  ¦

                          ¦-----------------------¦-----¦

           спецификации   ¦ кол-во индексов       ¦  2  ¦

              файла       ¦-----------------------¦-----¦

                          ¦ кол-во заисей         ¦  4  ¦

                          ¦-----------------------¦-----¦

                          ¦ флаги файла           ¦  2  ¦

                          ¦-----------------------¦-----¦

                          ¦ резервное слово       ¦  2  ¦

                          ¦-----------------------¦-----¦

                          ¦неиспользуемые страницы¦  2  ¦

                          L-----------------------+------

                          ¦   Описание            ¦Длина¦

                          +-----------------------+-----+

                          ¦ позиция ключа         ¦  2  ¦

                          ¦-----------------------¦-----¦

                          ¦ длина ключа           ¦  2  ¦

           спецификации   ¦-----------------------¦-----¦

             ключей       ¦ флаги ключа           ¦  2  ¦

                          ¦-----------------------¦-----¦

           (повторяются)  ¦ кол-во ключей         ¦  4  ¦

                          ¦-----------------------¦-----¦

                          ¦ тип расширенного ключа¦  1  ¦

                          ¦-----------------------¦-----¦

                          ¦ пустое значение       ¦  1  ¦

                          ¦-----------------------¦-----¦

                          ¦ зарезервировано       ¦  4  ¦

                          L-----------------------+------

                                 Таблица 6.3

                          Буфера данных для операции Stat

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До выполненият операции Stat Ваша прикладная программа должна

        сперва открыть Btrieve-файл.

        П р о ц е д у р а  :

        Для выполнения операции Stat установите следующие Btrieve-

        параметры:

          - Установите код операции в 15.

          - Передайте блок позиции файла.

          - Покажите буфер данных (для хранения статистики по файлу и

            ключам) и альтернативную последовательность поиска, если она

            задана.

          - Задайте длину буфера данных.

          - Покажите буфер ключа длиной по крайней мере 64 символа.

        Р е з у л ь т а т  :

        Если операция Stat завершилась успешно, Btrieve:

           - Возвратит характеристики файла и ключей в буфер данных;

           - Сохранит имя расширения файла, завершенное двоичным нулем, в

             буфер ключа, если Вы до этого расширили файл. Иначе, Btrieve

             проинициализирует первый байт буфера ключа нулем.

        Если операция завершилась безуспешно, Btrieve вернет ненулевой

        код статуса, информирующий о причине. Наиболее часто встречающие

        ненулевые коды:

          -  3 Файл не открыт

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Stat Create не устанавливает какую-либо позиционную

        информацию.

        STEP FIRST (33)

        (Шаг на первую)

        Н а з н а ч е н и е  :

        Step First ищет запись, размещенную физически первой в файле.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦     ¦

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦     ¦

        О п и с а н и е  :

        Step First позволяет Вашей прикладной программе искать

        запись, размещенную физически первой в файле. Btrieve не

        использует индексный путь для поиска записи.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа сможет выполнить операцию

        Step First, файл должен быть открыт.

        П р о ц е д у р а  :

        Для выполнения операции Step First установите следующие Btrueve-

        параметры:

          - Задайте код операции равный 33.

          - Передайте блок позиции для файла.

          - Покажите буфер данных, в котором хранится возвращаемая запись

          - Установите параметр длины буфера данных равный длине буфера

            данных.

        Р е з у л ь т а т  :

        Если операция завершилась успешно, Btrieve

          - Вернет физически первую запись файла в буфер данных Вашей

            прикладной программы.

          - Установит параметр длины буфера данных равный количеству

            байтов в возвращаемой записи.

        Если операция  не была успешной, Btrieve вернет ненулевой код

        статуса указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  9 Конец файла

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Step First не устанавливает позицию в индексе.

        STEP LAST (33)

        (Шаг на последнюю)

        Н а з н а ч е н и е  :

        Step Last ищет запись, размещенную физически последней в файле.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦     ¦

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦     ¦

        О п и с а н и е  :

        Step Last позволяет Вашей прикладной программе искать

        запись, размещенную физически последней в файле. Btrieve не

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

        Step Last.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа сможет выполнить операцию

        Step Last, файл должен быть открыт.

        П р о ц е д у р а  :

        Для выполнения операции Step Last установите следующие Btrueve-

        параметры:

          - Задайте код операции равный 34.

          - Передайте блок позиции для файла.

          - Покажите буфер данных, в котором хранится возвращаемая запись

          - Установите параметр длины буфера данных равный длине буфера

            данных.

        Р е з у л ь т а т  :

        Если операция завершилась успешно, Btrieve

          - Вернет физически последнюю запись файла в буфер данных;

          - Установит параметр длины буфера данных равный количеству

            байтов в возвращаемой записи.

        Если операция  не была успешной, Btrieve вернет ненулевой код

        статуса указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  9 Конец файла

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Step Last не устанавливает позицию в индексе.

        STEP NEXT (24)

        (Шаг на следующую)

        Н а з н а ч е н и е  :

        Step Next ищет запись, физически следующую за текущей записью.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦     ¦

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦     ¦

        О п и с а н и е  :

        Step Next позволяет Вашей прикладной программе искать

        записи в том порядке, в котором они физически хранятся. Btrieve

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

        Step Next. Операция Step Next, запрашиваемая непосредственно после

        операции Open, возвращает первую запись в файле. Операция

        Step Next, запрашиваемая непосредственно после любой операции Get

        или Step, возвращает запись, физически следующую за записью,

        найденной предыдущей операцией.

        Ваша прикладная программа не может прогнозировать порядок, в

        котором записи будут возвращаться операцией Step Next.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа сможет выполнить операцию

        Step Next, файл должен быть открыт.

        П р о ц е д у р а  :

        Для выполнения операции Step Next установите следующие Btrueve-

        параметры:

          - Задайте код операции равный 24.

          - Передайте блок позиции для файла.

          - Покажите буфер данных, в котором хранится возвращаемая запись

          - Задайте длину буфера данных.

        Р е з у л ь т а т  :

        Если операция завершилась успешно, Btrieve

          - Вернет физически последнюю запись файла в буфер данных Вашей

            прикладной программы;

          - Установит параметр длины буфера данных равный количеству

            байтов в возвращаемой записи.

        Если операция  не была успешной, Btrieve вернет ненулевой код

        статуса указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  9 Конец файла

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Step Next не устанавливает позицию в индексе.

        STEP PREVIOUS (36)

        (Шаг на предыдующую)

        Н а з н а ч е н и е  :

        Step Previous позволяет Вашей прикладной программе искать запись

        физически предшествующую текущей записи.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦            ¦   x  ¦     ¦

        Возвращаемые        ¦    x    ¦     x      ¦   x  ¦     ¦

        О п и с а н и е  :

        Step Previous позволяет Вашей прикладной программе искать

        записи в том порядке, в котором они физически хранятся. Btrieve

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

        Step Previous. Операция Step Previous, запрашиваемая

        непосредственно после любой операции Get или Step, возвращает

        запись, физически предшествующую записи, найденной предыдущей

        операцией.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная программа сможет выполнить операцию

        Step previous, должен быть выполнены следующие предварительные

        условия:

          - Файл должен быть открыт.

          - Предыдущей операцией должна быть успешно выполненная операция

            Get или Step.

        П р о ц е д у р а  :

        Для выполнения операции Step Previous установите следующие Btrueve-

        параметры:

          - Задайте код операции равный 35.

          - Передайте блок позиции для файла.

          - Покажите буфер данных, в котором хранится возвращаемая запись

          - Задайте длину буфера данных.

        Р е з у л ь т а т  :

        Если операция завершилась успешно, Btrieve

          - Вернет физически последнюю запись файла в буфер данных Вашей

            прикладной программы;

          - Установит параметр длины буфера данных равный количеству

            байтов в возвращаемой записи.

        Если операция  не была успешной, Btrieve вернет ненулевой код

        статуса указывающий на причину. Наиболее часто встречающиеся

        ненулевые коды статуса:

          -  3 Файл не открыт

          -  9 Конец файла

          - 22 Буфер данных слишком мал

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Step Previous не устанавливает позицию в индексе.

        STOP (25)

        (Остановить)

        Н а з н а ч е н и е  :

        Операция Stop завершает программу BREQUEST и удаляет ее из

        памяти рабочей станции.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦         ¦            ¦      ¦     ¦

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Stop удаляет программу запросов (BREQUEST) из памяти рабочей

        станции. Btrieve прикладная программа на рабочей станции не

        может выполнять какие-либо другие Btrieve- операции до тех пор,

        пока вы не стартуете вновь BREQUEST.

        Операция Stop удаляеттолько из памяти рабочей станции, где

        выполняется Btrieve-запрос. вы не можете остановить BREQUEST на

        другой рабочей станции.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        BREQUEST должен быть загружен до того, как Ваша прикладная

        программа сможет Запросить операцию Stop.

        П р о ц е д у р а  :

        Для выполнения операции Stop Ваша прикладная программа задает

        код операции равный 25.

        Р е з у л ь т а т  :

        Если операция Stop завершилась успешно, Btrieve

          - Удалит BREQUEST из памяти на рабочей станции:

          - Закроет все предварительно открытые файлы для раочей станции

          - Снимет все активные транзакции;

          - Отменит все блокировки на рвбочей станции.

        Если операция Stop не была успешной, Btrieve вернет ненулевой код

        статуса. Наиболее часто встречающийся  ненулевой код статуса 20

        (BREQUEST не загружен).

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Stop не устанавливает какую-либо позицию.

        UNLOCK (27)

        (Отмена блокировки)

        Н а з н а ч е н и е  :

        Операция Unlock отменяет блокировки одной или более записей,

        которые предварительно были заблокированы.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦     x      ¦   x  ¦     ¦  x

        Возвращаемые        ¦         ¦            ¦      ¦     ¦

        О п и с а н и е  :

        Unlock полностью отменяет блокировки одной или более записей для

        файла, связанного с заданным блоком позиции.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная  программа сможет запросить операцию

        Unlock на рвбочей станции, рабочая станция должна установить по

        крайней мере блокировку одной записи.

        П р о ц е д у р а  :

        Для отмены единичной блокировки записи,установите следующие

        Btrieve-параметры:

          - Установите код операции равный 27.

          - Передайте блок позиции файла, содержащего заблокированную

            запись.

          - Установите номер ключа в неотрицательное значение.

        Для отмены множественной блокировки записи одного типа, сперва

        найдите 4-байтовую позицию записи, которую Вы хотите

        разблокировать, с помощью операции Get Position (22) для этой

        записи. Затем запросите операцию Unlock , устанавливая

         Btrieve-параметры следующим образом:

          - Установите код операции равный 27.

          - Передайте Btrieve блок позиции файла, содержащего

            заблокированную запись.

          - Сохраните (в буфере данных) 4-байтовую позицию, возвращаемую

            Btrieve.

          - Установите длину буфера данных равную 4.

          - Проинициализируйте параметр номера  ключа -1.

        Для отмены всех множественных блокировок записи файла Вы должны

        устанавить Btrieve-параметры следующим образом:

          - Установите код операции равный 27.

          - Передайте Btrieve блок позиции файла, содержащего

            множественные блокировки.

          - Проинициализируйте параметр номера  ключа -2.

        Р е з у л ь т а т  :

        Если операция Unlock завершилась успешно, Btrieve отменит все

        блокировки, задаваемые этой операцией.

        Если операция Unlock не была успешной, Btrieve вернет ненулевой

        статус. Наиболее часто встречающийся  ненулевой код статуса 81

        (Ошибка блокировки).

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Unlock не оказывает действие на позиционирование.

        UPDATE (3)

        (Корректировка)

        Н а з н а ч е н и е  :

        Операция Update корректирует существующую запись в файле.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦    x    ¦     x      ¦   x  ¦     ¦  x

        Возвращаемые        ¦    x    ¦            ¦      ¦  x  ¦

        О п и с а н и е  :

        Операция Update изменяет информацию в существующей записи.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Ваша прикладная  программа сможет запросить операцию

        Update, должны встретиться следующие предварительные условия:

          - Файл должен быть открыт.

          - Btrieve-обращение к файлу, выполняемое непосредственно перед

            вызовом Update, должно найти запись6 которая будет

            корректироваться. вы не можете запрашивать вызов, используя

            тот же самый блок позиции, во время между поиском Вашей

            прикладной программой записи и корректировкой записи.

        П р о ц е д у р а  :

        Для выполнения операции Update установите следующие Btrieve-

        параметры:

          - Установите код операции равный 3.

          - Передайте блок позиции файла, содержащего эту запись.

          - Сохраните скорректированную запись в буфере данных.

          - Установите длину буфера данных равной длине корректируемой

            записи.

          - Сохраните номер ключа, используемый для поиска запис, в

            параметре номера ключа.

        Р е з у л ь т а т  :

        Если операция Update завершилась успешно, Btrieve:

          - Заменит заменит запись, хранящуюся в файле, новым значением

            из буфера данных.

          - Обновит индексы ключей для отражения любых изменений в

            значениях ключей.

          - Заменит параметр буфера ключа, если потребуется.

        Если операция Update не была успешной, Btrieve вернет ненулевой

        код статуса. Наиболее часто встречающиеся  ненулевые коды статуса

          -  5 Ошибка дубликата ключа.

          -  7 Другой номер ключа.

          -  8 Неправильное позиционирование.

          - 10 Ошибка модифицируемого ключа.

          - 14 Ошибка открытия прообраза.

          - 15 Ошибка ввода/вывода прообраза.

          - 22 Буфер данных слишком мал.

          - 80 Ошибка конфликта.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Update изменяет позиционную информацию только когда

        изменяется значение ключа. В этом случае Btrieve устанавливает

        свою позицию в индексе, опираясь на заданный Вами номер ключа,

        следующим образом:

          - Первая запись со значением ключа большим, чем обновленный

            ключ, становится СЛЕДУЮЩЕЙ записью.

          - Первая запись со значением ключа меньшим, чем обновленный

            ключ, становится ПРЕДЫДУЩЕЙ записью.

        VERSION (26)

        (Версия)

        Н а з н а ч е н и е  :

        Операция Version возвращает текущую версию Btrieve и номер

        пересмотра.

        П р и м е н е н и е   п а р а м е т р о в  :

                    --------T----------------------T------T-----T------

                            ¦        FCB           ¦Длина ¦     ¦

                    Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер

                            ¦         ¦            ¦данных¦ключа¦ключа

                    --------+---------+------------+------+-----+------

        Ожидаемые       x   ¦         ¦            ¦   x  ¦     ¦

        Возвращаемые        ¦         ¦     x      ¦   x  ¦     ¦

        О п и с а н и е  :

        Эта операция возвращает текущую версию Btrieve и номер пересмотра.

        П р е д в а р и т е л ь н ы е    у с л о в и я  :

        До того, как Вы сможете запросить операцию Version, должен быть

        загружен Btrieve Record Manager.

        П р о ц е д у р а  :

        Для выполнения операции Version установите следующие Btrieve-

        параметры:

          - Установите код операции равный 26.

          - Посмотрите, чтобы буфер данных был по крайней мере длиной 5

            байтов.

          - Установите длину буфера данных равной 5.

        Р е з у л ь т а т  :

        Если операция Version завершилась успешно, Btrieve возвратит

        данные в буфер данных в следующем формате:

              Размер     Описание

                 2       Целое число, содержащее номер версии

                 2       Целое число, содержащее номер пересмотра

                 1       Символ, содержащий "N" для NetWare Btrieve

        Если операция Version не была успешной, Btrieve вернет ненулевой

        статус.

        Т е к у щ е е   п о з и ц и о н и р о в а н и е  :

        Операция Version не оказывает влияния на текущее

        позиционирование.