通达OA 同步中控考勤机 增强版

万一您用之是中控考勤机且考勤机能联网,这恭喜有福了!
如今发觉考勤机提供web格局查询,经过调试好为此程序间接读取考勤机数据超越了试勤机软件及其access数据库,数据并及时性、可靠性大幅提高。

 

通达oa2011曾匡助 指纹考勤机 
但只限中控iclock660
这款2000花边的型号,通过本文的出接口,可以跟人身自由同缓慢指纹机集成,
需求指纹机管理软件能实时保存数据;

ACCESS, 

本身这里用的凡 中控u160 指纹考勤机,
这款机援助WIFI
,可以实现实时传输考勤数据,这吗即意味着,用户采集指纹立刻就能够当大团结之OA上寓目自己之考核数据;

 

特别指出的一点凡是这款机器的中控u160WIFI配置
容易出错的是 网线连接的ip网段 设置192.168.3.x,WIFI
ip网段是在192.168.1.x   ,这样才会确保成功, 大多数都是拂在此地

 

事先博文里提到的下PHP同步
ACCESS与mysql数据库的方,有些欠缺由于php是被动执行的步子,大家不得不够定时又执行之道来促成,确实不便民; 

 

来说下新方案:

 

1, 首先大家仍以中控提供的考核软件 ATT2008依然称zktime5.0
,考勤机光盘附带的标准版,一般都出,
这里我们不再行使access而采用MSSQl数据库,安装目录下发出相同文件 mssql.sql
,放在sqlserver集团管理器中推行,就创办好而下的数据库及表了,咱们命名数据库也
Att2008;

 

 2,打开 表checkinout , 添加自增字段 id (这里严重鄙视一下!。。
),修改通达oa数据库 attend_duty 增加 outID字段

 

 3,使用sql集团管理器成立作业任务名吧:update_TDOA ,作业计划拔取每一日,作业步骤 添加以下脚本:

 1 use att2008
 2 declare @num int,
 3         @sqls nvarchar(4000),
 4         @con varchar(200),
 5         @startID int,
 6         @attend_duty varchar(300)
 7 set @startID=0
 8 --需先安装MySQL ODBC 3.51驱动
 9 set @con='OPENROWSET(''MSDASQL'',''DRIVER={MySQL ODBC 3.51 Driver};SERVER=127.0.0.1;PORT=3336;DATABASE=td_oa;USER=root;PASSWORD=myoa888;STMT=set names gb2312;OPTION=2049'','
10 set @attend_duty=@con+'''select * from ATTEND_DUTY;'')'
11 set @sqls='SELECT @a=outid FROM '+@con+'''select outid from attend_duty order by id desc limit 1;'')'
12 exec('delete  '+@con+'''select * from attend_duty'') where register_type=2 and CONVERT(varchar(12) , register_time, 112 )= 
13 (select top 1 CONVERT(varchar(12) ,CHECKTIME, 112 ) from CHECKINOUT order by CHECKTIME desc) 
14 ')
15 exec sp_executesql @sqls,N'@a int output',@startID output 
16 print @startID
17 exec('insert '+@con+'''select * from ATTEND_DUTY'') (outid,USER_ID,REGISTER_TYPE,REGISTER_TIME,REGISTER_IP,type) 
18 SELECT top 500  C.id,case when A.user_id is not null then A.user_id else ''0'' end,

从这之后,你就实现了数量并,但是到此地仍是定时执行,如若你未曾越的要求,到此也得了

一道数据实现每一回调用只更新增量数据,并且自动识别考勤类型写入mysql,天天首先蹩脚也上班登记,最后一涂鸦从卡呢下班数据;

 

4,打开sql查询
添加以下脚本:

 

 1 use att2008
 2 if (object_id('tgr_zk2TDOA_insert', 'tr') is not null)
 3     drop trigger tgr_zk2TDOA_insert
 4 go
 5 
 6 create trigger tgr_zk2TDOA_insert on CHECKINOUT  Instead Of Insert
 7 as    
 8 SET XACT_ABORT ON 
 9 --*************************************************************
10 
11 
12 if exists (select 1 from checkinout where checktime=(select checktime from inserted) )
13    return;
14 
15 insert checkinout(USERID,CHECKTIME,CHECKTYPE,VERIFYCODE,SENSORID,WORKCODE,sn,USEREXTFMT) 
16 select USERID,CHECKTIME,CHECKTYPE,VERIFYCODE,SENSORID,WORKCODE,sn,USEREXTFMT from inserted
17 
18 --执行同步作业
19 declare @JobID uniqueidentifier
20 select @JobID=Job_ID from msdb.dbo.sysjobs where Name='update_TDOA' --查Job_ID
21 EXEC msdb.dbo.sp_start_job @job_id = @JobID
22 
23 --************************************************************
24 go
25 SET XACT_ABORT OFF 
26 print '更新成功!';
27 go

 

此,使用触发器调用上亦然步之作业执行多少并到OA,并且修正了
中控考勤软件之一处bug,你会见发觉每一次点击考勤软件中下载记录会像数据库被补充加任何数据
,比如后面来9000漫漫数,点同样不行成为18000了再也同不善27000条记下了,
太可怕了。。。此处又轻敌以下中控;

此触发器扩充了申明,假使假定长的记录 数据库中曾经来矣,不再上加;

有人会咨询怎么未将共同脚本放在触发器中实践?
这里用链接服务器写副mysql时平昔当触发器中尽
基本未晤面马到成功,需要配置很多事物,还不自然成功,直接调用作业吧;

 

相关文章