powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа с BLOB
5 сообщений из 5, страница 1 из 1
Работа с BLOB
    #32259006
gray_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть база на IB/FB. Клиент на C++ Builder (или Delphi - в данном случае не важно).
В базе хранятся файлы в битовом поле BlobField (.txt, .xls, .doc, .jpg). В клиенте необходимо иметь возможность просматривать эти файлы. Я пробовал делать через OleContainer таким образом:

TMemoryStream *ms = new TMemoryStream;

Ole->LoadFromStream(ms);
((TBlobField*)qu->FieldByName("FILE"))->SaveToStream(ms);
delete ms;

На строке с LoadFromStream вываливается ошибка - Stream read error.
Если сделать так:
TBlobStream *ms = new TBlobStream(((TBlobField*)qu->FieldByName("FILE")), bmRead);
Ole->LoadFromStream(ms);
delete ms;
то вываливается ошибка Invalid class typecast на строчке с new.
Никто не сталкивался с таким вопросом?
...
Рейтинг: 0 / 0
Работа с BLOB
    #32259157
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
//---------------------------------------------------------------------------
bool save_jpeg( TField *field, TJPEGImage *picture )
{
assert(field);
assert(picture);
TMemoryStream *stream = new TMemoryStream;
TBlobField *blob = (TBlobField *)field;
try
{
picture->SaveToStream(stream);
int sz = stream->Size;
if( sz > NULL )
{
stream->Seek(0,0);
blob->LoadFromStream(stream);
}
}catch(...){ return false;}
delete stream;
return true;
}
//---------------------------------------------------------------------------
bool load_jpeg( TField *field, TJPEGImage *picture )
{
assert(field);
assert(picture);
TMemoryStream *stream = new TMemoryStream;
TBlobField *blob = (TBlobField *)field;
try
{
blob->SaveToStream(stream);
int sz = stream->Size;
if( sz > NULL )
{
stream->Seek(0,0);
picture->LoadFromStream(stream);
}
}catch(...){ return false; }
delete stream;
return true;
}
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
Работа с BLOB
    #32259593
gray_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это всё хорошо, а как загрузить это в визуальный компонент. TImage из потока у меня только битмап удалось загрузить, а джпег ни в какую. Вываливается AccessVoilation. Мож чего не так делаю.
...
Рейтинг: 0 / 0
Работа с BLOB
    #32259821
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
#include <jpeg.hpp>


TJPEGImage();
...
Рейтинг: 0 / 0
Работа с BLOB
    #32259839
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У визуальных компонентов есть проперть Canvas, через неё используй функции
StretchDraw(const TRect &Rect, TGraphic* Graphic);
Draw(int X, int Y, TGraphic* Graphic);

TJPEGImage *jpeg;
jpeg = new TJPEGImage();
далее то, что написал Lepsik

потом
... Canvas->Draw(X, Y, (TGraphic*) jpeg);
или
... Canvas->StretchDraw(MyRect, (TGraphic*) jpeg);

это для Builder, а для Delphi сам сообразишь.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа с BLOB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]