|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9098 Localização: Sinop-MT
|
Enviada: Qui Ago 20, 2015 9:49 am Assunto: |
|
|
up _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
Voltar ao Topo |
|
|
jjmalka Aprendiz
Registrado: Domingo, 16 de Julho de 2006 Mensagens: 157
|
Enviada: Sex Ago 21, 2015 4:16 pm Assunto: |
|
|
joemil escreveu: | ressuscitando o topico.
estou fazendo um novo sistema de biometria pra um cliente (o anterior nem usava mais hehehe)
a leitura ja ta funcionando normalmente, mas agora preciso q varios computadores facam a leitura, entao preciso criar algo do tipo Client/server. alg tem um link, exemplo, dica???
e tb vou precisar de algum equipamento q possa fazer a leitura biometrica de forma movel. alg conhec algum equipamento wi-fi com leitura? |
Joemil, na empresa que trabalho temos um cliente/servidor/banco. A necessidade de 3 camadas foi justamente devido a quantidade de computadores acessando ao banco e organizar as pesquisas feitas no mesmo.
O que posso dizer como dica é que vc deve fazer um servidor e criar ou usar um componente que lista as solicitações para ordenar a pesquisa e inclusões, isto facilitara o trabalho e fará com que vc obtenha maior velocidade. |
|
Voltar ao Topo |
|
|
Strago Novato
Registrado: Sexta-Feira, 4 de Setembro de 2015 Mensagens: 2
|
Enviada: Sex Set 04, 2015 3:11 pm Assunto: |
|
|
Vamos em partes ...
Primeiro, sobre o código do inicio do topico.
Eu uso algo parecido, só que com threads para usar o recurso da nitgen de só ler quando detectar um dedo (que aumenta a vida util do equipamento).
uso um timer só para limpar os dados retornados pelo servidor e o handle da digital que é exibida na captura.
Segundo, sobre cadastramento (Enroll)
Sobre Nitgen, as telas padrão de cadastramento só podem ser alteradas, assim como o idioma (padrão ingles) se você desenvolver uma dll de recursos. A documentação para desenvolver essa dll pode ser solicitada a nitgen (não sei quanto a custos).
O que pode ser feito é um bypass da rotina, ao invez de usar o metodo Enroll (que chama os formlarios padrao da nitgen), você deve montar suas telas e usar os metodos de leitura passiva (INVISIBLE WINDOW), da muito trabalho e você teria que fazer o tratamento, por exemplo, o metodo enroll já fornece 10 dedos, e permite que você adicione os 10 em um único FIR, já no modelo braçal, você teria que capturar dedo a dedo e ir adicionando ao FIR, depois teria que fazer uma tela so para testar se a digital foi registrada.
Terceiro, com relação a limites de digitais da nitgen.
A principio ela não tem limites quanto a quantidade de digitais armazenadas, porém, no modelo IndexSearch, ela só garante velocidade até 5000 digitais. (Lembre que 1 dedo registrado possui 2 samples da digital, portanto usa 2 digitais do limite de 5000).
Ja no modelo NSearch, não há impacto na velocidade acima de 5000 digitais, porém é necessário aquisição de licenças, por padrao ele vem com uma licença para operar até 1000 digitais.
Em ambos os casos, você deve varrer o DB com um loop para alimentar o IndexSearch ou o NSearch.
Com relação a integração de outros fabricantes, como suprema, voce deve ter o SDK da suprema e usa-lo, fazer a seleção na aplicação, se o usuario tem uma leitora nitgen usa as rotinas q voce gerou para nitgen, se ele tem suprema, usa as rotinas da suprema, o problema é que os FIR gerados não são compativeis. portanto o uso deve ser uma ou outra nunca ambas.
Para resolver o problema voce devera adquirir um SDK que tenha suporte a vários fabricantes como o Fingerprint 2009 da Griaule, mas além do custo do SDK ser proibitivo, ele ainda tem questões de royalties (por quantidade de digitais).
Quarto, multiplos terminais de cadastramento/verificação
Para uso de vários terminais de cadastramento, não é obrigatório usar modelo n-tier, mas você deve ter uma aplicação servidora para que ela concentre as digitais e faça as verificações/identificações, os clientes irão somente gerar os FIRs para cadastro e/ou verificação, enviar ao servidor e aguardar a resposta. |
|
Voltar ao Topo |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9098 Localização: Sinop-MT
|
Enviada: Sex Set 04, 2015 3:22 pm Assunto: |
|
|
eu resolvi aqui assim:
Código: | 1. cadastro o cliente e a digital no banco de dados (nao uso Enroll)
2. qdo preciso verificar
2.1 metodo 1 - portaria
a. localizo o cliente
b. limpo todas as firs da memoria
c. carrego a fir do cliente (somente a dele)
d. verifico usando as funcoes do sdk
e. registro no BD q essa pessoa deu entrada no local
2.2 metodo 2 - atendimento interno
a. carrego todas fir das pessoas q deram entrada no local (geralmente sao 300/400 por vez)
b. verifico a digital entre as pessoas q estao carregadas usando as funcoes do sdk |
basicamente é assim, dessa forma nao preciso carregar todas as firs de todos clientes todas as vezes _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
Voltar ao Topo |
|
|
KleberAlmeida Novato
Registrado: Quinta-Feira, 17 de Setembro de 2009 Mensagens: 21
|
Enviada: Seg Abr 18, 2016 3:17 pm Assunto: Re: Biometria. |
|
|
heliorios escreveu: | Apos duas semanas em função deste programa de biometria, hoje do nada consegui que funcionasse completamente como eu desejava.
E o que tive que mudar foram somente o local da criação de algumas variavel e objetos, mas eu não conseguia enxergar.
Abaixo o programa para que todos que venham necessitar trabalhar com biometria, não passem o sufoco que passei.
Código: | unit UBiometria;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Comobj, DBClient, DB, StdCtrls, EditNew, Buttons, ComCtrls, Grids,
DBGrids, Mask;
type
TFBiometria = class(TForm)
BtnCapturar: TBitBtn;
BtnIdentificacao: TBitBtn;
TextUserID: TEditN;
Label12: TLabel;
MedCpfFunc: TMaskEdit;
SpbCpf: TSpeedButton;
EdtNome: TEditN;
Label2: TLabel;
BtnNovo: TBitBtn;
DBGrid1: TDBGrid;
procedure BtnIdentificacaoClick(Sender: TObject);
procedure BtnCapturarClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SpbCpfClick(Sender: TObject);
procedure MedCpfFuncEnter(Sender: TObject);
procedure MedCpfFuncExit(Sender: TObject);
procedure MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
procedure MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BtnNovoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure busca_Digital;
end;
const
NBioAPIERROR_NONE = 0;
NBioAPI_FIR_PURPOSE_VERIFY = 1;
NBioAPI_DEVICE_ID_NONE = 0;
NBioAPI_DEVICE_ID_FDP02_0 = 1;
NBioAPI_DEVICE_ID_FDU01_0 = 2;
NBioAPI_DEVICE_ID_AUTO_DETECT = 255;
var
FBiometria: TFBiometria;
objNBioBSP : variant;
objDevice : variant;
objExtraction : variant;
objIndexSearch : variant;
implementation
{$R *.dfm}
uses UProc, UDm, USispo;
procedure TFBiometria.BtnCapturarClick(Sender: TObject); // captura do aparelho a digital.
var nUserID : integer;
szFir : wideString;
begin
if Trim(MedCpfFunc.Text)='' then
Begin
Showmessage('Informe CPF funcionário');
MedCpfFunc.SetFocus;
exit;
End;
nUserID := 0;
if TextUserID.Text <> '' then // codigo do funcionario (ID)
begin
nUserID := StrToInt(TextUserID.Text);
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> 0 Then
Begin
ShowMessage('Falha na abertura do aparelho biometrico !');
close;
exit;
End;
objExtraction.Enroll(nUserID, 0); // ler impressão digital
if objExtraction.ErrorCode <> NBioAPIERROR_NONE Then
Begin
ShowMessage('Erro de leitura !');
close;
exit;
End;
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT); // fecha aparelho biometrico
szFir := objExtraction.TextEncodeFIR; // captura string gerada pela DLL
objIndexSearch.AddFIR(szFir, nUserID);
if (objIndexSearch.ErrorCode = NBioAPIERROR_NONE) Then // salva string no banco de dados se não tiver erro.
begin
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Update bfuncionario');
Dm.SQLFuncionario.SQL.Add(' Set FuDigital='+QuotedStr(szFir)); // mysql FuDigital tipo Text
Dm.SQLFuncionario.SQL.Add(' where (FuCPF='+QuotedStr(trim(MedCpfFunc.Text))+')');
Dm.SQLFuncionario.ExecSQL;
end
else
ShowMessage('Falha na extração da digital !');
end
else
ShowMessage('Informar usuario');
end;
procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject); // identifica usuario pela digital.
var szFir : wideString;
str : wideString;
User_id : Integer;
ListItem : TListItem ;
begin
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> NBioAPIERROR_NONE then
begin
str := objDevice.ErrorDescription;
ShowMessage('Falha no aparelho biométrico !');
Exit;
end;
objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY); // captura digital
if objExtraction.ErrorCode = NBioAPIERROR_NONE then
begin
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
szFir := objExtraction.TextEncodeFIR; // busca string da digital
objIndexSearch.IdentifyUser(szFir, 5); // identifica digital com o da memoria com nivel 5 de segurança
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
ShowMessage('Funcionario não identificado !')
else
Begin
User_id := objIndexSearch.UserID; // pega o ID
showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
Dm.SQLFuncionario.Close; // busca o funcionario pela ID informada.
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
showmessage('Funcionario não localizado pelo codigo fornecido')
else
Begin
MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
End;
End;
end
else
ShowMessage('Falha na extração da biometria !');
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;
procedure TFBiometria.BtnNovoClick(Sender: TObject);
var i:integer;
begin
ActiveControl:=nil; // forca saida com on exit dos edit's
for i := 0 to ComponentCount -1 do
if Components[i] is TEdit then
begin
TEdit(Components[i]).Text := '';
end;
MedCpffunc.Enabled:=true;
MedCpffunc.Text:=''; MedCpffunc.EditMask:='';
Busca_Digital;
MedCpfFunc.SetFocus;
end;
procedure TFBiometria.busca_Digital;
var nUserID : integer;
szFir : wideString;
begin
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
begin
ShowMessage('Falha ao iniciar sistema de biometria!');
end
else
Begin
Caption := Caption + ' - Versão : v' + objNBioBSP.MajorVersion + '.' + objNBioBSP.MinorVersion;
objIndexSearch.ClearDB;
Dm.SQLFuncionario.Close; // inicia banco de dados
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.Open;
Dm.SQLFuncionario.First;
while not(Dm.SQLFuncionario.Eof) do
begin
if Dm.SQLFuncionario.FieldByName('FuDigital').AsString<>'' then
Begin
nUserID:=Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger;
szFir:=Dm.SQLFuncionario.FieldByName('FuDigital').AsString;
objIndexSearch.AddFIR(szFir,nUserID); // coloca na memoria as strings armazenadas no BD.
if objIndexSearch.ErrorCode <> NBioAPIError_None then
Showmessage('Erro ao ler dados');
End;
Dm.SQLFuncionario.Next;
end;
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.SQL.Clear;
End;
end;
procedure TFBiometria.FormClose(Sender: TObject; var Action: TCloseAction);
begin
objNBioBSP := 0;
objDevice := 0;
objExtraction := 0;
objIndexSearch := 0;
end;
procedure TFBiometria.FormCreate(Sender: TObject);
begin
//Create NBioBSP object
objNBioBSP := CreateOleObject('NBioBSPCOM.NBioBSP'); // uses Comobj
objDevice := objNBioBSP.Device;
objExtraction := objNBioBSP.Extraction;
objIndexSearch := objNBioBSP.IndexSearch;
TextUserID.Text := '1';
end;
procedure TFBiometria.FormShow(Sender: TObject);
begin
BtnNovo.Click;
end;
procedure TFBiometria.MedCpfFuncEnter(Sender: TObject);
begin
MedCPFFunc.EditMask:='';
end;
procedure TFBiometria.MedCpfFuncExit(Sender: TObject);
begin
If trim(MedCPFFunc.Text)<>'' then
Begin
MedCpfFunc.Enabled:=false;
If length(trim(MedCPFFunc.Text))=11 then
MedCpfFunc.EditMask:='000.000.000-00;0;'
else
Begin
If length(trim(MedCPFFunc.Text))=14 then
MedCpfFunc.EditMask:='00.000.000/0000-00;0;';
end;
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where FuCpf=:FuCpf');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('FuCpf').AsString:=MedCpfFunc.Text;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
Begin
showmessage('Funcionario não localizado');
MedCpfFunc.SetFocus;
exit;
End;
EdtNome.Text:=Dm.SQLFuncionario.fieldbyname('FuNome').AsString;
TextUserID.Text:=inttostr(Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger);
End
else
EdtNome.Text:='';
end;
procedure TFBiometria.MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then Perform(Wm_NextDlgCtl,0,0);
end;
procedure TFBiometria.MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
begin
// aceitar somente numeros de 0 a 9.
If Key<>#8 then
If not ((Key in ['0'..'9'])) then Key:=#0;
end;
procedure TFBiometria.MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If key=113 then // f2 pesquisa
SpbCpf.Click;
end;
procedure TFBiometria.SpbCpfClick(Sender: TObject);
begin
MedCpfFunc.EditMask:='';
MedCpfFunc.SetFocus;
F2Pesquisa(FBiometria,nil,3);
If trim(MedCpfFunc.Text)<>'' then
Begin
EdtNome.SetFocus;
end;
end;
end. |
Aparelho biometrico Fingkey Hamster da Nitgen.
Obrigado a todos e espero que ajude. |
Olá
Amigos, estou tentando usar esse código. Eu consigo capturar e salvar no banco..
Mas quando eu tento identificar, ele não acha o ID.. Não consegue achar o registro na base de dados..
procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject); // identifica usuario pela digital.
var szFir : wideString;
str : wideString;
User_id : Integer;
ListItem : TListItem ;
begin
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> NBioAPIERROR_NONE then
begin
str := objDevice.ErrorDescription;
ShowMessage('Falha no aparelho biométrico !');
Exit;
end;
objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY); // captura digital
if objExtraction.ErrorCode = NBioAPIERROR_NONE then
begin
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
szFir := objExtraction.TextEncodeFIR; // busca string da digital
objIndexSearch.IdentifyUser(szFir, 5); // identifica digital com o da memoria com nivel 5 de segurança
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
ShowMessage('Funcionario não identificado !')
else
Begin
User_id := objIndexSearch.UserID; // pega o ID
showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
Dm.SQLFuncionario.Close; // busca o funcionario pela ID informada.
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
showmessage('Funcionario não localizado pelo codigo fornecido')
else
Begin
MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
End;
End;
end
else
ShowMessage('Falha na extração da biometria !');
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;
Me ajude por favor.. |
|
Voltar ao Topo |
|
|
robertoalcaras Novato
Registrado: Domingo, 13 de Dezembro de 2015 Mensagens: 54
|
Enviada: Sex Jan 20, 2017 3:53 pm Assunto: Re: Biometria. |
|
|
Consegui resolver seu problema com biometria
KleberAlmeida escreveu: | heliorios escreveu: | Apos duas semanas em função deste programa de biometria, hoje do nada consegui que funcionasse completamente como eu desejava.
E o que tive que mudar foram somente o local da criação de algumas variavel e objetos, mas eu não conseguia enxergar.
Abaixo o programa para que todos que venham necessitar trabalhar com biometria, não passem o sufoco que passei.
Código: | unit UBiometria;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Comobj, DBClient, DB, StdCtrls, EditNew, Buttons, ComCtrls, Grids,
DBGrids, Mask;
type
TFBiometria = class(TForm)
BtnCapturar: TBitBtn;
BtnIdentificacao: TBitBtn;
TextUserID: TEditN;
Label12: TLabel;
MedCpfFunc: TMaskEdit;
SpbCpf: TSpeedButton;
EdtNome: TEditN;
Label2: TLabel;
BtnNovo: TBitBtn;
DBGrid1: TDBGrid;
procedure BtnIdentificacaoClick(Sender: TObject);
procedure BtnCapturarClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SpbCpfClick(Sender: TObject);
procedure MedCpfFuncEnter(Sender: TObject);
procedure MedCpfFuncExit(Sender: TObject);
procedure MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
procedure MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BtnNovoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure busca_Digital;
end;
const
NBioAPIERROR_NONE = 0;
NBioAPI_FIR_PURPOSE_VERIFY = 1;
NBioAPI_DEVICE_ID_NONE = 0;
NBioAPI_DEVICE_ID_FDP02_0 = 1;
NBioAPI_DEVICE_ID_FDU01_0 = 2;
NBioAPI_DEVICE_ID_AUTO_DETECT = 255;
var
FBiometria: TFBiometria;
objNBioBSP : variant;
objDevice : variant;
objExtraction : variant;
objIndexSearch : variant;
implementation
{$R *.dfm}
uses UProc, UDm, USispo;
procedure TFBiometria.BtnCapturarClick(Sender: TObject); // captura do aparelho a digital.
var nUserID : integer;
szFir : wideString;
begin
if Trim(MedCpfFunc.Text)='' then
Begin
Showmessage('Informe CPF funcionário');
MedCpfFunc.SetFocus;
exit;
End;
nUserID := 0;
if TextUserID.Text <> '' then // codigo do funcionario (ID)
begin
nUserID := StrToInt(TextUserID.Text);
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> 0 Then
Begin
ShowMessage('Falha na abertura do aparelho biometrico !');
close;
exit;
End;
objExtraction.Enroll(nUserID, 0); // ler impressão digital
if objExtraction.ErrorCode <> NBioAPIERROR_NONE Then
Begin
ShowMessage('Erro de leitura !');
close;
exit;
End;
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT); // fecha aparelho biometrico
szFir := objExtraction.TextEncodeFIR; // captura string gerada pela DLL
objIndexSearch.AddFIR(szFir, nUserID);
if (objIndexSearch.ErrorCode = NBioAPIERROR_NONE) Then // salva string no banco de dados se não tiver erro.
begin
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Update bfuncionario');
Dm.SQLFuncionario.SQL.Add(' Set FuDigital='+QuotedStr(szFir)); // mysql FuDigital tipo Text
Dm.SQLFuncionario.SQL.Add(' where (FuCPF='+QuotedStr(trim(MedCpfFunc.Text))+')');
Dm.SQLFuncionario.ExecSQL;
end
else
ShowMessage('Falha na extração da digital !');
end
else
ShowMessage('Informar usuario');
end;
procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject); // identifica usuario pela digital.
var szFir : wideString;
str : wideString;
User_id : Integer;
ListItem : TListItem ;
begin
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> NBioAPIERROR_NONE then
begin
str := objDevice.ErrorDescription;
ShowMessage('Falha no aparelho biométrico !');
Exit;
end;
objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY); // captura digital
if objExtraction.ErrorCode = NBioAPIERROR_NONE then
begin
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
szFir := objExtraction.TextEncodeFIR; // busca string da digital
objIndexSearch.IdentifyUser(szFir, 5); // identifica digital com o da memoria com nivel 5 de segurança
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
ShowMessage('Funcionario não identificado !')
else
Begin
User_id := objIndexSearch.UserID; // pega o ID
showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
Dm.SQLFuncionario.Close; // busca o funcionario pela ID informada.
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
showmessage('Funcionario não localizado pelo codigo fornecido')
else
Begin
MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
End;
End;
end
else
ShowMessage('Falha na extração da biometria !');
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;
procedure TFBiometria.BtnNovoClick(Sender: TObject);
var i:integer;
begin
ActiveControl:=nil; // forca saida com on exit dos edit's
for i := 0 to ComponentCount -1 do
if Components[i] is TEdit then
begin
TEdit(Components[i]).Text := '';
end;
MedCpffunc.Enabled:=true;
MedCpffunc.Text:=''; MedCpffunc.EditMask:='';
Busca_Digital;
MedCpfFunc.SetFocus;
end;
procedure TFBiometria.busca_Digital;
var nUserID : integer;
szFir : wideString;
begin
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
begin
ShowMessage('Falha ao iniciar sistema de biometria!');
end
else
Begin
Caption := Caption + ' - Versão : v' + objNBioBSP.MajorVersion + '.' + objNBioBSP.MinorVersion;
objIndexSearch.ClearDB;
Dm.SQLFuncionario.Close; // inicia banco de dados
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.Open;
Dm.SQLFuncionario.First;
while not(Dm.SQLFuncionario.Eof) do
begin
if Dm.SQLFuncionario.FieldByName('FuDigital').AsString<>'' then
Begin
nUserID:=Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger;
szFir:=Dm.SQLFuncionario.FieldByName('FuDigital').AsString;
objIndexSearch.AddFIR(szFir,nUserID); // coloca na memoria as strings armazenadas no BD.
if objIndexSearch.ErrorCode <> NBioAPIError_None then
Showmessage('Erro ao ler dados');
End;
Dm.SQLFuncionario.Next;
end;
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.SQL.Clear;
End;
end;
procedure TFBiometria.FormClose(Sender: TObject; var Action: TCloseAction);
begin
objNBioBSP := 0;
objDevice := 0;
objExtraction := 0;
objIndexSearch := 0;
end;
procedure TFBiometria.FormCreate(Sender: TObject);
begin
//Create NBioBSP object
objNBioBSP := CreateOleObject('NBioBSPCOM.NBioBSP'); // uses Comobj
objDevice := objNBioBSP.Device;
objExtraction := objNBioBSP.Extraction;
objIndexSearch := objNBioBSP.IndexSearch;
TextUserID.Text := '1';
end;
procedure TFBiometria.FormShow(Sender: TObject);
begin
BtnNovo.Click;
end;
procedure TFBiometria.MedCpfFuncEnter(Sender: TObject);
begin
MedCPFFunc.EditMask:='';
end;
procedure TFBiometria.MedCpfFuncExit(Sender: TObject);
begin
If trim(MedCPFFunc.Text)<>'' then
Begin
MedCpfFunc.Enabled:=false;
If length(trim(MedCPFFunc.Text))=11 then
MedCpfFunc.EditMask:='000.000.000-00;0;'
else
Begin
If length(trim(MedCPFFunc.Text))=14 then
MedCpfFunc.EditMask:='00.000.000/0000-00;0;';
end;
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where FuCpf=:FuCpf');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('FuCpf').AsString:=MedCpfFunc.Text;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
Begin
showmessage('Funcionario não localizado');
MedCpfFunc.SetFocus;
exit;
End;
EdtNome.Text:=Dm.SQLFuncionario.fieldbyname('FuNome').AsString;
TextUserID.Text:=inttostr(Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger);
End
else
EdtNome.Text:='';
end;
procedure TFBiometria.MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then Perform(Wm_NextDlgCtl,0,0);
end;
procedure TFBiometria.MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
begin
// aceitar somente numeros de 0 a 9.
If Key<>#8 then
If not ((Key in ['0'..'9'])) then Key:=#0;
end;
procedure TFBiometria.MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If key=113 then // f2 pesquisa
SpbCpf.Click;
end;
procedure TFBiometria.SpbCpfClick(Sender: TObject);
begin
MedCpfFunc.EditMask:='';
MedCpfFunc.SetFocus;
F2Pesquisa(FBiometria,nil,3);
If trim(MedCpfFunc.Text)<>'' then
Begin
EdtNome.SetFocus;
end;
end;
end. |
Aparelho biometrico Fingkey Hamster da Nitgen.
Obrigado a todos e espero que ajude. |
Olá
Amigos, estou tentando usar esse código. Eu consigo capturar e salvar no banco..
Mas quando eu tento identificar, ele não acha o ID.. Não consegue achar o registro na base de dados..
procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject); // identifica usuario pela digital.
var szFir : wideString;
str : wideString;
User_id : Integer;
ListItem : TListItem ;
begin
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> NBioAPIERROR_NONE then
begin
str := objDevice.ErrorDescription;
ShowMessage('Falha no aparelho biométrico !');
Exit;
end;
objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY); // captura digital
if objExtraction.ErrorCode = NBioAPIERROR_NONE then
begin
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
szFir := objExtraction.TextEncodeFIR; // busca string da digital
objIndexSearch.IdentifyUser(szFir, 5); // identifica digital com o da memoria com nivel 5 de segurança
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
ShowMessage('Funcionario não identificado !')
else
Begin
User_id := objIndexSearch.UserID; // pega o ID
showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
Dm.SQLFuncionario.Close; // busca o funcionario pela ID informada.
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
showmessage('Funcionario não localizado pelo codigo fornecido')
else
Begin
MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
End;
End;
end
else
ShowMessage('Falha na extração da biometria !');
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;
Me ajude por favor.. |
|
|
Voltar ao Topo |
|
|
KleberAlmeida Novato
Registrado: Quinta-Feira, 17 de Setembro de 2009 Mensagens: 21
|
Enviada: Sex Ago 25, 2017 12:52 pm Assunto: Re: Biometria. |
|
|
robertoalcaras escreveu: | Consegui resolver seu problema com biometria
KleberAlmeida escreveu: | heliorios escreveu: | Apos duas semanas em função deste programa de biometria, hoje do nada consegui que funcionasse completamente como eu desejava.
E o que tive que mudar foram somente o local da criação de algumas variavel e objetos, mas eu não conseguia enxergar.
Abaixo o programa para que todos que venham necessitar trabalhar com biometria, não passem o sufoco que passei.
Código: | unit UBiometria;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Comobj, DBClient, DB, StdCtrls, EditNew, Buttons, ComCtrls, Grids,
DBGrids, Mask;
type
TFBiometria = class(TForm)
BtnCapturar: TBitBtn;
BtnIdentificacao: TBitBtn;
TextUserID: TEditN;
Label12: TLabel;
MedCpfFunc: TMaskEdit;
SpbCpf: TSpeedButton;
EdtNome: TEditN;
Label2: TLabel;
BtnNovo: TBitBtn;
DBGrid1: TDBGrid;
procedure BtnIdentificacaoClick(Sender: TObject);
procedure BtnCapturarClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SpbCpfClick(Sender: TObject);
procedure MedCpfFuncEnter(Sender: TObject);
procedure MedCpfFuncExit(Sender: TObject);
procedure MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
procedure MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BtnNovoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure busca_Digital;
end;
const
NBioAPIERROR_NONE = 0;
NBioAPI_FIR_PURPOSE_VERIFY = 1;
NBioAPI_DEVICE_ID_NONE = 0;
NBioAPI_DEVICE_ID_FDP02_0 = 1;
NBioAPI_DEVICE_ID_FDU01_0 = 2;
NBioAPI_DEVICE_ID_AUTO_DETECT = 255;
var
FBiometria: TFBiometria;
objNBioBSP : variant;
objDevice : variant;
objExtraction : variant;
objIndexSearch : variant;
implementation
{$R *.dfm}
uses UProc, UDm, USispo;
procedure TFBiometria.BtnCapturarClick(Sender: TObject); // captura do aparelho a digital.
var nUserID : integer;
szFir : wideString;
begin
if Trim(MedCpfFunc.Text)='' then
Begin
Showmessage('Informe CPF funcionário');
MedCpfFunc.SetFocus;
exit;
End;
nUserID := 0;
if TextUserID.Text <> '' then // codigo do funcionario (ID)
begin
nUserID := StrToInt(TextUserID.Text);
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> 0 Then
Begin
ShowMessage('Falha na abertura do aparelho biometrico !');
close;
exit;
End;
objExtraction.Enroll(nUserID, 0); // ler impressão digital
if objExtraction.ErrorCode <> NBioAPIERROR_NONE Then
Begin
ShowMessage('Erro de leitura !');
close;
exit;
End;
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT); // fecha aparelho biometrico
szFir := objExtraction.TextEncodeFIR; // captura string gerada pela DLL
objIndexSearch.AddFIR(szFir, nUserID);
if (objIndexSearch.ErrorCode = NBioAPIERROR_NONE) Then // salva string no banco de dados se não tiver erro.
begin
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Update bfuncionario');
Dm.SQLFuncionario.SQL.Add(' Set FuDigital='+QuotedStr(szFir)); // mysql FuDigital tipo Text
Dm.SQLFuncionario.SQL.Add(' where (FuCPF='+QuotedStr(trim(MedCpfFunc.Text))+')');
Dm.SQLFuncionario.ExecSQL;
end
else
ShowMessage('Falha na extração da digital !');
end
else
ShowMessage('Informar usuario');
end;
procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject); // identifica usuario pela digital.
var szFir : wideString;
str : wideString;
User_id : Integer;
ListItem : TListItem ;
begin
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> NBioAPIERROR_NONE then
begin
str := objDevice.ErrorDescription;
ShowMessage('Falha no aparelho biométrico !');
Exit;
end;
objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY); // captura digital
if objExtraction.ErrorCode = NBioAPIERROR_NONE then
begin
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
szFir := objExtraction.TextEncodeFIR; // busca string da digital
objIndexSearch.IdentifyUser(szFir, 5); // identifica digital com o da memoria com nivel 5 de segurança
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
ShowMessage('Funcionario não identificado !')
else
Begin
User_id := objIndexSearch.UserID; // pega o ID
showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
Dm.SQLFuncionario.Close; // busca o funcionario pela ID informada.
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
showmessage('Funcionario não localizado pelo codigo fornecido')
else
Begin
MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
End;
End;
end
else
ShowMessage('Falha na extração da biometria !');
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;
procedure TFBiometria.BtnNovoClick(Sender: TObject);
var i:integer;
begin
ActiveControl:=nil; // forca saida com on exit dos edit's
for i := 0 to ComponentCount -1 do
if Components[i] is TEdit then
begin
TEdit(Components[i]).Text := '';
end;
MedCpffunc.Enabled:=true;
MedCpffunc.Text:=''; MedCpffunc.EditMask:='';
Busca_Digital;
MedCpfFunc.SetFocus;
end;
procedure TFBiometria.busca_Digital;
var nUserID : integer;
szFir : wideString;
begin
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
begin
ShowMessage('Falha ao iniciar sistema de biometria!');
end
else
Begin
Caption := Caption + ' - Versão : v' + objNBioBSP.MajorVersion + '.' + objNBioBSP.MinorVersion;
objIndexSearch.ClearDB;
Dm.SQLFuncionario.Close; // inicia banco de dados
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.Open;
Dm.SQLFuncionario.First;
while not(Dm.SQLFuncionario.Eof) do
begin
if Dm.SQLFuncionario.FieldByName('FuDigital').AsString<>'' then
Begin
nUserID:=Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger;
szFir:=Dm.SQLFuncionario.FieldByName('FuDigital').AsString;
objIndexSearch.AddFIR(szFir,nUserID); // coloca na memoria as strings armazenadas no BD.
if objIndexSearch.ErrorCode <> NBioAPIError_None then
Showmessage('Erro ao ler dados');
End;
Dm.SQLFuncionario.Next;
end;
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.SQL.Clear;
End;
end;
procedure TFBiometria.FormClose(Sender: TObject; var Action: TCloseAction);
begin
objNBioBSP := 0;
objDevice := 0;
objExtraction := 0;
objIndexSearch := 0;
end;
procedure TFBiometria.FormCreate(Sender: TObject);
begin
//Create NBioBSP object
objNBioBSP := CreateOleObject('NBioBSPCOM.NBioBSP'); // uses Comobj
objDevice := objNBioBSP.Device;
objExtraction := objNBioBSP.Extraction;
objIndexSearch := objNBioBSP.IndexSearch;
TextUserID.Text := '1';
end;
procedure TFBiometria.FormShow(Sender: TObject);
begin
BtnNovo.Click;
end;
procedure TFBiometria.MedCpfFuncEnter(Sender: TObject);
begin
MedCPFFunc.EditMask:='';
end;
procedure TFBiometria.MedCpfFuncExit(Sender: TObject);
begin
If trim(MedCPFFunc.Text)<>'' then
Begin
MedCpfFunc.Enabled:=false;
If length(trim(MedCPFFunc.Text))=11 then
MedCpfFunc.EditMask:='000.000.000-00;0;'
else
Begin
If length(trim(MedCPFFunc.Text))=14 then
MedCpfFunc.EditMask:='00.000.000/0000-00;0;';
end;
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where FuCpf=:FuCpf');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('FuCpf').AsString:=MedCpfFunc.Text;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
Begin
showmessage('Funcionario não localizado');
MedCpfFunc.SetFocus;
exit;
End;
EdtNome.Text:=Dm.SQLFuncionario.fieldbyname('FuNome').AsString;
TextUserID.Text:=inttostr(Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger);
End
else
EdtNome.Text:='';
end;
procedure TFBiometria.MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then Perform(Wm_NextDlgCtl,0,0);
end;
procedure TFBiometria.MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
begin
// aceitar somente numeros de 0 a 9.
If Key<>#8 then
If not ((Key in ['0'..'9'])) then Key:=#0;
end;
procedure TFBiometria.MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If key=113 then // f2 pesquisa
SpbCpf.Click;
end;
procedure TFBiometria.SpbCpfClick(Sender: TObject);
begin
MedCpfFunc.EditMask:='';
MedCpfFunc.SetFocus;
F2Pesquisa(FBiometria,nil,3);
If trim(MedCpfFunc.Text)<>'' then
Begin
EdtNome.SetFocus;
end;
end;
end. |
Aparelho biometrico Fingkey Hamster da Nitgen.
Obrigado a todos e espero que ajude. |
Olá
Amigos, estou tentando usar esse código. Eu consigo capturar e salvar no banco..
Mas quando eu tento identificar, ele não acha o ID.. Não consegue achar o registro na base de dados..
procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject); // identifica usuario pela digital.
var szFir : wideString;
str : wideString;
User_id : Integer;
ListItem : TListItem ;
begin
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> NBioAPIERROR_NONE then
begin
str := objDevice.ErrorDescription;
ShowMessage('Falha no aparelho biométrico !');
Exit;
end;
objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY); // captura digital
if objExtraction.ErrorCode = NBioAPIERROR_NONE then
begin
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
szFir := objExtraction.TextEncodeFIR; // busca string da digital
objIndexSearch.IdentifyUser(szFir, 5); // identifica digital com o da memoria com nivel 5 de segurança
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
ShowMessage('Funcionario não identificado !')
else
Begin
User_id := objIndexSearch.UserID; // pega o ID
showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
Dm.SQLFuncionario.Close; // busca o funcionario pela ID informada.
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
showmessage('Funcionario não localizado pelo codigo fornecido')
else
Begin
MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
End;
End;
end
else
ShowMessage('Falha na extração da biometria !');
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;
Me ajude por favor.. |
|
Consegui... Obrigado a todos |
|
Voltar ao Topo |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9098 Localização: Sinop-MT
|
Enviada: Qua Jul 04, 2018 10:43 am Assunto: |
|
|
ola pessoal, ressuscitando o topico.
to tendo problemas pra fazer a leitura em alguns modelos.
aqui na empresa tenho o Hamster DX (HFDU06), funciona perfeito.
mas qdo instala no cliente q tem HFDU14 ou HFDU04 (ou outro modelo) nao funciona corretamente.
alg tem alguma solucao pra esse problema? _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
Voltar ao Topo |
|
|
rafaelmgobo Novato
Registrado: Sexta-Feira, 19 de Julho de 2013 Mensagens: 63
|
Enviada: Ter Ago 13, 2019 10:36 am Assunto: |
|
|
joemil escreveu: | ola pessoal, ressuscitando o topico.
to tendo problemas pra fazer a leitura em alguns modelos.
aqui na empresa tenho o Hamster DX (HFDU06), funciona perfeito.
mas qdo instala no cliente q tem HFDU14 ou HFDU04 (ou outro modelo) nao funciona corretamente.
alg tem alguma solucao pra esse problema? |
Estou tentando utilizar o SDK 2014, porém tive problemas com incompatibilidade e não consegui executar o demo.
Alguém tem alguma solução? _________________ Delphi XE4 + Oracle. |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|