Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-02-2007
mdomeyko mdomeyko is offline
Registrado
 
Registrado: sep 2006
Ubicación: Miami, Florida
Posts: 8
Poder: 0
mdomeyko Va por buen camino
OleVariant a campo blob

Estoy trabajando con la captura de huella digital y necesito grabar en un campo blob el resultado de la captura que es una variable Olevariant, pero no se como hacerlo... y despues tengo que hacer la operacion inversa... (blob a Olevariant)
Por favor ayudenme...
Responder Con Cita
  #2  
Antiguo 05-02-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Bienvenido.... mira esta función y el resto del contenido....

function VariantBinaryToString(const iVariant:OleVariant):string;
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #3  
Antiguo 05-02-2007
mdomeyko mdomeyko is offline
Registrado
 
Registrado: sep 2006
Ubicación: Miami, Florida
Posts: 8
Poder: 0
mdomeyko Va por buen camino
Olevariant a blob

Gracias Ardilla, pero no resulto.
1. No encuentro funcion "CheckVariant(iVariant); .. lo puse como comentarios.. no se que chequeo hara...

2. Me dio error "Variant is not an array" al ejecutar funcion..
q_upd.parambyname('huella').asblob := VariantBinaryToString(pTemplate);
Responder Con Cita
  #4  
Antiguo 06-02-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cambio de nota....
utiliza la función VarToStr de Unit Variants y lo metes en el blob como texto

Código Delphi [-]
q_upd.FieldByName('huella').asString := VarToStr(pTemplate);
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO

Última edición por ArdiIIa fecha: 06-02-2007 a las 03:06:06.
Responder Con Cita
  #5  
Antiguo 06-02-2007
mdomeyko mdomeyko is offline
Registrado
 
Registrado: sep 2006
Ubicación: Miami, Florida
Posts: 8
Poder: 0
mdomeyko Va por buen camino
Olevariant a campo blob

Gracias ardilla, pero tampoco funciona. Me da mismo error "invalid variant type error"..
Responder Con Cita
  #6  
Antiguo 06-02-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Pues no se me ocurre nada más.
A lo mejor verificando el contenido de esa variable, que no esté vacía, paso a paso con el depurador...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #7  
Antiguo 07-02-2007
jacanche jacanche is offline
Miembro
 
Registrado: may 2003
Ubicación: Campeche,Campeche,Mexico
Posts: 137
Poder: 21
jacanche Va por buen camino
Que tipo de lector de huella digital usas?, yo tengo un Digital Persona U.are.U 4000, en el evento OnDone del componente que lee la huella le pongo el siguiente codigo.

Código Delphi [-]
procedure TfrmRegistrarHuella.FPRegisterTemplate1Done(Sender: TObject;
  var pTemplate: OleVariant);
var
          l_val : OleVariant;
       l_pArray : PSafeArray;
              i : integer;
       fpBuffer : PByteArray;
       MS    : TMemoryStream;
begin
  pTemplate.Export(l_val);
  l_pArray := PSafeArray(TVarData(l_val).VArray);
  blobSize := l_pArray.rgsabound[0].cElements * l_pArray.cbElements;
  fpBuffer := VarArrayLock(l_val);


  for i := 0 to blobSize - 1 do
           fpData[i] := fpBuffer[i];     //pvData es byte array

  VarArrayUnlock(l_val);
  mode := 0;
  Ms := TMemoryStream.Create;
  Ms.WriteBuffer(fpData,blobsize);
  tblPersonalHUELLA.LoadFromStream(MS); //Aqui guardo la huella en la base de datos
end;

Uso Delphi 6, firebird 1.5 y el sdk del lector
__________________
Saludos

Alfredo
Responder Con Cita
  #8  
Antiguo 08-02-2007
mdomeyko mdomeyko is offline
Registrado
 
Registrado: sep 2006
Ubicación: Miami, Florida
Posts: 8
Poder: 0
mdomeyko Va por buen camino
Biometrics U2U DigitalPersona, D6, Firebird; RESUELTO!

OK, Lo resolvi con ayuda de varios. Graciasa ellos. Como resulto tan dificil, aca va mi experiencia de Registro y Verificacion... Suerte!

Para usuarios UrU DigitalPersona usando D6 & Firebird:

Registro de Huella (FingerPrint)

Procedure TfrmRegisterFingerPrint.FPRegisterTemplate1done(Sender: TObject; var pTemplate: OleVariant);
var l_val : OleVariant;
l_pArray : PSafeArray;
i : integer;
fpBuffer : PByteArray;
MS : TMemoryStream;
begin
pTemplate.Export(l_val);
l_pArray := PSafeArray(TVarData(l_val).VArray);
blobSize := l_pArray.rgsabound[0].cElements * l_pArray.cbElements;
fpBuffer := VarArrayLock(l_val);
for i := 0 to blobSize - 1 do
fpData[i] := fpBuffer[i]; // pvData is byte array
VarArrayUnlock(l_val);
mode := 0;
MS := TMemoryStream.Create; { creates stream }
MS.WriteBuffer(fpData, blobsize); { writes stream }
try
t_users.filtered := false; // TIBTable
t_users.filter := 'userid = ' + inttostr(gUserid); // the useer ID to assign the fingerprint
t_users.filtered := true;
t_usersopen;
t_users.edit;
TBlobField(t_users.fieldbyname('FingerPrint')).LoadFromStream(MS); // gets from stream
t_servers.post;
DMLogOn.IBTransac.commit;
except
DMLogOn.IBTransac.Rollback;
end;
t_users.close;
MS.free;
end;
{==============================================================================}

Verifying Huella (FingerPrint)

Procedure TfrmLogOn.FPGetTemplate1done(Sender: TObject; var pTemplate: OleVariant);
var i : integer; pErr : AIErrors;
begin
i := GetFingerID(pTemplate); // returns UserId
if i <> 0 then begin
bbOKClick(nil); // gets in whatever...
end
else if (gUsesFingerPrint) then begin // indicator that system can use fingerprint system
finger_image.Picture := nil; // cleans fingerprint image
FPGetTemplate1.Run(1,pErr); // runs again if fingerprint not found or until manual input...
end;
end;
{==============================================================================}

Function TfrmLogOn.GetFingerID(pTemplate : OleVariant): Integer;
var m_verifyOk : WordBool;
m_score : OleVariant;
m_security : AISecureModeMask;
m_threshold : OleVariant;
m_learning : WordBool;
m_tUnknown : IUnknown;
c_IVerify : ifPVerify;
c_regTemplate : ifPTemplate;
ST : TMemoryStream;
ExistingTemplate: OleVariant;
iCounter: Integer;
begin
m_learning := False;
m_verifyOk := False;
m_tUnknown := CreateComObject(CLASS_FPVerify);
m_tUnknown.QueryInterface(IID_ifPVerify,c_IVerify);
qrefresh(@q_users); // select userid, fingerprint from users.....
ST := TMemoryStream.Create;
Try
While NOT q_users.EOF do begin
ST.Clear;
TBlobField(q_users.FieldByName('FingerPrint')).SaveToStream(ST); // blob field from DB and store in memory stream
ExistingTemplate := MemoryStreamToOleVariant(ST); // convert to olevariant
m_tUnknown := CreateComObject(CLASS_FPTemplate);
m_tUnknown.QueryInterface(IID_ifPTemplate,c_RegTemplate);
c_regTemplate.Import(ExistingTemplate);
c_IVerify.Compare(c_RegTemplate,
pTemplate,
m_verifyOk,
m_score,
m_threshold,
m_learning,
m_security);
if m_verifyOk Then begin
Result := q_users.FieldByName('userid').AsInteger; // returns user ID
VarClear(ExistingTemplate);
Exit;
end;
VarClear(ExistingTemplate);
c_regTemplate := nil;
q_users.Next; // reads next user
end;
Finally;
ST.Free;
VarClear(pTemplate);
if c_regTemplate <> nil Then
c_regTemplate := nil;
c_IVerify := nil;
end;
end;
{==============================================================================}
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Campo Blob IVAND SQL 4 09-01-2012 11:57:45
Campo BLOB Loviedo Oracle 1 05-05-2006 10:36:31
campo blob acertij022 Conexión con bases de datos 1 19-08-2004 00:10:32
OleVariant a blob AngelMarvin Oracle 0 27-07-2004 23:28:59


La franja horaria es GMT +2. Ahora son las 18:03:39.


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
Copyright 1996-2007 Club Delphi