Foros del Web » Programación para mayores de 30 ;) » .NET »

Consulta base de datos con lector de huella

Estas en el tema de Consulta base de datos con lector de huella en el foro de .NET en Foros del Web. Hola a todos tengo un lector de huella Uare U digital persona 4500. Logre hacer que funcione correctamente el detalle es que mi bd cuenta ...
  #1 (permalink)  
Antiguo 06/03/2013, 10:28
Avatar de Melecio  
Fecha de Ingreso: julio-2011
Ubicación: Coahuila
Mensajes: 320
Antigüedad: 12 años, 9 meses
Puntos: 8
Consulta base de datos con lector de huella

Hola a todos

tengo un lector de huella Uare U digital persona 4500.

Logre hacer que funcione correctamente el detalle es que mi bd cuenta con 300 registros y al tratar de buscar de uno por uno se tarda mas de 3 segundos en identificarme la huella

Codigo
Public a(1632) As Byte
Public huella(9999) As String
Public NOMBRE(9999) As String
Public NUMERO_OPERADOR(9999) As String

Public ARREGLO As Integer

Public strsqlmsql As String
Public mysqlconn As New MySqlConnection
Public mysqlcmd As New MySqlCommand
Public mysqldr As MySqlDataReader
Public mysqlda As New MySqlDataAdapter



EN FORM LOAD

Private Sub VerificationForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
mysqlconn.ConnectionString = "server=localost; user id=root; password =; database = finger;"

Try
mysqlconn.Open()
strsqlmsql = " SELECT DISTINCT finger1,num_operador,nombre FROM general_empleados WHERE estatus ='ALTA' ORDER BY id_operador DESC "
mysqlcmd.CommandText = strsqlmsql
mysqlcmd.Connection = mysqlconn
mysqlda.SelectCommand = mysqlcmd
mysqldr = mysqlcmd.ExecuteReader
While (mysqldr.Read())
huella(ARREGLO) = mysqldr("finger1")
NUMERO_OPERADOR(ARREGLO) = mysqldr("num_operador")
NOMBRE(ARREGLO) = mysqldr("nombre")

ARREGLO += 1

End While
mysqlcmd.Dispose()
mysqldr.Close()
mysqlconn.Close()
Catch ex As Exception
End Try

mysqlconn.Close()
End Sub







VERIFICACION DE HUELLA






Sub OnComplete(ByVal Control As Object, ByVal FeatureSet As DPFP.FeatureSet, ByRef EventHandlerStatus As DPFP.Gui.EventHandlerStatus) Handles VerificationControl.OnComplete
Dim ver As New DPFP.Verification.Verification()
Dim res As New DPFP.Verification.Verification.Result()
Dim temp = New DPFP.Template()





Dim i As Integer
For i = 0 To ARREGLO

Try
a = Convert.FromBase64String(huella(Str(i)))
temp.DeSerialize(a)
ver.Verify(FeatureSet, temp, res)

Data.IsFeatureSetMatched = res.Verified
Data.FalseAcceptRate = res.FARAchieved


If res.Verified Then
EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Success
LBL_HORA.ForeColor = Color.Green
LBL_DIA.ForeColor = Color.Green
LBL_NOMBRE_PERSONAL.ForeColor = Color.Green
IMAGEN_FOTO.BackColor = Color.Green


IMAGEN_PERSONAL.ImageLocation = "C:\FOTOGRAFIAS\" & NUMERO_OPERADOR(i) & ".jpg"
LBL_NOMBRE_PERSONAL.Text = i
CONTEO.Enabled = True
GoTo SALIDA


End If
If Not res.Verified Then EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Failure

Data.Update()




Catch ex As Exception

End Try



Next












SALIDA:







End Sub


Este es mi codigo

no se como hacer para aguilizar la busqueda

Gracias.
  #2 (permalink)  
Antiguo 06/03/2013, 10:56
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Consulta base de datos con lector de huella

Entiendo que obtienes todos los empleados y luego con todos los datos compruebas huella por huella.

Como la verificación se hace mediante una función que te provee la DLL del lector (DPFP.Verification), creo que no vas a poder evitar traer todos los datos. Lo que si haría sería optimizar por una lado la consulta y por otro el código de comprovación:

1) Para optimizar la consulta, no ordenes y uses Distinct. Son operaciones que consumen mucho tiempo al gestor de base de datos y por lo tanto tarda más en devolverte los resultados.

2) En el "FOR" que recorres el arreglo tienes un try/catch. Esto es muy lento y penaliza muchisimo. Ya haces bien en tener el try/catch pero yo lo pondría fuera del FOR. Es decir, el bucle dentro de lo que sería el TRY.


Yo son las cosas que veo que penalizan más a tu código. Luego quizás se puedan pulir detallitos pero "lo gordo" está en esos dos puntos.

Ya nos dirás si mejora :)
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 06/03/2013, 14:05
Avatar de Melecio  
Fecha de Ingreso: julio-2011
Ubicación: Coahuila
Mensajes: 320
Antigüedad: 12 años, 9 meses
Puntos: 8
Respuesta: Consulta base de datos con lector de huella

muchas gracias por tu aporte

yo utilizo el ciclo for para hacer el conteo desde el 0 hasta el numero total de registros encontrados que almaceno en la variable huella(arreglos) el try lo utilizo para que no me salga un error al colocar el dedo en el lector este error me da aunque le ponga la huella correcta.


lo que hize para que ya no se alentara tanto fue hacer 2 busquedas en la bd separando el total de registros en 2 busquedas


los 2 arreglos buscan la huella de uno por uno y el primero en encontrarlo me lleva a SALIDA: para terminar las 2 busquedas y darme los datos correctos.

pero la forma es hacerlo lo mas profecional que se pueda.


con este codigo se ma aguilizo un poco tansiquiera ya no me congela el programa,





Public huella(9999) As String
Public NOMBRE(9999) As String
Public NUMERO_OPERADOR(9999) As String
Public ARREGLO As Integer


Public huella_A(9999) As String
Public NOMBRE_A(9999) As String
Public NUMERO_OPERADOR_A(9999) As String

Public ARREGLO_A As Integer









Dim EXISTE As Integer
EXISTE = 0


Dim i As Integer
For i = 0 To ARREGLO
Try
a = Convert.FromBase64String(huella(Str(i)))
temp.DeSerialize(a)
ver.Verify(FeatureSet, temp, res)
Data.IsFeatureSetMatched = res.Verified
Data.FalseAcceptRate = res.FARAchieved
If res.Verified Then
EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Success
LBL_HORA.ForeColor = Color.Green
LBL_DIA.ForeColor = Color.Green
LBL_NOMBRE_PERSONAL.ForeColor = Color.Green
IMAGEN_FOTO.BackColor = Color.Green

IMAGEN_PERSONAL.ImageLocation = "C:\FOTOGRAFIAS\" & NUMERO_OPERADOR(i) & ".jpg"
LBL_NOMBRE_PERSONAL.Text = NOMBRE(i)

CONTEO.Interval = 1200
CONTEO.Enabled = True


EXISTE = 1
GoTo SALIDA

End If
If Not res.Verified Then EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Failure
Data.Update()
Catch ex As Exception

End Try

Next



Dim F As Integer
For F = 0 To ARREGLO_A
Try
a = Convert.FromBase64String(huella_A(Str(F)))
temp.DeSerialize(a)
ver.Verify(FeatureSet, temp, res)
Data.IsFeatureSetMatched = res.Verified
Data.FalseAcceptRate = res.FARAchieved
If res.Verified Then
EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Success
LBL_HORA.ForeColor = Color.Green
LBL_DIA.ForeColor = Color.Green
LBL_NOMBRE_PERSONAL.ForeColor = Color.Green
IMAGEN_FOTO.BackColor = Color.Green

IMAGEN_PERSONAL.ImageLocation = "C:\FOTOGRAFIAS\" & NUMERO_OPERADOR_A(F) & ".jpg"
LBL_NOMBRE_PERSONAL.Text = NOMBRE_A(F)
CONTEO.Enabled = True
EXISTE = 1
GoTo SALIDA

End If
If Not res.Verified Then EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Failure
Data.Update()
Catch ex As Exception

End Try



Next


SALIDA:

If EXISTE = 0 Then
LBL_HORA.ForeColor = Color.Red
LBL_DIA.ForeColor = Color.Red
LBL_NOMBRE_PERSONAL.ForeColor = Color.Red
IMAGEN_FOTO.BackColor = Color.Red
CONTEO.Interval = 500
CONTEO.Enabled = True
End If




Gracias.

Etiquetas: lector, server, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:36.