ГЛАВА 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 не оказывает влияния на текущее позиционирование.
| <<
| <
| >
| >>
|
Содержание
|