• Lunes 29 de Abril de 2024, 23:08

Autor Tema:  Cargar Imagen A Bd Firebird  (Leído 2414 veces)

vivamotos

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Cargar Imagen A Bd Firebird
« en: Jueves 29 de Mayo de 2008, 16:11 »
0
Saludos,
Quisiera cargar una imagen de un TImage a una base de datos firebird y volver a llamarla cuando quiera, me podeís decir como se hace?


100000 grácias.

rtmex

  • Nuevo Miembro
  • *
  • Mensajes: 5
  • Nacionalidad: mx
    • Ver Perfil
Re: Cargar Imagen A Bd Firebird
« Respuesta #1 en: Viernes 9 de Enero de 2009, 00:13 »
0
Debes poner los campos persistentes en el dataset.
Para seleccionar el archivo de imagen que vas a guardar, puedes hacerlo por medio de un control OpenDialog.
En el siguiente ejemplo utilizo archivos JPG (necesitas hacer el include de jpeg.hpp)

El código que iria en el evento OnClick del botón que el usuario pulsaría para seleccionar el archvio seria algo asi (El objeto TImage se llama ima_empleado):

if (opndlg_archfoto->Execute())  
    ima_empleado->Picture->LoadFromFile(opndlg_archfoto->FileName);
   
Para grabar en la tabla de FireBird (Aqui estoy usando un TIBDataSet que se llama IBDS_perobra, y el nombre del campo persistente en donde se guarda la foto es FOTO_EMPLEADO)

IBDS_perobraFOTO_EMPLEADO->LoadFromFile(opndlg_archfoto->FileName);

Para recuperar la imagen de la tabla de FireBird :

if (IBDS_perobra->FieldByName("foto_empleado")->IsNull)
     ima_empleado->Picture->Graphic = NULL;
 else
     {
      TIBBlobStream *BS = new TIBBlobStream;
      BS->Mode=bmWrite;
      BS->LoadFromStream(IBDS_perobra->CreateBlobStream(IBDS_perobraFOTO_EMPLEADO , bmRead));
      std::auto_ptr<TJPEGImage> Graphic(new TJPEGImage);
      Graphic->LoadFromStream(IBDS_perobra->CreateBlobStream(IBDS_perobraFOTO_EMPLEADO, bmRead));
      ima_empleado->Picture->Graphic = Graphic.get();
      delete BS;
     }

Y eso es todo :)