全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2375
推到 Plurk!
推到 Facebook!

有關考勤刷卡機資料轉員工出勤資料

尚未結案
shine5188
一般會員


發表:2
回覆:15
積分:8
註冊:2005-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-24 20:33:42 IP:211.20.xxx.xxx 未訂閱
小弟有個有關考勤刷卡機轉出資料與資料庫中員工班別相對應得到 上下班實際刷卡時間表. 有兩個Table,分別是存放考勤機採集回來的數據Table1,Table2 Table1是存放從考勤機採集回來的數據 Table2是存放每人每天的刷卡記錄(刷六次) Table1有欄位 in_date(日期), in_time(刷卡時間), idno(id卡號), machine_no(機器號) Table2有欄位 in_date(日期),idno(id卡號), time1(時間1), time2(時間2) ,time3(時間3), time4(時間4), time5(時間5), time6(時間6) 請問怎樣放入適當欄位 若此適當欄位已經有刷卡紀錄,則判斷前一欄位有無刷卡紀錄 若前一欄位無刷卡紀錄,則原適當欄位刷卡紀錄往前移,然後放入新紀錄 若前一欄位有刷卡紀錄,則新紀錄往後一欄位放. 請各位前輩告知怎樣實現…我是個初學者.想學習考勤人事系統
way888
初階會員


發表:32
回覆:76
積分:36
註冊:2005-05-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-25 08:53:44 IP:220.136.xxx.xxx 未訂閱
若此適當欄位已經有刷卡紀錄,則判斷前一欄位有無刷卡紀錄 若前一欄位無刷卡紀錄,則原適當欄位刷卡紀錄往前移,然後放入新紀錄 若前一欄位有刷卡紀錄,則新紀錄往後一欄位放. 這好像是我之前發表的..... 其作法就是用if... then... else來做判斷 我是把24小時分成7個時段,每個時段不可重複,例00:00~05:30,05:31~11:00,11:01~12:30,12:31~16:00,16:01~18:00,18:01~21:30,21:30~23:59 可以做多重迴圈判斷來解決,其中00:00~05:30作為換日緩衝時段
shine5188
一般會員


發表:2
回覆:15
積分:8
註冊:2005-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-25 09:02:51 IP:211.20.xxx.xxx 未訂閱
way888 兄 能否給個例子看看. .還有就是怎樣把六筆時間合成一筆出勤記錄的?並要以順序填入相應欄位..
way888
初階會員


發表:32
回覆:76
積分:36
註冊:2005-05-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-25 12:06:59 IP:220.136.xxx.xxx 未訂閱
首先要SQL出日期及卡號(刷卡紀錄筆數不定) 然後放入適當位置,再EDIT或APPAND到資料庫   EditT0.Text:='';   EditT1.Text:='';   EditT2.Text:='';   EditT3.Text:='';   EditT4.Text:='';   EditT5.Text:='';   EditT6.Text:='';    if RecordCount > 0 then begin   k1:=strtoint(FormatDateTime('hhnn',StrToDatetime(FieldByName('EntranceTime').Value)));   t2:=FormatDateTime('hh:nn',StrToDatetime(FieldByName('EntranceTime').Value));   while not Eof do begin   k2:=strtoint(FormatDateTime('hhnn',StrToDatetime(FieldByName('EntranceTime').Value)));   if k2-k1=1 then t1:=t2 //相差1分鐘也算重複,整點換時例外,要另想辦法      else   t1:=FormatDateTime('hh:nn',StrToDatetime(FieldByName('EntranceTime').Value));      t2:=t1;   k1:=k2;   if (t1 > '00:00') and (t1 <= '06:00') then begin     if (EditT0.Text ='') then begin EditT0.Text:=t1;       end  else begin         if CompareText(EditT0.Text,t1)<0 then begin //過濾重複刷卡記錄 EditT1.Text:=t1; end else end; end; if (t1 > '06:00') and (t1 <= '11:00') then begin if (EditT1.Text ='') then begin EditT1.Text:=t1; end else begin if CompareText(EditT1.Text,t1)<0 then begin if (EditT0.Text='') then begin EditT0.Text:=EditT1.Text; EditT1.Text:=t1; end else EditT2.Text:=t1; end else end; end; if (t1 > '11:00') and (t1 <= '12:15') then begin if (EditT2.Text ='') then begin EditT2.Text:=t1; end else begin if CompareText(EditT2.Text,t1)<0 then begin if (EditT1.Text='') then begin EditT1.Text:=EditT2.Text; EditT2.Text:=t1; end else EditT3.Text:=t1; end else if CompareText(EditT2.Text,t1)>0 then begin if (EditT3.Text='') then begin EditT3.Text:=EditT2.Text; EditT2.Text:=t1; end; end; end; end; if (t1 > '12:15') and (t1 <= '16:30') then begin if (EditT3.Text ='') then begin EditT3.Text:=t1; end else begin if CompareText(EditT3.Text,t1)<0 then begin if (EditT2.Text='') then begin EditT2.Text:=EditT3.Text; EditT3.Text:=t1; end else EditT4.Text:=t1; end else end; end; if (t1 > '16:30') and (t1 <= '19:00') then begin if (EditT4.Text ='') then begin EditT4.Text:=t1; end else begin if CompareText(EditT4.Text,t1)<0 then begin if (EditT3.Text='') then begin EditT3.Text:=EditT4.Text; EditT4.Text:=t1; end else EditT5.Text:=t1; end else end; end; if (t1 > '19:00') and (t1 <= '22:00') then begin if (EditT5.Text ='') then begin EditT5.Text:=t1; end else begin if CompareText(EditT5.Text,t1)<0 then begin if (EditT4.Text='') then begin EditT4.Text:=EditT5.Text; EditT5.Text:=t1; end else EditT6.Text:=t1; end else end; end; if (t1 > '22:00') and (t1 <= '24:00') then begin if (EditT6.Text ='') then begin EditT6.Text:=t1; end else begin if CompareText(EditT6.Text,t1)<0 then begin if (EditT5.Text='') then begin EditT5.Text:=EditT6.Text; EditT6.Text:=t1; end else if (EditT4.Text='') then begin EditT4.Text:=EditT5.Text; EditT5.Text:=EditT6.Text; EditT6.Text:=t1; end; end else end; end; Next; end; 發表人 - way888 於 2005/08/25 12:14:49
shine5188
一般會員


發表:2
回覆:15
積分:8
註冊:2005-05-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-27 08:05:31 IP:211.20.xxx.xxx 未訂閱
way888 兄.感謝你.大體思路已了解. 但是有一個問題SQL出日期及卡號(當有幾天的資料和多張id卡的時候要怎樣處理)
way888
初階會員


發表:32
回覆:76
積分:36
註冊:2005-05-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-29 22:09:11 IP:220.136.xxx.xxx 未訂閱
這是我用的方法,參考看看,我的資料庫是SQL2000 mdf,卡鐘資料庫是ACESS mdb procedure TForm3.mdbBtnClick(Sender: TObject);//此Btn設為隱藏,FormCreat時就執行>mdbBtn.Click var days :TDateTime;     tm,t1,t2 :string;     i,k1,k2 :integer; begin   with memDataSet do begin//此資料表紀錄資料庫最後日期,作為程式開始就自動執行加入        close;        commandtext:='select * from setMemery';        open;        if manul=1 then days:=DateOf(DateTimePicker1.Date)//手動加入到自己的資料庫                   else days:=FieldByName('entrancecardMem').Value;        end;      with dutyDataSet do begin//自己的出勤資料庫        close;        commandtext:='select EntranceCardNo, DutyDate, DutyTime0, DutyTime1, DutyTime2, DutyTime3, '+                     'DutyTime4, DutyTime5, DutyTime6 from DutyTime '+                     ' WHERE DutyDate between '''+FormatDateTime('yyyy/mm/dd',DateTimePicker1.Date)+''' '+                     'AND '''+FormatDateTime('yyyy/mm/dd',DateTimePicker2.Date)+''' ';        open;        end;       with empDataSet do begin //到員工資料庫取出卡號(未離職的)         close;         commandtext:='select EntranceCardNo from employee where LeaveJobCheck=0 AND EntranceCardNo<>'''' ';         open;         first;         end; while days <= DateOf(DateTimePicker2.Date) do begin//此為日期迴圈 while not empDataSet.Eof do begin//此為卡號迴圈 with mdbDataSet do begin//到卡鐘資料庫抓資料,之前功力不夠無法自00:00~24:00排序,所以12:00還得判斷一次,請自行想辦法      Close;      commandtext:='select * from EntranceRecords where EntranceCardNo = '''+empDataSet.FieldByName('EntranceCardNo').Value+''' AND '+                   'EntranceMachineNo=05 AND EntranceDate ='+'#'+DateToStr(days)+'#'+'order by EntranceTime';      Open;//會有上下午,所以排序不是很理想,改成00:00~24:00排序則12:00可以不用判斷,且整點換時可以好判斷,我是業餘自己用,所以不想改它   EditT0.Text:='';   EditT1.Text:='';   EditT2.Text:='';   EditT3.Text:='';   EditT4.Text:='';   EditT5.Text:='';   EditT6.Text:='';    if RecordCount > 0 then begin   k1:=strtoint(FormatDateTime('hhnn',StrToDatetime(FieldByName('EntranceTime').Value)));   t2:=FormatDateTime('hh:nn',StrToDatetime(FieldByName('EntranceTime').Value));   while not Eof do begin   k2:=strtoint(FormatDateTime('hhnn',StrToDatetime(FieldByName('EntranceTime').Value)));   if k2-k1=1 then t1:=t2      else   t1:=FormatDateTime('hh:nn',StrToDatetime(FieldByName('EntranceTime').Value));      t2:=t1;   k1:=k2;   if (t1 > '00:00') and (t1 <= '06:00') then begin     if (EditT0.Text ='') then begin EditT0.Text:=t1;       end  else begin         if CompareText(EditT0.Text,t1)<0 then begin EditT1.Text:=t1; end else end; end; if (t1 > '06:00') and (t1 <= '11:00') then begin if (EditT1.Text ='') then begin EditT1.Text:=t1; end else begin if CompareText(EditT1.Text,t1)<0 then begin if (EditT0.Text='') then begin EditT0.Text:=EditT1.Text; EditT1.Text:=t1; end else EditT2.Text:=t1; end else end; end; if (t1 > '11:00') and (t1 <= '12:15') then begin if (EditT2.Text ='') then begin EditT2.Text:=t1; end else begin if CompareText(EditT2.Text,t1)<0 then begin if (EditT1.Text='') then begin EditT1.Text:=EditT2.Text; EditT2.Text:=t1; end else EditT3.Text:=t1; end else if CompareText(EditT2.Text,t1)>0 then begin if (EditT3.Text='') then begin EditT3.Text:=EditT2.Text; EditT2.Text:=t1; end; end; end; end; if (t1 > '12:15') and (t1 <= '16:30') then begin if (EditT3.Text ='') then begin EditT3.Text:=t1; end else begin if CompareText(EditT3.Text,t1)<0 then begin if (EditT2.Text='') then begin EditT2.Text:=EditT3.Text; EditT3.Text:=t1; end else EditT4.Text:=t1; end else end; end; if (t1 > '16:30') and (t1 <= '19:00') then begin if (EditT4.Text ='') then begin EditT4.Text:=t1; end else begin if CompareText(EditT4.Text,t1)<0 then begin if (EditT3.Text='') then begin EditT3.Text:=EditT4.Text; EditT4.Text:=t1; end else EditT5.Text:=t1; end else end; end; if (t1 > '19:00') and (t1 <= '22:00') then begin if (EditT5.Text ='') then begin EditT5.Text:=t1; end else begin if CompareText(EditT5.Text,t1)<0 then begin if (EditT4.Text='') then begin EditT4.Text:=EditT5.Text; EditT5.Text:=t1; end else EditT6.Text:=t1; end else end; end; if (t1 > '22:00') and (t1 <= '24:00') then begin if (EditT6.Text ='') then begin EditT6.Text:=t1; end else begin if CompareText(EditT6.Text,t1)<0 then begin if (EditT5.Text='') then begin EditT5.Text:=EditT6.Text; EditT6.Text:=t1; end else if (EditT4.Text='') then begin EditT4.Text:=EditT5.Text; EditT5.Text:=EditT6.Text; EditT6.Text:=t1; end; end else end; end; memEntrance.Caption:=DateToStr(days);//紀錄最後日期 Next;//個別卡號之紀錄Next end;//個別卡號之記錄結束 if dutyDataSet.Locate('EntranceCardNo;DutyDate', varArrayof([empDataSet.FieldByName('EntranceCardNo').Value,FormatDateTime('yyyy/mm/dd',Days)]),[]) then begin //查查看紀錄是否存在?true>edit;false>append; dutyDataSet.Edit; // ShowMessage('edit'); if EditT0.Text<>'' then dutyDataSet.FieldByName('DutyTime0').Value:=EditT0.Text; if EditT1.Text<>'' then dutyDataSet.FieldByName('DutyTime1').Value:=EditT1.Text; if EditT2.Text<>'' then dutyDataSet.FieldByName('DutyTime2').Value:=EditT2.Text; if EditT3.Text<>'' then dutyDataSet.FieldByName('DutyTime3').Value:=EditT3.Text; if EditT4.Text<>'' then dutyDataSet.FieldByName('DutyTime4').Value:=EditT4.Text; if EditT5.Text<>'' then dutyDataSet.FieldByName('DutyTime5').Value:=EditT5.Text; if EditT6.Text<>'' then dutyDataSet.FieldByName('DutyTime6').Value:=EditT6.Text; end else begin dutyDataSet.Append; // ShowMessage('append'); dutyDataSet.FieldByName('EntranceCardNo').Value:=empDataSet.FieldByName('EntranceCardNo').Value; dutyDataSet.FieldByName('DutyDate').Value:=FormatDateTime('yyyy/mm/dd',Days); if EditT0.Text='' then dutyDataSet.FieldByName('DutyTime0').Value:=NULL else dutyDataSet.FieldByName('DutyTime0').Value:=EditT0.Text; if EditT1.Text='' then dutyDataSet.FieldByName('DutyTime1').Value:=NULL else dutyDataSet.FieldByName('DutyTime1').Value:=EditT1.Text; if EditT2.Text='' then dutyDataSet.FieldByName('DutyTime2').Value:=NULL else dutyDataSet.FieldByName('DutyTime2').Value:=EditT2.Text; if EditT3.Text='' then dutyDataSet.FieldByName('DutyTime3').Value:=NULL else dutyDataSet.FieldByName('DutyTime3').Value:=EditT3.Text; if EditT4.Text='' then dutyDataSet.FieldByName('DutyTime4').Value:=NULL else dutyDataSet.FieldByName('DutyTime4').Value:=EditT4.Text; if EditT5.Text='' then dutyDataSet.FieldByName('DutyTime5').Value:=NULL else dutyDataSet.FieldByName('DutyTime5').Value:=EditT5.Text; if EditT6.Text='' then dutyDataSet.FieldByName('DutyTime6').Value:=NULL else dutyDataSet.FieldByName('DutyTime6').Value:=EditT6.Text; end; try dutyDataSet.Post; except dutyDataSet.Cancel; // ShowMessage('Error'); end; end; end; empDataSet.Next;//卡號迴圈Next end; days:=days 1;//相當於日期迴圈Next empDataSet.First;//換日需卡號從頭來過 end; if manul=0 then begin //自動模式為manulBtn.enable:=true且設manul=0 with memDataSet do begin Edit; FieldByName('entrancecardMem').Value:=StrToDate(memEntrance.Caption); Post; //將最後日期存到資料表 end; end; Dbgrid2.Visible:=false; end; 發表人 - way888 於 2005/08/29 22:17:29 發表人 - way888 於 2005/08/29 22:21:18 發表人 - way888 於 2005/08/29 22:42:54
way888
初階會員


發表:32
回覆:76
積分:36
註冊:2005-05-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-29 22:25:51 IP:220.136.xxx.xxx 未訂閱
這是我的主Form,參考看看
shine5188
一般會員


發表:2
回覆:15
積分:8
註冊:2005-05-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-31 19:16:55 IP:211.20.xxx.xxx 未訂閱
感謝way888兄指點. 問題到此結案. 詳細我再研究一下
系統時間:2024-06-08 18:11:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!