estou desenvolvendo um sistema de que captura a digital por um leitor
biometrico usando o Griaule Fingerprint SDK 2007.
pensei ter concluido tudo mas percebi que hora ele diz certo de quem é a
digital hora ele da erro hora ele nao acha ninquem.. e do nada ele da acess
violation..
to usando as sequintes rotinas pra cadastrar..

procedure TRafaelFingerPrinter.Matricular;
var
id : string;
i : integer;
tptstream : tmemorystream;
handle : hbitmap;
hdc : longint;
begin
if self.FDataset.Active = false
then showmessage('Tabela onde vai ser quardada as digitais nao esta ativa')
else begin
if ExtractTemplate > 0 then
begin
self.Fdisplay.Picture.Bitmap.FreeImage;
handle := self.Fdisplay.Picture.Bitmap.ReleaseHandle;
DeleteObject(handle);
{$iFOPT R+}
{$DEFINE CKRANGE}
{$R-}
{$ENDIF}
hdc := GetDC(hwnd(nil));
{Finger.BiometricDisplay(template.tpt,
raw.img,
raw.width,
raw.height,
raw.Res,
hdc,
handle,
GR_NO_CONTEXT);}

if handle <> 0 then
begin
self.display.Picture.Bitmap.Handle := handle;
self.display.Repaint;
end;

ReleaseDC(hwnd(nil), hdc);
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+}
{$ENDIF}
end;
//gravando
if (((template.size > 0) and (template.tpt <> nil))) then
begin
self.FDataset.Edit;
tptstream := tmemorystream.create();
tptstream.Write(template.tpt^, template.size);
(self.Dataset.FieldByName(self.campo) as
TBlobField).LoadFromStream(tptstream);
tptstream.free;
end;
end;
end;


e to usando esta rotina para verificar a digital passada depois de capturar.


function TRafaelFingerPrinter.Identificar: boolean;
var
encontrou : string;
tmp : string;
score : integer;
i : integer;
cdc : tclientdataset;
ultimo : string;
begin
encontrou := 'N';
if extracttemplate() >= 0 then
begin
self.Finger.IdentifyPrepare(template.tpt, GR_DEFAULT_CONTEXT);
//abrindo banco de dados
cdc := criaclientdataset('select '+self.Fcampo+', '+self.FCanpo_codigo+#13+
'from '+self.FNomeTabela+#13+
'where not '+self.FCampo+' is null',
self.FConexao,
ultimo,
CTtquery);
cdc.first;
while not cdc.eof do
begin
tmp := cdc.fieldbyname(self.fcampo).asstring;
template.size := length(tmp);
move(pchar(tmp)^, template.tpt^, template.size);
if template.size > 0 then
begin
if self.Finger.Identify(template.tpt,score,GR_DEFAULT_CONTEXT) = gr_match
then
begin
encontrou := 'S';
self.IDObtido := cdc.fieldbyname(self.FCanpo_codigo).asstring;
break;
end;
end;
cdc.next;
end;
cdc.free;
if encontrou = 'N'
then showmessage('Digital não encontrada');
end;
end;

to com pressa de resolver isso e nao to vendo solucao.
o exemplo deles é muito confuso, eu tentei usar firebird no exemplo deles e
deu a mesma coisa so mudei a forma de gravar os dados e verificar, e fica
dando a mesma coisa. nao auterei mas nada no exemplo..

alquem ai ja desenvolveu algo pra isso? pq nao sei mas o que fazer...
o prazo ta vencendo e eu nao sei como solucionar isso..
obrigdao.
t+

-- 
-------------------------------------------------------------------
Rafael jorge alves (Analista/desenvolvedor)

www.sistemafocus.com.br
sistema focus de gestão comercial e serviços em informatica.
-------------------------------------------------------------------


[As partes desta mensagem que não continham texto foram removidas]

Responder a