PDA

Ver la Versión Completa : Guardar OleVariant en Blob de Intarbase


mordaz
06-05-2014, 21:52:31
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:


...
#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 aImage->Picture->Graphic y despues al recuperarla regresarla a su formato original 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:

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:

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 :)