Комментарий Алексея Тимохина к моей заметке "Хранение массива в 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;
Что бы загрузить массив в параметр 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;
Комментариев нет:
Отправить комментарий