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

ГЛАВА 6. ОПЕРАЦИИ ЗАПИСИ BTRIEVE

01.01.2007

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

В этой главе описаны все 36 операций, которые может выполнять Ваша прикладная программа при использовании 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 должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Abort Transaction установите код операции 21 до выполнения вызова Btrueve. Btrieve проигнорирует все остальные параметры при вызове Abort Transaction.

Результат:

Если операция Abort Transaction завершилась успешно, Btrieve возвратит код статуса равный 0. Все операции Insert(2), Update(3) и Delete(4), выполненные с начала транзакции будут удалены из файлов.

Если операция Abort Transaction завершится с ошибками Btrieve возвратит ненулевой код статуса, указывающий на причину ошибки. Наиболее распространенные ненулевые коды статуса для этой операции:

Текущее позиционирование:

Операция Abort Transaction не оказывает влияния на позиционирование.

BEGIN TRANSACTION (19) (Начало транзакции)

Назначение:

Операция Begin Transaction помечает начало множества логически связанных Btrieve-операций.

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦         ¦            ¦      ¦     ¦
Возвращаемые        ¦         ¦            ¦      ¦     ¦

Описание:

Операция Begin Transaction определяет начало транзакции. Транзакции полезны, когда Вам необходимо выполнить множество Btrieve-операций для записи единственного события и если Ваша база данных несовместима, если все операции не завершены.

Транзакция может включать любое число Btrieve-операций над не более чем 12 файлами. Заключая множество операций между Begin и End Transaction Вы можете быть уверены, что Btrieve не запишет какую-либо из этих операций до тех пор, пока не будут успешно завершены все операции.

Предварительные условия:

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

Процедура:

Для выполнения Begin Transaction установите код операции в 19 до вызова Btrieve. Btrieve проигнорирует все другие параметры при вызове Begin Transaction.

Результат:

Если операция Begin Transaction завершилась успешно, Btrieve вернет код статуса равный 0.

Если операция завершится с ошибками, Btrieve вернет ненулевой код статуса. Наиболее распространееные ненулевые коды статуса для этой операции:

Текущее позиционирование:

Операция 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 должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Clear Owner установите следующие Btrieve- параметры:

Результат:

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

Наиболее распростанееные ненулевые коды статуса для этой операции

Текущее позиционирование:

Clear Owner не оказывает эффекта на позиционирование.

CLOSE (1) (Закрыть)

Назначение:

Операция Close закрывает Btrieve-файл.

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦    x    ¦            ¦      ¦     ¦
Возвращаемые        ¦         ¦            ¦      ¦     ¦

Описание:

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

Предварительные условия:

До того, как Ваша прикладная программа запросит операцию Close должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения этой операции установите следующие Btrieve- параметры:

Результат:

Если операция 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 бита. Установите биты в соответствии со следующим описанием:

Следующая таблица показывает двоичное и десятичное представление значений флагов файла:

Значения Двоичное Десятичное
переменная длина 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 байт.

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

Хотя 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 флагов ключа следующим образом:

Задайте тип расширенного ключа как двоичное значение в байте 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-файл вместо ранее существовавшего Btrieve-файла, будьте уверены, что файл закрыт перед выполнением операции Create.

Процедура:

Для выполнения операции Create установите следующие Btrieve- параметры:

Результат:

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

Если операция завершилась безуспешно, Btrieve вернет ненулевой код статуса, информирующий о причине. Наиболее часто встречающие ненулевые коды:

См. в Приложении B объяснение кодов статуса.

Текущее позиционирование:

Операция Create не устанавливает какую-либо позиционную информацию.

CREATE SUPPLEMENTAL INDEX (Создание дополнительного индекса)

Назначение:

Операция Create Supplemental Index добавляет дополнительный индекс в файл.

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦    x    ¦     x      ¦  x   ¦     ¦
Возвращаемые        ¦         ¦            ¦      ¦     ¦

Описание:

Применяйте операцию Create Supplemental Index для добавления индекса в файл в любое время после того, как ббыл создан файл.

Предварительные условия:

До того, как Ваша прикладная программа запрсит операцию Create Supplemental Index, должны быть выполнены следующие предварительные условия:

Процедура:

Для создания дополнительного индекса установите следующие Btrieve-параметры:

Результат:

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

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

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

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

Наиболее часто встречающие ошибки:

Если во время создания дополнительного индекса отключится питание или система перезагрузится, Вы сможете получить доступ к данным файла через другие индексы файла. Однако, 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- параметры:

Результат:

Если операция Delete завершилась успешно, Btrieve:

Если невозможно успешно удалить запись, Btrieve возвратит ненулевой код статуса.

Наиболее часто встречающие ошибки:

Текущее позиционирование:

После операции 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-параметры:

Результат:

Если операция Drop Supplemental Index завершилась успешно, Btrieve:

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

Если процесс прерван во время отбрасывания индекса. Вы можете получить доступ к данным файла через другие индексы файла. 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, должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Extend установите следующие Btrueve- параметры:

Результат:

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

Если операция не была успешной, Btrieve возвратит ненулевой статус. Наиболее часто встречающиеся ошибки, возвращаемые операцией Extend:

Текущее позиционирование:

Операция 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, должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Get Direct установите следующие Btrueve- параметры:

Результат:

Если операция Get Direct завершилась успешно, Btrieve

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

Текущее позиционирование:

После операции Get Direct Btrieve удаляет всю существующую позиционную информацию и устанавливает текущую позицию согласно заданному номеру ключа.

GET DIRECTORY (18) (Получить директорию)

Назначение:

Get Directory ищет текущую директорию.

Применение параметров:

                --------T----------------------T------T-----T------
                        ¦        FCB           ¦Длина ¦     ¦
                Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                        ¦         ¦            ¦данных¦ключа¦ключа
                --------+---------+------------+------+-----+------
    Ожидаемые       x   ¦         ¦            ¦      ¦     ¦  x
    Возвращаемые        ¦         ¦            ¦      ¦  x  ¦

Описание:

Операция Get Directory возвращает текущую директорию для заданного логического устройства.

Предварительные условия:

До того, как Ваша прикладная программа сможет запрсить операцию Get Directory непосредственно после загрузки Record Manager.

Буфер ключа должен быть по крайней мере длиной в 65 символов.

Процедура:

Для поиска текущей директории установите следующие Btrueve- параметры:

Результат:

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-параметры:

Результат:

Если операция Get Equal завершилась успешно, Btrieve

Если операция Get Equal не была успешной,Btrieve вернет ненулевой код статуса указывающий на причину. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

После операции 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-параметры:

Результат:

Если операция Get First завершилась успешно, Btrieve

Если операция Get First не была успешной, Btrieve вернет ненулевой код статуса указывающий на причину. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

После операции 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-параметры:

Результат:

Если операция завершилась успешно, Btrieve

Если операция не была успешной, Btrieve вернет ненулевой код статуса, указывающий на причину. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

После операции 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-параметры:

Результат:

Если операция завершилась успешно, Btrieve

Если операция не была успешной, Btrieve вернет ненулевой код статуса, указывающий на причину. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

После операции Get Greater Or Equal Btrieve удаляет всю существующую позиционную информацию и устанавливает текущую позицию следующим образом:

GET KEY (+50) (Получить ключ)

Назначение:

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

Применение параметров:

Параметры - те же самые как и в соответствующей 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- параметры:

Результат:

Если операция завершилась успешно, Btrieve

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

Текущее позиционирование:

После операции 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-параметры:

Результат:

Если операция завершилась успешно, Btrieve

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

Текущее позиционирование:

После операции 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-параметры:

Результат:

Если операция завершилась успешно, Btrieve

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

Текущее позиционирование:

После операции 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, должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Get Next установите следующие Btrieve- параметры:

Результат:

Если операция завершилась успешно, Btrieve

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

Текущее позиционирование:

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, должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Get Position установите следующие Btrueve-параметры:

Результат:

Если операция Get завершилась успешно, Btrieve

Если 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, должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Get Previous установите следующие Btrieve-параметры:

Результат:

Если операция завершилась успешно, Btrieve

Если операция не была успешной, Btrieve возвратит ненулевой код статуса, указывающий на причину. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

Btrieve использует позиционирование, установленное предыдущим вызовом, для выполнения операции Get Previous следующим образом:

INSERT (4) (Добавить)

Назначение:

Операция Insert добавляет запись в файл.

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦    x    ¦      x     ¦  x   ¦     ¦  x
Возвращаемые        ¦    x    ¦            ¦      ¦  x  ¦

Описание:

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

Предварительные условия:

До того, как Ваша прикладная программа запрсит операцию Insert, должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Insert установите следующие Btrieve- параметры:

Результат:

Если операция Insert завершилась успешно, Btrieve:

Если операция Insert не была успешной, Btrieve возвратит ненулевой код статуса. Наиболее часто встречающие ошибки:

Текущее позиционирование:

Операция 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 множественная блокировка записи без ожидания

Используйте значения смещений блокировки следующим образом:

Например, для запроса 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, если Ваша прикладная программа попытается получить доступ к заблокированной записи или файлу с транзакцией. См. описание управления транзакциями в Главе 2 для дополнительной информации.

ОТКРЫТИЕ ЗАБЛОКИРОВАННЫХ ФАЙЛОВ.

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

Вы можете задать запрос открытия без ожидания, посылая или 200 или 400 как код операции для операции Open (0 + 200 или 0 + 400) Если файл, который Вы пытаетесь открыть, заблокирован, Btrieve возвратит код статуса 85 (Файл занят) в прикладную прграмму. Вы можете попытаться затем повторить операцию, пока файл не станет доступен.

ОТМЕНА МНОЖЕСТВЕННЫХ БЛОКИРОВОК ЗАПИСЕЙ.

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

Результат:

Вы не можете смешивать единичные и множественные блокировки в одном и том же файле с одной рабочей станции. Если единичная блокировка записи (+100/+200) не отменена, когда рабочая станция посылает запрос со множественной блокировкой (+300/+400), Btrieve возвратит ошибку несовместимости блокировок. Обратная ситуация приведет к той же самой ошиббке. В обоих случаях Btrieve не заблокирует запись. Это не значит, что рабочая станция ограничена только одним типом блокировки для файла. Btrieve будет возвращать ошибку, если только один тип блокировки ИСПОЛЬЗУЕТСЯ В НАСТОЯЩЕЕ ВРЕМЯ, когда рабочая станция пытается использовать блокировку другого типа.

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

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

Текущее позиционирование:

Операции запрета не оказывают действия на позицию Btrieve в индексе.

OPEN (0) (Открыть)

Назначение:

Операция Open делает файл доступным.

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦         ¦      x     ¦  x   ¦  x  ¦  x
Возвращаемые        ¦    x    ¦            ¦      ¦     ¦

Описание:

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

Предварительные условия:

До того, как Ваша прикладная программа запросит операцию Open, должны быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Open установите следующие 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 завершилась ошибочно, Btrieve возвратит ненулевой код статуса. Наиболее распростанееные ненулевые коды статуса для операции Open:

Текущее позиционирование:

Операция Open не устанавливает какую-либо позиционную информацию.

RESET (28) (Сброс)

Назначение:

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

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦         ¦            ¦      ¦  x  ¦  x
Возвращаемые        ¦         ¦            ¦      ¦     ¦

Описание:

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

Предварительные условия:

Ваша прикладная программа может запрсить операцию Reset в любое время после загрузки Record Manager.

Процедура:

Для выполнения операции Reset установите следующие Btrieve- параметры:

Результат:

Если операция Reset завершилась успешно, Btrieve:

Если операция не была успешной по какой-либо причине, Btrieve возвратит ненулевой код статуса.

Текущее позиционирование:

Операция Reset разрушает всю позиционную информацию, т.к. закрывает все открытые файлы.

SET DIRECTORY (17) (Установить директорию)

Назначение:

Операция Set Directory устанавливает текущую директорию в заданное значение.

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦         ¦            ¦      ¦  x  ¦
Возвращаемые        ¦         ¦            ¦      ¦     ¦

Описание:

Операция Set Directory изменяет текущую директорию на директорию заданную в параметре буфера ключа.

Предварительные условия:

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

Процедура:

Для установки текущей директории установите следующие 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- параметры:

Результат:

Если операция Set Owner завершилась успешно, Btrieve:

Как только Ваша прикладная программа установит имя владельца, оно останется действительным до тех пор, пока Ваша прикладная программа не запросит операцию Clear Owner.

Если операция Set Owner не была успешной, Btrieve возвратит ненулевой статус. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

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.

Флаги файла появляются как показано ниже:

Спецификации ключа появляются непосредственно за спецификациями файла и повторяются для каждого сегмента в файле. Btrieve устанавливает флаги ключа следующим образом:

См. операцию 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- параметры:

Результат:

Если операция Stat завершилась успешно, Btrieve:

Если операция завершилась безуспешно, Btrieve вернет ненулевой код статуса, информирующий о причине. Наиболее часто встречающие ненулевые коды:

Текущее позиционирование:

Операция 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- параметры:

Результат:

Если операция завершилась успешно, Btrieve

Если операция не была успешной, Btrieve вернет ненулевой код статуса указывающий на причину. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

Операция 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- параметры:

Результат:

Если операция завершилась успешно, Btrieve

Если операция не была успешной, Btrieve вернет ненулевой код статуса указывающий на причину. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

Операция 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- параметры:

Результат:

Если операция завершилась успешно, Btrieve

Если операция не была успешной, Btrieve вернет ненулевой код статуса указывающий на причину. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

Операция 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, должен быть выполнены следующие предварительные условия:

Процедура:

Для выполнения операции Step Previous установите следующие Btrueve-параметры:

Результат:

Если операция завершилась успешно, Btrieve

Если операция не была успешной, Btrieve вернет ненулевой код статуса указывающий на причину. Наиболее часто встречающиеся ненулевые коды статуса:

Текущее позиционирование:

Операция 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

Если операция Stop не была успешной, Btrieve вернет ненулевой код статуса. Наиболее часто встречающийся ненулевой код статуса 20 (BREQUEST не загружен).

Текущее позиционирование:

Операция Stop не устанавливает какую-либо позицию.

UNLOCK (27) (Отмена блокировки)

Назначение:

Операция Unlock отменяет блокировки одной или более записей, которые предварительно были заблокированы.

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦    x    ¦     x      ¦   x  ¦     ¦  x
Возвращаемые        ¦         ¦            ¦      ¦     ¦

Описание:

Unlock полностью отменяет блокировки одной или более записей для файла, связанного с заданным блоком позиции.

Предварительные условия:

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

Процедура:

Для отмены единичной блокировки записи,установите следующие Btrieve-параметры:

Для отмены множественной блокировки записи одного типа, сперва найдите 4-байтовую позицию записи, которую Вы хотите разблокировать, с помощью операции Get Position (22) для этой записи. Затем запросите операцию Unlock, устанавливая Btrieve-параметры следующим образом:

Для отмены всех множественных блокировок записи файла Вы должны устанавить Btrieve-параметры следующим образом:

Результат:

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

Если операция Unlock не была успешной, Btrieve вернет ненулевой статус. Наиболее часто встречающийся ненулевой код статуса 81 (Ошибка блокировки).

Текущее позиционирование:

Операция Unlock не оказывает действие на позиционирование.

UPDATE (3) (Корректировка)

Назначение:

Операция Update корректирует существующую запись в файле.

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦    x    ¦     x      ¦   x  ¦     ¦  x
Возвращаемые        ¦    x    ¦            ¦      ¦  x  ¦

Описание:

Операция Update изменяет информацию в существующей записи.

Предварительные условия:

До того, как Ваша прикладная программа сможет запросить операцию Update, должны встретиться следующие предварительные условия:

Процедура:

Для выполнения операции Update установите следующие Btrieve- параметры:

Результат:

Если операция Update завершилась успешно, Btrieve:

Если операция Update не была успешной, Btrieve вернет ненулевой код статуса. Наиболее часто встречающиеся ненулевые коды статуса

Текущее позиционирование:

Операция Update изменяет позиционную информацию только когда изменяется значение ключа. В этом случае Btrieve устанавливает свою позицию в индексе, опираясь на заданный Вами номер ключа, следующим образом:

VERSION (26) (Версия)

Назначение:

Операция Version возвращает текущую версию Btrieve и номер пересмотра.

Применение параметров:

            --------T----------------------T------T-----T------
                    ¦        FCB           ¦Длина ¦     ¦
            Операция¦Блок поз.¦Буфер данных¦буфера¦Буфер¦Номер
                    ¦         ¦            ¦данных¦ключа¦ключа
            --------+---------+------------+------+-----+------
Ожидаемые       x   ¦         ¦            ¦   x  ¦     ¦
Возвращаемые        ¦         ¦     x      ¦   x  ¦     ¦

Описание:

Эта операция возвращает текущую версию Btrieve и номер пересмотра.

Предварительные условия:

До того, как Вы сможете запросить операцию Version, должен быть загружен Btrieve Record Manager.

Процедура:

Для выполнения операции Version установите следующие Btrieve- параметры:

Результат:

Если операция Version завершилась успешно, Btrieve возвратит

данные в буфер данных в следующем формате:

Размер     Описание
-------------------
   2       Целое число, содержащее номер версии

   2       Целое число, содержащее номер пересмотра

   1       Символ, содержащий "N" для NetWare Btrieve

Если операция Version не была успешной, Btrieve вернет ненулевой статус.

Текущее позиционирование:

Операция Version не оказывает влияния на текущее позиционирование.

Previous page:
ГЛАВА 5. ИНТЕРФЕЙС ПРИКЛАДНЫХ ПРОГРАММ
Top:
DRKB
Next page:
ПРИЛОЖЕНИЕ A: КОДЫ ОПЕРАЦИЙ BTRIEVE