Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Guardar OleVariant en Blob de Intarbase (https://www.clubdelphi.com/foros/showthread.php?t=85797)

mordaz 06-05-2014 21:52:31

Guardar OleVariant en Blob de Intarbase
 
Que tal a todos,

Les comento que necesito guardar el contenido de una variable OleVariant en un campo Blob de una tabla de Interbase. Esta variable OleVariant contiene la información de una huella dactilar capturada con un dispositivo DigitalPersona.

Buscando en los foros encontré una solución de como guardar una Imagen en un campo similar aportado por nuestro amigo Ecfisa. Lo que encontre es lo siguiente:

Código:

...
#include <jpeg.hpp>

// TImage a campo BLOB
void __fastcall ImageToField(TImage *aImage, TField *aField)
{
  if (aImage->Picture->Graphic->ClassNameIs("TJPEGImage")) {
    aField->DataSet->Edit();
    aField->Assign(aImage->Picture->Graphic);
  }
}

// Campo BLOB a TImage
void __fastcall FieldToImage(TField *aField, TImage *aImage)
{
  TJPEGImage *JPG = new TJPEGImage;

  if (aField->ClassNameIs("TBlobField")) {
    JPG->Assign(aField);
    aImage->Picture = NULL;
    aImage->Picture->Assign(JPG);
  }
  delete JPG;
}

Entiendo que la variable debe ser transportada a su formato en bits
Código:

aImage->Picture->Graphic
y despues al recuperarla regresarla a su formato original
Código:

aImage->Picture->Assign(JPG)
¿Alguien tiene alguna idea de como hacer esto para los tipos OleVariant?

mordaz 06-05-2014 23:43:34

Debido a un rayo de luz en mi camino me veo en la necesidad de responderme a mi mismo por si alguien necesita hacerlo después.
Encontré la manera de guardarlo directamente en la base de datos de esta manera:

Para guardar:
Código:

  OleVariant Ovt;
  Muestra.Serialize(Ovt);  //donde obtiene su valor Ovt
  Variant Vrt=reinterpret_cast<Variant&>(Ovt);

  IBTblHuellas->Edit();
  IBTblHuellas->FieldByName("Huella")->AsVariant=Vrt;
  IBTblHuellas->Post();

Para recuperar:
Código:

  OleVariant Ovt;
  IBQryAdmin->SQL->Clear();
  IBQryAdmin->SQL->Add("SELECT Huella FROM SociosHuellas");
  IBQryAdmin->Active=true;
  Ovt=IBQryAdmin->FieldByName("Huella")->AsVariant;

En las pruebas que hice parece funcionar bien, si tienen algún comentario o corrección se los agradecería mucho.

ecfisa 08-05-2014 19:36:54

Hola mordaz.

Aún no he tenido necesidad de trabajar C++/OleVariant, con seguridad me será útil en el futuro.

Muchas gracias por el aporte ^\||/

Saludos :)


La franja horaria es GMT +2. Ahora son las 10:42:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi