Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Как вставить Picture


Автор: Flenger 16.1.2007, 14:57
Доброе время суток!!!!!

Как в базу данных Paradox вставлять графические файлы *BMP? 
Там для поля(Field) нада выбрать тип(Type)  Graphic(G), но как вставить туда изображение…? 



Автор: Anikmar 16.1.2007, 15:07
Удобнее всего пожалуй через TMemoryStream.

Для варианта ADO + SQL я делаю так:
Код

//---------------------------------------------------------------------------
// SetGraphicField
// Помогает сохранить в BLOB поле картинку
// pQ - Запрос
// pPic - Картинка
// pFieldName - Имя поля
// Поле IsPicturePresent должно быть правильно установлено
bool TMAN_ADOVrec::SetGraphicField(
    TADOQuery * pQ,
    Jpeg::TJPEGImage * pPic,
    AnsiString pFieldName)
{
    bool Ret = true;
    TBlobField *pBf = NULL;
    TMemoryStream *pMS = NULL;

    pBf = (TBlobField*)pQ->FieldByName(pFieldName);

    if (!IsPicturePresent)
    {
        pBf->Clear();
        goto ExitProc;
    }

    try
    {

        pMS = new TMemoryStream;
        pPic->SaveToStream(pMS);
        pMS->Position = 0;
        pBf->LoadFromStream(pMS);
    }
    catch(...)
    {
        Ret = false;
    }

ExitProc:

    if (pMS != NULL) delete pMS;

    return Ret;
}



Это кусок моего класса, там используются служебные поля, но общая логика вполне ясна

Автор: Flenger 16.1.2007, 18:11
Anikmar Cенкс!!!!

Автор: Flenger 17.1.2007, 02:13
Ну я вот делаю таки макаром:

Код


void __fastcall TForm1::DBGrid1EditButtonClick(TObject *Sender)
{
Graphics::TBitmap * Bitmap = new Graphics::TBitmap;
if(DBGrid1->SelectedField == Table1Foto)

OpenDialog1->Execute();

Bitmap->LoadFromFile(OpenDialog1->FileName);
Table1->Edit();
TBlobStream *BS = new TBlobStream(((TBlobField*)(Table1->FieldByName("Foto"))),bmRead);
Bitmap->SaveToStream(BS);
Table1->Post();
Bitmap->Free();


}



Компилируется всё нормально а вот при загрузке файла выдаёт
BLOB not opened

Что я нетак зделал

Автор: Anikmar 17.1.2007, 09:36
Мне кажется, что ошибка в режиме открытия потока. Чтобы быть уверенным - поставь режим открытия ReadWrite.

Автор: Flenger 18.1.2007, 14:10
Просто надо было изменить bmRead на bmWrite...

Огромное спасибо Anikmar!!!!!

Автор: Anikmar 18.1.2007, 20:09
Да не вопрос  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)