Ver Mensaje Individual
  #5  
Antiguo 15-10-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola REVINFOR.
Cita:
Empezado por REVINFOR Ver Mensaje
2) Registro de asistencia, para que el usuario registre la asistencia, el lector de huella captura los datos en un array de bytes y se procede a comparar con las huellas que se tienen guardadas en formato de cadena, solo que para que se puedan comparar ambos datos, cada cadena la tengo que convertir en un array de bytes.
Código Delphi [-]
with TUsuarios do
begin
  encontrado := false;
  close;
  open;

  while not eof do
  begin
    if Comparar(bAsistencia, TUsuariosTemplate.asString) then
    begin
      showmessage('Encuentro exitoso');
      encontrado := true;
      break;
    end;      
    next;
  end;

  if not encontrado then
    showmessage('Error: Usuario no encontrado');
end;
Como te comenté anteriormente y también te señala mamcx, creo innecesario la reconversión a array of Byte. Una vez obtenida la lectura lo conviertes a cadena y comparas contra la tabla.

Por otro lado la búsqueda secuencial es lenta, voy a reestructurar mi sugerencia anterior para ver si de ese modo me explico mejor.
Código Delphi [-]
function BytesToString(v: array of byte): string;
const
  DIGHEX = '0123456789ABCDEF';
var
  i: Integer;
begin
  SetLength(Result, Length(v) shl 1);
  for i :=  Low(v) to High(v) do
  begin
    Result[1+2*i]:= DIGHEX[(v[i] shr  4)+1];
    Result[2+2*i]:= DIGHEX[(v[i] and 15)+1];
  end;
end;

// Reemplazo de la búsqueda secuencial
function TForm1.IsUserFound(const Signature: string): Boolean;
begin
  with tuQuery do // tuQuery: (TQuery, TADOQuery, TIBQuery, etc)
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT ID FROM USUARIOS');
    SQL.Add('WHERE SIGNATURE = :PSIGNAT');
    ParamByName('PSIGNAT').AsString:= Signature;
    Open;
    Result := not IsEmpty; // True si devolvió un resultado
  end;
end;

...
var
  Signature: string;
begin
  Signature:= BytesToString(array_of_bytes_devuelto_x_el_lector);
  if IsUserFound(Signature) then
  ...

Saludos

Edito: Me olvidaba..., Para el caso específico de ADO:
Código Delphi [-]
  Parameters.ParamByName('PSIGNAT').Value:= Signature
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-10-2014 a las 18:20:53.
Responder Con Cita