Работа с записями


НАЧАЛО >> Нативный провайдер данных DP_Irbis64Native >> Работа с записями📄 Скачать в DOCX


Операции с записями выполняются через стандартные функции провайдера. В прикладном коде они выглядят так же, как при работе с другими провайдерами ИРБИС 128, но внутри DP_Irbis64Native читает и изменяет файлы базы напрямую.

1. Чтение записи

Для чтения используется MFN. Провайдер обращается к XRF, получает физический адрес записи в MST, читает тело записи и возвращает его в формате, ожидаемом ИРБИС 128.

Типовая последовательность:

  1. прикладной модуль передает имя базы и MFN;
  2. провайдер открывает или берет из кэша контекст базы;
  3. по XRF определяется положение записи;
  4. из MST читается актуальная версия;
  5. поля записи преобразуются в нужную кодировку;
  6. результат возвращается вызывающему модулю.

Если запись удалена, заблокирована или MFN выходит за допустимый диапазон, провайдер возвращает состояние ошибки через общий механизм ИРБИС 128.

2. Чтение с форматированием

Функции RecReadAndFormat, RecFormat, RecFormatMfn и RecFormatMfnRange читают записи и применяют PFT-форматы. Форматы ищутся через стандартные пути базы и окружения, а список доступных форматов может определяться настройкой PftOpt.

Форматирование выполняется после получения записи. Поэтому проблемы чтения MST/XRF и ошибки PFT диагностируются отдельно.

3. Сохранение записи

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

  1. применить автоматический ввод;
  2. выполнить формально-логический контроль;
  3. обработать специальные действия сохранения;
  4. подготовить обновление MST и XRF;
  5. записать новую версию записи;
  6. отметить необходимость актуализации индекса;
  7. завершить транзакцию.

Если проверка ФЛК возвращает фатальный отказ, запись сохраняется как логически удаленная. Это сохраняет занятый MFN и соответствует пакетным сценариям ИРБИС64, где неуспешная по ФЛК запись остается в MST/XRF с признаком удаления.

4. Автоматический ввод

Автоматический ввод выполняется по GBL-файлу, заданному параметром AutoInFile. Он используется для заполнения служебных полей, дат, идентификаторов и других значений, которые должны добавляться при создании или изменении записи.

Автоввод выполняется до записи в MST, поэтому его результат попадает в сохраняемую версию записи и далее участвует в актуализации.

5. Блокировки

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

При редактировании запись должна быть заблокирована до сохранения или отмены изменений. Если блокировку получить нельзя, прикладной модуль должен предупредить пользователя и не выполнять запись.

6. Удаление

Операция DeleteRec присутствует в интерфейсе провайдера для совместимости, но в текущей реализации DP_Irbis64Native не выполняет фактическое изменение MST/XRF. Если сценарий требует удаления записи, нужно использовать реализованный штатный механизм обслуживания базы и после него актуализировать индекс.

7. Импорт и создание базы

Для пакетной загрузки и подготовки баз используются функции ImportFromFile, NewDb и Empty. Они применяются административными сценариями и должны выполняться только при корректно настроенных путях базы и достаточных правах на файловую систему.

8. Восстановление после сбоя

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