一个朋友的考勤机数据读取问题(50分)

F

fwcy

Unregistered / Unconfirmed
GUEST, unregistred user!
我的考勤原始数据是从考勤机中读取,
字段为CARDID(IC卡号)、DDATA(日期)、DTIME(打卡时间)。
请问如何将原始数据插入到考勤表中,考勤表为CARDID(IC卡号)、
INTIME1(上班一)、OUTTIME1(下班一)、INTIME2(上班二)、OUTTIME2(下班二)、
INTIME3(加班上)、OUTTIME3(加班下)。请各位老大指教,非常感谢!!!
其中我的班制资料已经设定好,上午上班:08:30 ,上午下班:12:45 ,
下午上班:13:45,下午下班:17:30, 晚上加班:18:30 ,晚上下班:20:30。
如何将读取的原始考勤数据正确的插入到考勤表中?
注:可能有乱打卡的人,上班取最后一次打卡为准,
下班以第一次打卡为准,请帮助我解决,非常感谢!!!
 
你用的是哪种考勤机?
 
TO:LIDANE
1. 不知道,总之读取的数据为CARDID(IC卡号)、DDATA(日期)、DTIME(打卡时间)。
2. 和考勤机有关吗?
 
大麻烦!
 
我做过一个,是从指纹考勤机里提取的,和你的差不多
 
这是一个朋友问的!具体的考勤机我不太清楚!
 
如果你能读出数据,怎么会插不进表?

也许你数据根本就没有读出来?

到底是那种?
 
我看你现在的问题不是从考勤机读出数据的问题
因为考勤机一般自带接口,可以直接读出得到一个
文本文件,(或者有相应的动态库),所以现在的你
问题是如何把实际的时间和班制的时间匹配,对吧
如果是这样,就可能没有人能帮你,因为一个考勤
的核心部门就在这里
 
是否为TXT;

联系我: hellozxj@etang.com

我给你方法
 
TO:xiaojun2000
能否给小弟一份,小弟在此谢了,小弟的电邮是hy-lony@163.net
 
procedure TF_KQGL.N1Click(Sender: TObject);
var
myfile:textfile;
cardid:string[2];
date_Y:string[4];
date_M:string[2];
date_D:string[2];
date_T:string[4];
check_char:string[1];
end_char:string[1];
begin
SetCurrentDir('D:/PERSON');
if Not fileexists('aq.txt') then
begin
Application.MessageBox('沒有發現D:/PERSON/aq.txt文件,分析無法進行下去','程序提示',mb_iconstop+mb_ok);
exit;
end
else
if MessageDlg('是否想把Aq.txt作一個備份,否則分析完后將被刪除?',mtConfirmation,[mbYes,mbNo],0)=mrYes then exit;
with Q_sbdata do
begin
close;
sql.Clear;
sql.add('select * from empdata where teamsid is null');//檢測是否還有人沒有排班
open;
end;
if Q_sbdata.RecordCount<>0 then
begin
Application.MessageBox('還有沒有排班的員工,先排班!','程序提示',mb_iconstop+mb_ok);
exit;
end;

//screen.Cursor:=crAppStart;
//shellexecute(handle, 'open', 'Photoshp.exe','null', 'E:/Adobe Photoshop5.0/photo/Photoshop 5.0', SW_MINIMIZE);
//screen.Cursor:=crDefault;
//showmessage('讀取數據結束,下面將數據轉入數據庫!');
//exit;
DM.T_data.open;//提前打開此表
if MessageDlg('將分析已經讀取的考勤機原始數據?',mtConfirmation,[mbok,mbcancel],0)=idcancel then exit;
//記錄處理的起始時間
starttime:=timetostr(now);

F_state:=TF_state.Create(self);
F_state.Label1.Caption:='正在讀原始數據并轉換格式放入數據庫...';
F_state.Show;
F_state.Update;
try
Readcarddate:=datetostr(Filedatetodatetime(FileAge('D:/PERSON/AQ.txt')));
Assignfile(myfile,'D:/PERSON/AQ.txt');
Reset(myfile);
except
Application.MessageBox('沒有發現或無法打開原始數據文件AQ.TXT!','程序提示',mb_iconstop+mb_OK);
F_state.Hide;
F_state.Free;
exit;
end;
try
while not eof(myfile) do
try
//控制狀態條
if i>100 then i:=0;
i:=i+1;
if (i mod 3=0) then
F_state.ProgressBar1.Position:=i;
begin
readln(myfile,machine_num,card_num,date_Y,date_M,date_D,date_T,check_char,end_char);
dm.T_data.Append;
dm.T_data.FieldByName('machine_num').asstring:=machine_num;
dm.T_data.FieldByName('card_num').asstring:=card_num;
dm.T_data.FieldByName('date_YMD').asstring:=date_Y+'/'+date_M+'/'+date_D;
dm.T_data.FieldByName('date_T').asstring:=date_T;
dm.T_data.FieldByName('check_char').asstring:=check_char;
dm.T_data.FieldByName('end_char').asstring:=end_char;
DM.T_data.Post;
end;
except
Application.MessageBox('注意以下的提示...','錯誤提示',MB_ICONSTOP+MB_OK);
Showmessage('數據讀入轉換到kq_data表中時失敗,可能考勤機沒有成功讀入數據!'+#10#13+'請再試一次,如果不行,與管理員聯系。');
F_state.Hide;
F_state.Free;
exit;
end;
F_state.Label1.Caption:='正將轉好格式的數據放入數據庫!';
F_state.ProgressBar1.Position:=90;
F_state.Update;
dm.T_data.ApplyUpdates;// 提交緩沖中的數據
finally
DM.T_data.Close;
closefile(myfile);//關閉aq.txt
end;
詳細的處理過程你可以把源代碼發過來,我幫你改,說是說不清楚的,因為也不知道你怎麼處理,
最好把你想處理數據的思路發給我,我幫你想辦法!hpj168@hotmail.com
你必須用班次和卡號來對應員工處理考勤數據,要不然你不知道怎麼處理!如果你感興趣,我
有一個人事考勤系統,你可以學習一下,是很久以前編的了.
 
TO:KINGSON
这个不是我的问题,是一位朋友的问题!你的代码我知你在原码空间下载的,
应该不是你写的!我叫我提问的朋友与你联络!
 
有没有像这样的一种考勤机:
这边打卡,然后立即可以收到打卡人的卡号,时间。
(一般的考勤机都要经过数据采集,把打卡人的卡号,时间写入到一个文本文件。)
 
你指的是在线考勤的吧!

我这目前用的就是这种模式,员工可以当时看见一天的考勤状况!
 
先要排班,然后再用程序判断这笔数据是上班还是下班,有一些可能是无用的数据。
 
我有源碼
 
接受答案了.
 
顶部