A continuacion mostraré la importación de datos de un archivo access que se hace desde un archivo obtenido de un lector biomético del tipo: Face Recognition – ZK VF300. El archivo en access que he usado lo pueden descargar de:
https://drive.google.com/file/d/0B4k3msKW_QERX2N2aEx5V0phUGM/view?usp=sharing
Para entender de manera básica como leer un archivo de access usando OpenRowSet puedes leer mi entrada anterior
En este archivo access, solo se ha dejado 2 tablas: USERINFO y CHECKINOUT, la tabla UserInfo tiene los datos de 5 empleados de prueba, un UserId, el número de DNI, el nombre, el apellido paterno y el apellido materno. y en la tabla CheckInOut se tiene las marcaciones de estos empleados.
En el ejemplo siguiente vamos a crear una tabla que simule la estructura de una tabla que almacenará los datos de personas en nuestro sistema, esta tabla puede almacenar clientes o empleados, por eso se tiene un campo TipoPersona = 'C' o 'P' para clientes o personales respectivamente. A continuación muestro el código necesario para crear dicha tabla y llenar algunos datos.
create table PErsona( IdPersona int identity primary key, ApellidoPaterno varchar(50), ApellidoMaterno varchar(50), Nombres varchar(50), NroDocumento varchar(8), TipoPersona char(1) -- 'P': Personal 'C': Cliente ) insert into Persona values ('DAVALOS', 'ESPARZA', 'JORGE', '16647308', 'P') insert into Persona values ('MANTILLA', 'ZAPATA', 'LUCIANA', '16681509', 'P') insert into Persona values ('ESTRADA', 'QUISPE', 'JUAN PEDRO', '15853147', 'P') insert into Persona values ('GUTIERREZ', 'SANTILLANA', 'DAVID', '16632730', 'P') insert into Persona values ('FLORES', 'SANTOS', 'ANA LUISA', '20115634', 'P')A continuación, leeremos el archivo att2000.mdb y luego haremos una correspondencia para obtener el IdPersona de la tabla Persona en nuestro sistema que le corresponde a cada uno de los trabajadores del registro del biométrico. El campo en común es el NroDocumento en nuestro sistema y el campo BadgeNumber de la tabla USERINFO.
SELECT U.USERID, U.BadgeNumber, U.Name, P.IdPersona FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'E:\MI BLOG\Importacion ACCESS\att2000.mdb'; 'admin'; '', USERINFO) AS U INNER JOIN PERSONA P ON U.BadgeNumber = P.NroDocumento
A continuación muestro el código de un procedimiento almacenado que muestra en parte como podríamos leer un archivo de access, cuya ruta es pasada como parámetro, a fin de usar una tabla temporal para llenar los datos del biométrico, desde la última marcación.
create procedure spr_ireImportarDatosDetectorBiometrico @RutaArchivoImportar varchar(4000)=null AS SET NOCOUNT ON; DECLARE @sql nvarchar(MAX)='' DECLARE @UltimaMarcacionImportada datetime = null -- --> obtener la ultima marcacion de su tabla asistencias IF @UltimaMarcacionImportada is null set @UltimaMarcacionImportada = convert(datetime, '01/01/2000',103) CREATE TABLE #tablaImportada ( Id int identity, NroDNI varchar(8), Nombre varchar(300), IdPersona int, FechaHoraMarcacion datetime, CHECKTYPE char(1) ) SET @sql = ' INSERT INTO #tablaImportada (NroDNI, Nombre, IdPersona, FechaHoraMarcacion, CHECKTYPE) SELECT U.BadgeNumber, U.Name, P.IdPersona, CHECKTIME, CHECKTYPE FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''' + @RutaArchivoImportar + '''; ''admin''; '''', CHECKINOUT) AS I INNER JOIN OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''' + @RutaArchivoImportar + '''; ''admin''; '''', USERINFO) as U on I.UserId = U.UserId '+ ' INNER JOIN Persona P on (U.BadgeNumber = P.NroDocumento and P.TipoPersona = ''P'') WHERE CHECKTIME > convert(datetime, ''' + convert(varchar, @UltimaMarcacionImportada) + ''',103) ' + ' ORDER BY CHECKTIME ASC ' EXEC sp_executesql @sql --Print @sql select * from #tablaImportada SET NOCOUNT ON; GO
Hasta aquí lo que devuelve el procedimiento almacenado es la tabla temporal con las marcaciones importadas vinculadas al IdPersona que se necesita en el sistema, luego se tendría que completar para llenar las marcaciones a una tabla Asistencia, útil en el módulo de Recursos Humanos.
Para ejecutar el procedimiento almacenado hay que usar la siguiente instrucción:
-- -- exec spr_ireImportarDatosDetectorBiometrico 'E:\MI BLOG\Importacion ACCESS\att2000.mdb'
0 comentarios: