В этой статье:
Номер статьи: 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 | Двоичный | Файл с изображением. |
Также для примера создадим форму. На форме расположены следующие компоненты:
Button с наименованием «BPrior». Используется для перемещения в кэше данных на одну запись назад.
Button с наименованием «BNext». Используется для перемещения в кэше данных на одну запись вперед.
Button с наименованием «BAdd». Используется для создания новой записи.
Label с наименованием «ImgName». Используется для отображения пути и наименования загруженного файла.
ImageBox с наименованием «ImgBox». Используется для отображения изображения.
FileOpenDialog с наименованием «OpenImageDlg». Используется для выбора файлов с изображением.
При загрузке формы будет открыта таблица и получен кэш с записями. Нажатие кнопок «BPrior» и «BNext» позволяет перемещаться по записям в кэше. После любого перемещения в кэше будет вызвана процедура LoadRecord. В данной процедуре извлекаются значения полей текущей записи. Изображение из поля «IMG» загружается в поток, содержимое которого затем загружается в компонент «ImgBox». При нажатии на кнопку «BAdd» будет выведен диалог выбора файла. После выбора файла с изображением будет добавлена новая запись. Наименование файла и сам файл будут записаны в таблицу.
Для хранения в поле «IMG» объекта репозитория, например регламентного отчета, преобразуем выше указанный код и добавим на форму следующие компоненты:
UiReport с наименованием «UiReport1». Источник данных для визуального компонента ReportBox.
ReportBox с наименованием «ReportBox1». Визуальный компонент, для отображения регламентного отчета, загруженного из таблицы репозитория.
MetabaseOpenDialog с наименованием «OpenReportDlg». Используется для выбора регламентного отчета из репозитория.
См. также: