Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа с BLOB / 5 сообщений из 5, страница 1 из 1
08.09.2003, 17:54
    #32259006
gray_k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с BLOB
Есть база на 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
08.09.2003, 20:20
    #32259157
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с BLOB
//---------------------------------------------------------------------------
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
09.09.2003, 11:29
    #32259593
gray_k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с BLOB
Это всё хорошо, а как загрузить это в визуальный компонент. TImage из потока у меня только битмап удалось загрузить, а джпег ни в какую. Вываливается AccessVoilation. Мож чего не так делаю.
...
Рейтинг: 0 / 0
09.09.2003, 13:08
    #32259821
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с BLOB
Код: plaintext
1.
2.
3.
#include <jpeg.hpp>


TJPEGImage();
...
Рейтинг: 0 / 0
09.09.2003, 13:17
    #32259839
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с BLOB
У визуальных компонентов есть проперть 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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа с BLOB / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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