miércoles, 20 de enero de 2016

Importación de archivo de ACCESS en SQL Server - ejemplo leyendo de un archivo de biométrico para importar asistencias

Posted by InfoTacticas Soluciones  |  No comments

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'

1/20/2016 01:17:00 p. m. Share:

0 comentarios:

Get updates in your email box
Complete the form below, and we'll send you the best coupons.

Deliver via FeedBurner
back to top