Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Guardar un Variant en Firebird (https://www.clubdelphi.com/foros/showthread.php?t=74222)

rodrinig 06-06-2011 14:00:25

Guardar un Variant en Firebird
 
Hola Foro: Quería saber como podría guardar un dato Variant en una base firebird, en un campo Blob. El tema que despues tengo que tomarlo para comparar (es un huella dactilar).
Desde Ya muchas Gracias

Rodrigo

Casimiro Notevi 06-06-2011 15:57:12

Haz una búsqueda por "guardar blob" o "guardar imagen", por ejemplo.
Por cierto, esto no tiene nada que ver con "Conexión con bases de datos", lo paso a "Firebird".

rodrinig 06-06-2011 16:35:13

Si casimiro , lo debo haber abierto mal a el Tema. Te paso a explicar, esto es para guardar en una base Firebird, el resultado de una lectura de una huella dactilar. Baje unos ejemplos de Digital Personal ( es para un aparato UareU4500), y la lectura la hace barbaro, y guardar (creo) que tambien. Trabajo en Delphi7

Aca graba la lectura en la base:

Código Delphi [-]
  var
    l_interface : IDispatch;
    outFile : File;
    vrnt : Variant;   //used to store the serialized template
    vt : integer ;
    vtByteBuf : PByteArray;  //Reference to the raw data array in the variant
    aryLow : integer;
    aryHigh : integer;
    rawDataSize: integer;
    loopIndex : integer;
begin
......
 ......
   vrnt:=FPTemplate.Serialize;  //esta funcion me lo transforma a un Variant
              aryLow:=VarArrayLowBound(vrnt,1);
              aryHigh:=varArrayHighBound(vrnt,1);
              aryHigh:=aryHigh-aryLow;
              showmessage(inttostr(aryHigh));
              vtByteBuf:=VarArrayLock(vrnt);  //lock down the array

              for loopIndex := 0 to aryHigh - 1 do
                     fpData[loopIndex]:=vtByteBuf[loopIndex];

              VarArrayUnlock(vrnt);
              MS := TMemoryStream.Create; { creates stream }
              MS.WriteBuffer(fpData, aryHigh); { writes stream }

              if not dm.cds.Active then
                 dm.cds.open;
              dm.cds.Append;
              dm.cdsAA_CODIGO.AsInteger := 0;
              dm.cdsAA_NOMBRE.AsString  := self.Edit1.Text;
              dm.cdsAA_HUELLA.LoadFromStream(MS);
              dm.cds.Post;
              dm.cds.ApplyUpdates(0);

el tema es cuando quiero sacar de la base la huella y pasarla a un Variant asi
comparo las huellas.

Espero que me puedas ayudar, una ver terminado subo todo el codigo al foro

Gracias

Rodrigo

guillotmarc 06-06-2011 21:12:34

Hola.

En principio solo hay que hacer el proceso inverso.

Sobre el campo persistente, en lugar de un LoadFromStream (es decir, recoger en el campo los datos de la variable), tienes que utilizar el SaveToStream (es decir, pasar al Stream los datos del campo para poder guardarlos en la variable).

NOTA : Y de la misma forma, en lugar de leer la variable MS.WriteBuffer(fpData, aryHigh); tendrás que modificarla MS.ReadBuffer (no te olvides de intercambiar el orden del código para guardar los datos, primero tienes que poner los datos del campo en el Stream y después leerlos del Stream para ponerlos en la variable).

Saludos.


La franja horaria es GMT +2. Ahora son las 12:05:08.

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