IRBIS64.dll — различия между версиями

Материал из Wikipedia
Перейти к: навигация, поиск
(Функции работы с полями прочитанной записи БЕЗ ФИЗИЧЕСКОЙ ЗАПИСИ)
Строка 15: Строка 15:
 
  // Открыть файлы MST и XRF.
 
  // Открыть файлы MST и XRF.
 
  // Параметры:
 
  // Параметры:
  // SP – указатель на запись TIrbisSpace;
+
  // SP – указатель на переменную типа TIrbisSpace;
 
  // DataBase – полный путь к файлам MST и XRF с указанием имени файла, но без расширения
 
  // DataBase – полный путь к файлам MST и XRF с указанием имени файла, но без расширения
 
  // (предполагается, что эти файлы находятся в одной папке, одинаково называются и отличаются
 
  // (предполагается, что эти файлы находятся в одной папке, одинаково называются и отличаются
Строка 25: Строка 25:
 
  // Открыть инверсный файл.
 
  // Открыть инверсный файл.
 
  // Параметры:
 
  // Параметры:
  // SP – указатель на запись TIrbisSpace;
+
  // SP – указатель на переменную типа TIrbisSpace;
 
  // DataBase – полный путь к инверсному файлу с указанием имени файла, но без расширения.
 
  // DataBase – полный путь к инверсному файлу с указанием имени файла, но без расширения.
 
  // В случае успешного открытия возвращает ZERO.
 
  // В случае успешного открытия возвращает ZERO.
Строка 37: Строка 37:
 
  // закрыть файлы, освободить память.
 
  // закрыть файлы, освободить память.
 
  // Параметры:
 
  // Параметры:
  // SP – указатель на запись TIrbisSpace.
+
  // SP – указатель на переменную типа TIrbisSpace.
 
  procedure IrbisClose(SP: PIrbisSpace); export;
 
  procedure IrbisClose(SP: PIrbisSpace); export;
  
 
  // Закрыть файлы MST и XRF.
 
  // Закрыть файлы MST и XRF.
 
  // Параметры:
 
  // Параметры:
  // SP – указатель на запись TIrbisSpace.
+
  // SP – указатель на переменную типа TIrbisSpace.
 
  procedure IrbisCloseMST(SP: PIrbisSpace); export;
 
  procedure IrbisCloseMST(SP: PIrbisSpace); export;
  
 
  // Закрыть инверсный файл.
 
  // Закрыть инверсный файл.
 
  // Параметры:
 
  // Параметры:
  // SP – указатель на запись TIrbisSpace.
+
  // SP – указатель на переменную типа TIrbisSpace.
 
  procedure IrbisCloseTerm(SP: PIrbisSpace); export;
 
  procedure IrbisCloseTerm(SP: PIrbisSpace); export;
  
==Инициализация записи <tt>TIrbisSpace</tt> для работы с записью базы данных (документом базы данных)==
+
==Работа с записями на полке==
  
  // базовая функция чтения записи без блокировки (аналог RECORD)
+
  // Прочитать из базы данных запись с указанным MFN и поместить на полку.
 +
// Аналог функции RECORD в ISIS.
 +
// Параметры:
 +
// SP – указатель на переменную типа TIrbisSpace.
 +
// Shelf – полка, на которую будет помещена запись.
 +
// mfn – MFN записи, которую необходимо прочитать.
 +
// В случае успешного выполнения возвращает ZERO.
 
  function IrbisRecord(PS: PIrbisSpace; Shelf, mfn: longint): integer; export;
 
  function IrbisRecord(PS: PIrbisSpace; Shelf, mfn: longint): integer; export;
 
==Функции работы с инверсным файлом==
 
 
Поисковый ключ term должен иметь длину >=255 используйте тип TKey.
 
 
// Найти термин term.
 
// Возвращает:
 
// 0 - термин найден
 
// TERM_NOT_EXISTS = -202 в term - следующий термин
 
// TERM_LAST_IN_LIST = -203  в term - #0
 
// TERM_FIRST_IN_LIST = -204  в term - первый термин словаря
 
function Irbisfind(PS: PIrbisSpace; term: Pchar): integer; export;
 
 
// дать следующий термин
 
// возврат 0 и term TERM_LAST_IN_LIST и #0
 
function Irbisnxtterm(PS: PIrbisSpace; term: Pchar): integer; export;
 
 
// дать предидущий термин
 
// возврат 0 и term TERM_FIRST_IN_LIST и #0
 
function Irbisprevterm(PS: PIrbisSpace; term: Pchar): integer; export;
 
 
// Возвращает число ссылок на термин.
 
// Функция предназначена для использования после вызова Irbisfind.
 
function Irbisnposts(PS: PIrbisSpace): longint; export;
 
 
// Разобрать ссылку на: mfn, tag, occ, cnt.
 
// Возможные значения opt:
 
// opt = 1 функция возвращает mfn (номер записи);
 
// opt = 2 функция возвращает tag (метка поля);
 
// opt = 3 функция возвращает occ (повторение поля);
 
// opt = 4 функция возвращает cnt (номер слова).
 
// Возвращает: в случае успеха положительное значение (больше ноля).
 
function IrbisPosting(PS: PIrbisSpace; opt: smallint): longint; export;
 
 
// инициализация работы со ссылками - не вызывается напрямую процедура скрыта в FIND
 
function Irbisinitpost(PS: PIrbisSpace): integer; export;
 
 
// Перейти к следующей ссылке.
 
// Возвращает: 0 - успешно выполнено; -1 - конец списка.
 
function IrbisNxtPost(PS: PIrbisSpace): integer; export;
 
 
// установить указатель постингов на заданном чтобы читать дальше NXTPost с него!!!
 
function IrbisFindPosting(PS: PIrbisSpace; const Term: PChar; const posting: TifpItemPosting): integer; export;
 
 
==Функции работы с полями прочитанной записи БЕЗ ФИЗИЧЕСКОЙ ЗАПИСИ==
 
  
 
  // Возвращает: порядковый номер поля с заданной меткой или 0, если поле отсутствует в записи.
 
  // Возвращает: порядковый номер поля с заданной меткой или 0, если поле отсутствует в записи.
Строка 150: Строка 111:
 
  // Это тот номер MFN, который будет присвоен первой новой записи, добавленной в базу.
 
  // Это тот номер MFN, который будет присвоен первой новой записи, добавленной в базу.
 
  function IrbisMaxMFN(PS: PIrbisSpace): longint; export;
 
  function IrbisMaxMFN(PS: PIrbisSpace): longint; export;
 +
 +
==Функции работы с инверсным файлом==
 +
 +
Поисковый ключ term должен иметь длину >=255 используйте тип TKey.
 +
 +
// Найти термин term.
 +
// Возвращает:
 +
// 0 - термин найден
 +
// TERM_NOT_EXISTS = -202 в term - следующий термин
 +
// TERM_LAST_IN_LIST = -203  в term - #0
 +
// TERM_FIRST_IN_LIST = -204  в term - первый термин словаря
 +
function Irbisfind(PS: PIrbisSpace; term: Pchar): integer; export;
 +
 +
// дать следующий термин
 +
// возврат 0 и term TERM_LAST_IN_LIST и #0
 +
function Irbisnxtterm(PS: PIrbisSpace; term: Pchar): integer; export;
 +
 +
// дать предидущий термин
 +
// возврат 0 и term TERM_FIRST_IN_LIST и #0
 +
function Irbisprevterm(PS: PIrbisSpace; term: Pchar): integer; export;
 +
 +
// Возвращает число ссылок на термин.
 +
// Функция предназначена для использования после вызова Irbisfind.
 +
function Irbisnposts(PS: PIrbisSpace): longint; export;
 +
 +
// Разобрать ссылку на: mfn, tag, occ, cnt.
 +
// Возможные значения opt:
 +
// opt = 1 функция возвращает mfn (номер записи);
 +
// opt = 2 функция возвращает tag (метка поля);
 +
// opt = 3 функция возвращает occ (повторение поля);
 +
// opt = 4 функция возвращает cnt (номер слова).
 +
// Возвращает: в случае успеха положительное значение (больше ноля).
 +
function IrbisPosting(PS: PIrbisSpace; opt: smallint): longint; export;
 +
 +
// инициализация работы со ссылками - не вызывается напрямую процедура скрыта в FIND
 +
function Irbisinitpost(PS: PIrbisSpace): integer; export;
 +
 +
// Перейти к следующей ссылке.
 +
// Возвращает: 0 - успешно выполнено; -1 - конец списка.
 +
function IrbisNxtPost(PS: PIrbisSpace): integer; export;
 +
 +
// установить указатель постингов на заданном чтобы читать дальше NXTPost с него!!!
 +
function IrbisFindPosting(PS: PIrbisSpace; const Term: PChar; const posting: TifpItemPosting): integer; export;
  
 
==Функции, осуществляющие запись в БД==
 
==Функции, осуществляющие запись в БД==

Версия 16:11, 19 июля 2010

Общий порядок работы с базами данных ИРБИС с помощью библиотеки IRBIS64.dll

Для работы с базами данных ИРБИС с помощью библиотеки IRBIS64.dll предусмотрен следующий порядок:

  • Инициализировать переменную типа TIrbisSpace с помощью функции IrbisInit. Эта переменная предназначена для хранения контекста работы с базой и требуется при вызове большинства функций библиотеки IRBIS64.dll.
  • Инициализировать структуры isisucw и isisacw с помощью функции irbis_uatab_init. Эти структуры требуются для корректной работы некоторых команд форматирования.
  • Открыть базу данных с помощью функций IrbisInitMST, IrbisInitTerm, IrbisInitInvContext.
  • Работать с открытой базой данных.
  • Закрыть базу данных с помощью функций IrbisCloseMst, IrbisCloseTerm или IrbisClose.

Для проверки успешности выполнения IrbisInitMST, IrbisInitTerm и других функций библиотеки IRBIS64.dll принято определять константу ZERO = 0.

// Инициализировать запись TIrbisSpace и вернуть указатель на неё.
function IrbisInit: PIrbisSpace; export;
// Открыть файлы MST и XRF.
// Параметры:
// SP – указатель на переменную типа TIrbisSpace;
// DataBase – полный путь к файлам MST и XRF с указанием имени файла, но без расширения
// (предполагается, что эти файлы находятся в одной папке, одинаково называются и отличаются
// расширением);
// ANumberShelfs – количество полок.
// В случае успешного открытия возвращает ZERO.
function IrbisInitMST(SP: PIrbisSpace; DataBase: Pchar; ANumberShelfs: integer): integer; export;
// Открыть инверсный файл.
// Параметры:
// SP – указатель на переменную типа TIrbisSpace;
// DataBase – полный путь к инверсному файлу с указанием имени файла, но без расширения.
// В случае успешного открытия возвращает ZERO.
function IrbisInitTerm(SP: PIrbisSpace; DataBase: Pchar): integer; export;

После окончания работы с библиотекой IRBIS64.dll необходимо освободить занятые во время работы ресурсы с помощью процедуры IrbisClose.

Примечание: процедура IrbisClose в том числе запускает процедуры IrbisCloseMST, IrbisCloseTerm.

// Освободить ресурсы, занятые во время работы с библиотекой IRBIS64.dll:
// закрыть файлы, освободить память.
// Параметры:
// SP – указатель на переменную типа TIrbisSpace.
procedure IrbisClose(SP: PIrbisSpace); export;
// Закрыть файлы MST и XRF.
// Параметры:
// SP – указатель на переменную типа TIrbisSpace.
procedure IrbisCloseMST(SP: PIrbisSpace); export;
// Закрыть инверсный файл.
// Параметры:
// SP – указатель на переменную типа TIrbisSpace.
procedure IrbisCloseTerm(SP: PIrbisSpace); export;

Работа с записями на полке

// Прочитать из базы данных запись с указанным MFN и поместить на полку.
// Аналог функции RECORD в ISIS.
// Параметры:
// SP – указатель на переменную типа TIrbisSpace.
// Shelf – полка, на которую будет помещена запись.
// mfn – MFN записи, которую необходимо прочитать.
// В случае успешного выполнения возвращает ZERO.
function IrbisRecord(PS: PIrbisSpace; Shelf, mfn: longint): integer; export;
// Возвращает: порядковый номер поля с заданной меткой или 0, если поле отсутствует в записи.
// Аналог функции FIELDN в ISIS.
function IrbisFieldN(PS: PIrbisSpace; shelf, met, occ: integer): integer; export;
// Получить элемент данных записи, полученной с помощью вызова IrbisRecord или аналога ISISRLOCK.
// Аналог функции FIELD в ISIS.
// Где:
// nf - порядковый номер;
// subfields - подполе или подполя (указываются только символы, идентифицирующие подполе, без зннака ^).
function IrbisField(PS: PIrbisSpace; shelf, nf: integer; subfields: PChar): Pchar; export;
// nf - порядковый номер поля в справочнике
// если nf<1 или nf>кол-ва полей, то поле добавляется последним
// возврат: 0 - успешное завершение <>0 - не успешное
// АНАЛОГ ISIS FLDADD
function Irbisfldadd(PS: PIrbisSpace; Shelf,met, nf: integer; pole: Pchar): integer;export;
// замена поля
// возврат: 0 - успешно; <>0 - неуспешно
// если pole=nil () - удаляет!!
// аналог FLDREP
function Irbisfldrep(PS: PIrbisSpace; Shelf,nf: integer; pole: Pchar): integer;export;
// аналог NFIELDS
function Irbisnfields(PS: PIrbisSpace;Shelf:integer): integer;export;
// вернуть число повторений поля с даной меткой
// аналог NOCC
function Irbisnocc(PS: PIrbisSpace; Shelf,met: integer): integer;export;
// вернуть метку поля по порядковому номеру поля в записи
// аналог FLDTAG
function Irbisfldtag(PS: PIrbisSpace; Shelf,nf: integer): integer; export;
// опустошает запись
function Irbisfldempty(PS:PIrbisSpace;Shelf:integer):integer;export;


// формирование заготовки для новой записи с номером Amfn
function Irbisnewrec(PS: PIrbisSpace; shelf: integer): integer; export;
// изменитьномер записи
function Irbischangemfn(PS: PIrbisSpace; shelf,newmfn: integer):integer;export;
// Вернуть MFN записи, находящейся на полке.
function IrbisMFN(PS: PIrbisSpace; shelf: integer): longint; export;
// Вернуть число, равное: максимальному номеру MFN из имеющихся в базе записей + 1.
// Это тот номер MFN, который будет присвоен первой новой записи, добавленной в базу.
function IrbisMaxMFN(PS: PIrbisSpace): longint; export;

Функции работы с инверсным файлом

Поисковый ключ term должен иметь длину >=255 используйте тип TKey.

// Найти термин term.
// Возвращает:
// 0 - термин найден
// TERM_NOT_EXISTS = -202 в term - следующий термин
// TERM_LAST_IN_LIST = -203  в term - #0
// TERM_FIRST_IN_LIST = -204  в term - первый термин словаря
function Irbisfind(PS: PIrbisSpace; term: Pchar): integer; export;
// дать следующий термин
// возврат 0 и term TERM_LAST_IN_LIST и #0
function Irbisnxtterm(PS: PIrbisSpace; term: Pchar): integer; export;
// дать предидущий термин
// возврат 0 и term TERM_FIRST_IN_LIST и #0
function Irbisprevterm(PS: PIrbisSpace; term: Pchar): integer; export;
// Возвращает число ссылок на термин.
// Функция предназначена для использования после вызова Irbisfind.
function Irbisnposts(PS: PIrbisSpace): longint; export;
// Разобрать ссылку на: mfn, tag, occ, cnt.
// Возможные значения opt:
// opt = 1 функция возвращает mfn (номер записи);
// opt = 2 функция возвращает tag (метка поля);
// opt = 3 функция возвращает occ (повторение поля);
// opt = 4 функция возвращает cnt (номер слова).
// Возвращает: в случае успеха положительное значение (больше ноля).
function IrbisPosting(PS: PIrbisSpace; opt: smallint): longint; export;
// инициализация работы со ссылками - не вызывается напрямую процедура скрыта в FIND
function Irbisinitpost(PS: PIrbisSpace): integer; export;
// Перейти к следующей ссылке.
// Возвращает: 0 - успешно выполнено; -1 - конец списка.
function IrbisNxtPost(PS: PIrbisSpace): integer; export;
// установить указатель постингов на заданном чтобы читать дальше NXTPost с него!!!
function IrbisFindPosting(PS: PIrbisSpace; const Term: PChar; const posting: TifpItemPosting): integer; export;

Функции, осуществляющие запись в БД

// опустошение БД
function IrbisDBEmptyTime(IrbisSpace:PIrbisSpace;seconds:integer):integer;export;
// заблокировать БД
function IrbisLockDBTime(IrbisSpace:PIrbisSpace;seconds:integer):integer;export;
// снять блокировку БД
function IrbisUnLockDBTime(IrbisSpace:PIrbisSpace;seconds:integer):integer;export;
// базовая функция записи с полки с актуализацией и разблокировкой
function IrbisRecUpdateTime(IrbisSpace:PIrbisSpace;Shelf:integer;KeepLock:integer;Updif:boolean;seconds:integer;
  var result_update:integer;var result_updif:integer):integer;export;
// базовая функция актуализации записи
function IrbisRecIfUpdateTime(IrbisSpace:PIrbisSpace;Shelf, mfn:integer;seconds:integer):integer;export;
// базовая функция блокировки записи
// аналог RECORD
function IrbisRecLockTime(IrbisSpace: PIrbisSpace; Shelf,mfn: longint;seconds:integer): integer;export;
// базовая функция разблокировки записи
function IrbisRecUnLockTime(IrbisSpace:PIrbisSpace;mfn:integer;seconds:integer):integer;export;