![]() |
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...:confused: |
Bienvenido.... mira esta función y el resto del contenido....
function VariantBinaryToString(const iVariant:OleVariant):string; |
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);:( |
Cambio de nota....
utiliza la función VarToStr de Unit Variants y lo metes en el blob como texto
|
Olevariant a campo blob
Gracias ardilla, pero tampoco funciona. Me da mismo error "invalid variant type error"..:(
|
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... |
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.
Uso Delphi 6, firebird 1.5 y el sdk del lector |
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; {==============================================================================} |
La franja horaria es GMT +2. Ahora son las 10:20:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi