В этой статье:

Общие сведения

Запись и чтение полей пользовательского и двоичного типа

Установка значения поля

Чтение значения поля

Пример

Работа с полями, имеющими пользовательский тип данных

Номер статьи: KB000031

Общие сведения

Во время работы с таблицей репозитория, при создании новых полей указывается тип данных, которые будут храниться в поле. Кроме базовых типов (Строка, Целый, Вещественный, Дата) может быть указан один из пользовательских типов данных: Пользовательский, Текстовый или Двоичный. При этом в физической таблице на сервере, которой соответствует данная таблица репозитория, будет создано поле с определенным типом. Ниже приведены те типы, которые будут иметь поля физической таблицы, в зависимости от используемой СУБД:

Тип поля в таблице репозитория PostgreSQL Oracle Microsoft SQL Server
Пользовательский LO LONG RAW VARBINARY(MAX)
Текстовый Text CLOB (NCLOB при работе с юникод) VARCHAR(MAX) (NVARCHAR(MAX) при работе с юникод)
Двоичный LO BLOB VARBINARY(MAX)

Для получения поддерживаемых версий СУБД обратитесь к разделу «Поддерживаемые СУБД».

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

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

Запись и чтение полей пользовательского и двоичного типа

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

Установка значения поля

Var
    //...
    Fields: IDatasetInstanceFields;
    StreamData: IIOStream;
    //...
Begin
    //...
    Fields.FindById("<ID поля>").Value := StreamData;
    //...

Чтение значения поля

Var
    //...
    Fields: IDatasetInstanceFields;
    StreamData: IIOStream;
    //...
Begin
    //...
    StreamData := IOStream.FromVariant(Fields.FindById("<ID поля>").Value);
    //...

Пример

Рассмотрим пример записи и чтения данных в поле двоичного типа. Для выполнения примера создадим таблицу с идентификатором «TImages» со следующими полями:

Идентификатор поля Тип поля Краткое описание
IMG_NAME Текстовый Наименование файла.
IMG Двоичный Файл с изображением.

Также для примера создадим форму. На форме расположены следующие компоненты:

При загрузке формы будет открыта таблица и получен кэш с записями. Нажатие кнопок «BPrior» и «BNext» позволяет перемещаться по записям в кэше. После любого перемещения в кэше будет вызвана процедура LoadRecord. В данной процедуре извлекаются значения полей текущей записи. Изображение из поля «IMG» загружается в поток, содержимое которого затем загружается в компонент «ImgBox». При нажатии на кнопку «BAdd» будет выведен диалог выбора файла. После выбора файла с изображением будет добавлена новая запись. Наименование файла и сам файл будут записаны в таблицу.

Пример

Для хранения в поле «IMG» объекта репозитория, например регламентного отчета, преобразуем выше указанный код и добавим на форму следующие компоненты:

Пример

См. также:

База знаний разработчиков