Хранение массива в BLOB-поле — версия 2

Spread the love
Комментарий Алексея Тимохина к моей заметке «Хранение массива в BLOB-поле» навел меня на мысль, что приведенный мной код можно значительно упростить, если выбросить из него использование TMemoryStream для временного хранения информации.
Что бы загрузить массив в параметр query типа ftBlob можно использовать метод SetBlobData:

qInsertResearchData.Params[5].SetBlobData(aData, Length(aData) * SizeOf(aData[0]))

Чтение массива из поля типа TBlobField тоже можно записать коротко:

// Установка размера динамического массива aData
SetLength(aData, qResearchDATA.BlobSize div SizeOf(aData[0]));
// Запись содержимого поля qResearchDATA типа TBlobField в массив aData
qResearch.GetBlobFieldData(qResearchDATA.FieldNo, TBlobByteData(aData))

Т.к. размер массива я устанавливаю равным размеру содержимого BLOB-поля, то для исключения лишних проверок в GetBlobFieldData я заменил вызов этого метода на свой код и теперь запись содержимого поля qResearchDATA типа TBlobField в массив aData выглядит так:

With qResearch.CreateBlobStream(qResearchDATA, bmRead) do
Try
ReadBuffer(aData[0], qResearchDATA.BlobSize);
Finally
Free;
End;

Читать на сайте автора.

0 ответы

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *