[RESUELTO] Sobre lector biometrico
#1
Posted 28 February 2011 - 09:15 AM
saludos.
#2
Posted 28 February 2011 - 09:18 AM
#3
Posted 28 February 2011 - 09:26 AM
unicamente dice b3, se puede ver mas info en la paagina: http://usa.zksoftwar...roduct_e_b3.asp
en esta pagina hay un sdk pero es de pago, tambien hay un programa que hace lo que quiero el : Attendance Management , este me extrae la info de la biometrica, lo que quiero es programar algo por mi cuenta...
#4
Posted 28 February 2011 - 09:29 AM
#5
Posted 28 February 2011 - 09:30 AM
#6
Posted 01 March 2011 - 08:59 AM
¿prodra funcionar esta, como podria adaptarla?
saludos.
#7
Posted 01 March 2011 - 09:21 AM
if ZK.ReadAllGLogData(DevId) then while ZK.SSR_GetGeneralLogData(DevId,dwEnrollNumber,dwVerifyMode,dwInOutMode, dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode) do begin ShortDateFormat := 'yyyy/mm/dd'; ShortTimeFormat := 'hh:mm'; TimeSeparator := ':'; DateSeparator := '/'; Fecha := StrToDateTime(IntToStr(dwYear)+'/'+IntToStr(dwMonth)+'/'+IntToStr(dwDay)+' '+IntToStr(dwHour)+':'+IntToStr(dwMinute)); s := format('%.*d',[7,StrToInt(dwEnrollNumber)])+'>'+FormatDateTime('yyyy/mm/dd', Fecha)+':'+FormatDateTime('hh:mm', Fecha) + Char(#13) + Char(#10); Data.Add(s); end;
Aqui Data es un StringList que posteriormente lo grabo en un archivo de texto, el resultado seria del siguiente formato, pero lo puedes cambiar a tu gusto o al formato que trabaja tu sistema:
cod. empleado>yyyy/mm/dd:hh:mm
0003945>2010/11/27:14:13
Cualquier duda pues aqui estoy.
Saludos.
#8
Posted 01 March 2011 - 09:38 AM
gracias amigo, lo probare , luego les comento como me fue.Hola, primeramente debes cargar los datos en memoria usando la funcion ReadAllGLogData y luego obtener los datos a traves de la funcion SSR_GetGeneralLogData (dependiendo si el equipo es un modelo SSR sino usamos la misma funcion sin el prefijo SSR_), un ejemplo seria donde ZK es el componente (normalmente yo lo creo en tiempo de ejecucion):
delphi
if ZK.ReadAllGLogData(DevId) then while ZK.SSR_GetGeneralLogData(DevId,dwEnrollNumber,dwVerifyMode,dwInOutMode, dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode) do begin ShortDateFormat := 'yyyy/mm/dd'; ShortTimeFormat := 'hh:mm'; TimeSeparator := ':'; DateSeparator := '/'; Fecha := StrToDateTime(IntToStr(dwYear)+'/'+IntToStr(dwMonth)+'/'+IntToStr(dwDay)+' '+IntToStr(dwHour)+':'+IntToStr(dwMinute)); s := format('%.*d',[7,StrToInt(dwEnrollNumber)])+'>'+FormatDateTime('yyyy/mm/dd', Fecha)+':'+FormatDateTime('hh:mm', Fecha) + Char(#13) + Char(#10); Data.Add(s); end;
Aqui Data es un StringList que posteriormente lo grabo en un archivo de texto, el resultado seria del siguiente formato, pero lo puedes cambiar a tu gusto o al formato que trabaja tu sistema:
cod. empleado>yyyy/mm/dd:hh:mm
0003945>2010/11/27:14:13
Cualquier duda pues aqui estoy.
Saludos.
#9
Posted 01 March 2011 - 09:45 AM
este es el codigo que tengo... ¿que estoy haciendo mal?
procedure... var dwEnrollNumber, dwMachinePrivilege ,dwVerifyMode,dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode: integer; fecha:TDateTime; s:string; begin if CZKEM1.ReadAllGLogData(devPort) then while CZKEM1.GetGeneralLogData(devPort,dwEnrollNumber,dwVerifyMode,dwInOutMode, dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode) do begin ShortDateFormat := 'mm/dd/yyyy'; ShortTimeFormat := 'hh:mm'; TimeSeparator := ':'; DateSeparator := '/'; Fecha := StrToDateTime(IntToStr(dwYear)+'/'+IntToStr(dwMonth)+'/'+IntToStr(dwDay)+' '+IntToStr(dwHour)+':'+IntToStr(dwMinute)); s := format('%.*d',[7,Inttostr(dwEnrollNumber)])+'>'+FormatDateTime('mm/dd/yyyy', Fecha)+':'+FormatDateTime('hh:mm', Fecha) + Char(#13) + Char(#10); Data.Add(s); end; end;
#10
Posted 01 March 2011 - 09:56 AM
#11
Posted 01 March 2011 - 10:22 AM
var Connect: Boolean; DevID: Integer; procedure conectar(ip: string; puerto: integer; NumMaq: integer); begin Connect := ZK.Connect_Net(ip,puerto); DevID := NumMaq; end; procedure TForm1.btnDownClick(Sender: TObject); begin Conectar(127.0.0.1, 4370, 1); //4370 es el puerto que se utiliza esos equipos if connect then begin if ZK.ReadAllGLogData(DevId) then while ZK.SSR_GetGeneralLogData(DevId,dwEnrollNumber,dwVerifyMode,dwInOutMode, dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode) do begin ShortDateFormat := 'yyyy/mm/dd'; ShortTimeFormat := 'hh:mm'; TimeSeparator := ':'; DateSeparator := '/'; Fecha := StrToDateTime(IntToStr(dwYear)+'/'+IntToStr(dwMonth)+'/'+IntToStr(dwDay)+' '+IntToStr(dwHour)+':'+IntToStr(dwMinute)); s := format('%.*d',[7,StrToInt(dwEnrollNumber)])+'>'+FormatDateTime('yyyy/mm/dd', Fecha)+':'+FormatDateTime('hh:mm', Fecha) + Char(#13) + Char(#10); Data.Add(s); end; end; end;
Saludos.
#12
Posted 01 March 2011 - 10:23 AM
Prueba con esto
format('%.*d',[7,dwEnrollNumber])
Salud OS
Edito, no vi bien el cast que haces, no hagas caso a este post. Sorry
#13
Posted 01 March 2011 - 10:38 AM
Leyendo nuevamente el mensaje, puedes mostrarnos que es lo que tienes en la variable dwEnrollNumber. Debes asegurate que no es nulo o con caracteres no válidos para un entero.
Salud OS
#14
Posted 01 March 2011 - 10:58 AM
hola , para conectarme utilizo el siguiente codigo:Viendo bien el asunto quiero preguntarte lo siguiente: cuando haces la coneccion al equipo la varianle devport es el numero de puerto o el numero de equipo??: la coneccion deberia de hacerse de la siguiente manera:
delphi
var Connect: Boolean; DevID: Integer; procedure conectar(ip: string; puerto: integer; NumMaq: integer); begin Connect := ZK.Connect_Net(ip,puerto); DevID := NumMaq; end; procedure TForm1.btnDownClick(Sender: TObject); begin Conectar(127.0.0.1, 4370, 1); //4370 es el puerto que se utiliza esos equipos if connect then begin if ZK.ReadAllGLogData(DevId) then while ZK.SSR_GetGeneralLogData(DevId,dwEnrollNumber,dwVerifyMode,dwInOutMode, dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode) do begin ShortDateFormat := 'yyyy/mm/dd'; ShortTimeFormat := 'hh:mm'; TimeSeparator := ':'; DateSeparator := '/'; Fecha := StrToDateTime(IntToStr(dwYear)+'/'+IntToStr(dwMonth)+'/'+IntToStr(dwDay)+' '+IntToStr(dwHour)+':'+IntToStr(dwMinute)); s := format('%.*d',[7,StrToInt(dwEnrollNumber)])+'>'+FormatDateTime('yyyy/mm/dd', Fecha)+':'+FormatDateTime('hh:mm', Fecha) + Char(#13) + Char(#10); Data.Add(s); end; end; end;
Saludos.
procedure TRptEntSal.FormCreate(Sender: TObject); var Inifile:TIniFile; begin IniFile:= TIniFile.Create(ExtractFilePath(Application.ExeName)+'Cfg.ini'); devIp := IniFile.readString('PARAMETROS','IP',''); devPort := IniFile.ReadInteger('PARAMETROS','PTO',0); Inifile.Free; CZKEM1.Connect_net(devIp, devPort); end;
#15
Posted 01 March 2011 - 11:10 AM
creo que el problema biene de aqui, valores nulos.Hola
Leyendo nuevamente el mensaje, puedes mostrarnos que es lo que tienes en la variable dwEnrollNumber. Debes asegurate que no es nulo o con caracteres no válidos para un entero.
Salud OS
#16
Posted 01 March 2011 - 11:12 AM
Saludos.
#17
Posted 01 March 2011 - 11:16 AM
pos ya me perdi amigo, lo siento, en que linea tengo que cambiar el dwMachineNumber ?Pues estas haciendo mal la descarga de datos, la variable dwMachineNumber de la funcion le estas asignando el numero de puerto cosa que no deberia de ser, solo asignale 1 como yo le hago.
Saludos.
#18
Posted 01 March 2011 - 11:19 AM
ya entendi, lo que pasa es que me perdi, en el ejemplo que me pasaste aparentemenre se le pasa el puerto
pos ya me perdi amigo, lo siento, en que linea tengo que cambiar el dwMachineNumber ?
Pues estas haciendo mal la descarga de datos, la variable dwMachineNumber de la funcion le estas asignando el numero de puerto cosa que no deberia de ser, solo asignale 1 como yo le hago.
Saludos.
#19
Posted 01 March 2011 - 11:25 AM
procedure TRptEntSal.FormCreate(Sender: TObject); var Inifile:TIniFile; begin IniFile:= TIniFile.Create(ExtractFilePath(Application.ExeName)+'Cfg.ini'); devIp := IniFile.readString('PARAMETROS','IP',''); devPort := IniFile.ReadInteger('PARAMETROS','PTO',0); Inifile.Free; end; procedure TRptEntSal.button1click(Sender: TObject); var dwEnrollNumber, dwMachinePrivilege ,dwVerifyMode,dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode: integer; fecha:TDateTime; s:string; connect: boolean; DevId: integer; //Numero de maquina, siempre asignale 1 begin connect := CZKEM1.Connect_net(devIp, devPort); DevId := 1; if connect then begin //verificamos si se conecto correctamente if CZKEM1.ReadAllGLogData(DevId) then while CZKEM1.GetGeneralLogData(DevId,dwEnrollNumber,dwVerifyMode,dwInOutMode, dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode) do begin ShortDateFormat := 'mm/dd/yyyy'; ShortTimeFormat := 'hh:mm'; TimeSeparator := ':'; DateSeparator := '/'; Fecha := StrToDateTime(IntToStr(dwYear)+'/'+IntToStr(dwMonth)+'/'+IntToStr(dwDay)+' '+IntToStr(dwHour)+':'+IntToStr(dwMinute)); s := format('%.*d',[7,Inttostr(dwEnrollNumber)])+'>'+FormatDateTime('mm/dd/yyyy', Fecha)+':'+FormatDateTime('hh:mm', Fecha) + Char(#13) + Char(#10); Memo.Lines.Add(s); //Coloca un Memo para ver los resultados de la descarga. end; end else ShowMessage('no se pudo conectar al equipo!!'); end;
Hazlo asi, no intentes conectar al equipo en la creacion del formulario, hagalo desde un boton.
Saludos.
#20
Posted 01 March 2011 - 11:37 AM
me ha funcionado muy bien el codigo, ahora bien.... esto te devuelve toda la info del dispositvo,hay alguna manera de establecer un rango entre fechas? o tendre que hacer algun especie de filtro.
delphi
procedure TRptEntSal.FormCreate(Sender: TObject); var Inifile:TIniFile; begin IniFile:= TIniFile.Create(ExtractFilePath(Application.ExeName)+'Cfg.ini'); devIp := IniFile.readString('PARAMETROS','IP',''); devPort := IniFile.ReadInteger('PARAMETROS','PTO',0); Inifile.Free; end; procedure TRptEntSal.button1click(Sender: TObject); var dwEnrollNumber, dwMachinePrivilege ,dwVerifyMode,dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode: integer; fecha:TDateTime; s:string; connect: boolean; DevId: integer; //Numero de maquina, siempre asignale 1 begin connect := CZKEM1.Connect_net(devIp, devPort); DevId := 1; if connect then begin //verificamos si se conecto correctamente if CZKEM1.ReadAllGLogData(DevId) then while CZKEM1.GetGeneralLogData(DevId,dwEnrollNumber,dwVerifyMode,dwInOutMode, dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode) do begin ShortDateFormat := 'mm/dd/yyyy'; ShortTimeFormat := 'hh:mm'; TimeSeparator := ':'; DateSeparator := '/'; Fecha := StrToDateTime(IntToStr(dwYear)+'/'+IntToStr(dwMonth)+'/'+IntToStr(dwDay)+' '+IntToStr(dwHour)+':'+IntToStr(dwMinute)); s := format('%.*d',[7,Inttostr(dwEnrollNumber)])+'>'+FormatDateTime('mm/dd/yyyy', Fecha)+':'+FormatDateTime('hh:mm', Fecha) + Char(#13) + Char(#10); Memo.Lines.Add(s); //Coloca un Memo para ver los resultados de la descarga. end; end else ShowMessage('no se pudo conectar al equipo!!'); end;
Hazlo asi, no intentes conectar al equipo en la creacion del formulario, hagalo desde un boton.
Saludos.