⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readrecord.pas

📁 pasa人力资源考勤管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  finally
     Animate1.Active:=False;
     pbar1.visible:=false;
     label1.visible:=false;
     speedbutton1.enabled:=true;
     speedbutton2.enabled:=false;
     closefile(f);
     closefile(logfile);
     query1.close;
     query1.sql.text:='Drop table tt';
     query1.sql.add('Drop procedure readrecord');     
     query1.execsql;
  end;
  query2.close;
  query2.sql.clear;  //离职换卡人员打印的报表
  query2.sql.add('update atd15010 set workno=a.workno,name=a.name,dept=a.dept  from per24010 a where a.cardno=atd15010.cardno and a.leave=0 and '+
      'a.indate<=atd15010.recdate  ');
  query2.sql.add('update atd15010 set workno=a.workno, name=a.name,dept=a.dept  from per24010 a left join per_changecard b on a.workno=b.workno '+
      'where atd15010.cardno=b.oldcard ');
  query2.sql.add('update atd15010 set workno=a.workno, name=a.name,dept=a.dept  from per16010 a left join per24010 b on a.workno=b.workno where a.cardno=atd15010.cardno and '+
      'atd15010.recdate between b.indate and a.leavedate-1 ');
 //            query2.sql.add('update atd15010 set atd15010.workno=a.workno,name=a.name,dept=a.dept  from per24010 a left join per15010 b on a.cardno=b.cardno where a.cardno=atd15010.cardno and b.agreedate>atd15010.recdate ');
  query2.sql.savetofile('c:\readrecord.sql');
  query2.ExecSQL;
  query2.Close;

end;   //with datamod
end;

procedure TFormreadrecord.onebyone;
label go;
var
  StrL_ClockRec:TStringlist;
  i,j,handle:integer;
  Card_No,Rec_Date,Rec_Time,Mac_Id,State_Id,Rec_Year,Rec_StrDateTime,
  Min_Date,Max_Date:String;
  Rec_DateTime,p:string;//TDateTime;
  test_datetime:TDatetime;
  logfile,f:TextFile;
  log,workno,cname,cdept:string;
  x:boolean;
begin
  Animate1.Active:=True;
  pbar1.visible:=true;
  label1.visible:=true;
  label2.visible:=true;
  speedbutton1.enabled:=false;
  speedbutton2.enabled:=false;
  log:=ExtractFilePath(Application.ExeName)+'log\readcarderr.log';
  p:=extractfilepath(application.exename)+'log\readcard.log';
  assignfile(f,p);
  append(f);
  if not fileexists(log) then
  begin
     handle:=filecreate(log);
     if handle>0 then
       Fileclose(Handle);
  end;
  assignfile(logfile,log);
  append(logfile);
  application.ProcessMessages;
  for j:=listbox1.items.count-1 downto 0 do
  begin  //for listbox
   if FileExists(listbox1.items[j]) then
   begin//文件存在
    try
      writeln(f,'---------------------------------------------------------');
      writeln(f,'开始读取文件'+listbox1.items[j]+'中的打卡数据:'+formatdatetime('yyyy/mm/dd hh:mm:ss',now));
      StrL_ClockRec:=TStringlist.Create;
      StrL_ClockRec.LoadFromFile(listbox1.items[j]);//读入字符串

      Min_Date:=FormatDateTime('yyyy'+dateseparator+'mm'+dateseparator+'dd',Date);
      Max_Date:=Min_Date;
      with Datamod do
      begin
        Query1.Close;
        adoclock.Close;
        adoclock.CommandText:='select top 1 * from atd09010 where clockname='''+combobox1.text+''' and Yndefault=1 ';
        adoclock.Open;
        PBar1.Max:=StrL_ClockRec.Count;
        PBar1.Position:=0;
        PBar1.Step:=1;
        For i:=0 to StrL_ClockRec.Count-1 do
        begin
          x:=false;
          Label2.Caption:=IntToStr(i+1)+'/'+IntToStr(StrL_ClockRec.Count);
          Label2.Update;
          if length(StrL_ClockRec.Strings[i])=adoclockTextlength.AsInteger then
          begin
            Card_No:=Copy(StrL_ClockRec.Strings[i],adoclockCardB.AsInteger,adoclockCardE.AsInteger);
            adoquery1.Close;
            adoquery1.SQL.Text:='select workno,name,cardno,dept from per24010 where cardno='''+card_no+''' and leave=0';
            adoquery1.Open;
            workno:=adoquery1.fieldbyname('workno').asstring;
            cname:=adoquery1.fieldbyname('name').asstring;
            cdept:=adoquery1.fieldbyname('dept').asstring;
            Label1.Caption:='正在读取 '+Card_No;
            Label1.Update;
            Rec_Year:=Copy(StrL_ClockRec.Strings[i],adoclockYearB.AsInteger,adoclockYearE.AsInteger);
            if adoclockYearE.AsInteger =2 then
              Rec_Year:=Copy(FormatDateTime('yyyy',date),1,2)+Rec_Year;
              //日期
            Rec_Date:=Rec_Year+dateseparator+Copy(StrL_ClockRec.Strings[i],adoclockMonthB.AsInteger,2)+dateseparator+
            Copy(StrL_ClockRec.Strings[i],adoclockDayB.AsInteger,2);
            //时间
            Rec_Time:=Copy(StrL_ClockRec.Strings[i],adoclockTimeB.AsInteger,2)+':'+
              Copy(StrL_ClockRec.Strings[i],adoclockTimeE.AsInteger,2);

            Rec_StrDateTime:=Rec_Date+' '+Rec_Time;
            //日期时间,日期型
            Rec_DateTime:={StrToDateTime}(Rec_Date+' '+Rec_Time);
            try
              test_datetime:=strtodatetime(Rec_DateTime);
            except
              writeln(logfile,pchar(formatdatetime('yyyy'+dateseparator+'mm'+dateseparator+'dd hh:mm:ss',now)+'读卡时读到一个无效的时间值:'+rec_datetime));
              x:=true;
            end;
            if x then goto go;
            //比较大小 
            if Min_Date>Rec_Date then Min_Date := Rec_Date;
            if Max_Date<Rec_Date then Max_Date := Rec_Date;
            //机器号
            Mac_Id:=Copy(StrL_ClockRec.Strings[i],adoclockMacB.AsInteger,adoclockMacE.AsInteger);
                //状态号
                State_Id:=Copy(StrL_ClockRec.Strings[i],adoclockStateB.AsInteger,adoclockstatee.asinteger);
                try
                Query1.SQL.text:='Insert into atd15010(macname,cardno,recdate,rectime,state,deldate,recdatetime,readok,name,dept,workno) '+
                  'values( '''+mac_id+''','''+card_no+''','''+Rec_Date+''','''+Rec_Time+''','''+State_Id+''','''','''+Rec_Datetime+''',0,'''+cname+''','''+cdept+''','''+workno+''') ';
                Query1.ExecSQL;
                except
                   writeln(logfile,pchar('发现重复打卡记录'''+card_no+'''的员工'));
                end;
          end else
            writeln(logfile,pchar('读取打卡资料时发现实际文本行长度(长度为:'+inttostr(length(StrL_ClockRec.Strings[i]))+')与卡钟参数设定中的文本行长度(长度为:'+inttostr(adoclockTextlength.AsInteger)+'不一致.'));
          go: PBar1.StepIt;

        end;
           // query2.close;
           // query2.sql.clear;  //离职换卡人员打印的报表
          //  query2.sql.add('update atd15010 set workno=a.workno,name=a.name,dept=a.dept  from per24010 a where a.cardno=atd15010.cardno and a.leave=0 and '+
          //      'a.indate<=atd15010.recdate  ');
          //  query2.sql.add('update atd15010 set workno=a.workno, name=a.name,dept=a.dept  from per24010 a left join per_changecard b on a.workno=b.workno '+
          //      'where atd15010.cardno=b.oldcard ');
          //  query2.sql.add('update atd15010 set workno=a.workno, name=a.name,dept=a.dept  from per16010 a left join per24010 b on a.workno=b.workno where a.cardno=atd15010.cardno and '+
         //       'atd15010.recdate between b.indate and a.leavedate-1 ');
           //            query2.sql.add('update atd15010 set atd15010.workno=a.workno,name=a.name,dept=a.dept  from per24010 a left join per15010 b on a.cardno=b.cardno where a.cardno=atd15010.cardno and b.agreedate>atd15010.recdate ');
        //    query2.sql.savetofile('c:\readrecord.sql');
       //     query2.ExecSQL;
        //    query2.Close;
      end;
    finally
      StrL_ClockRec.free;
    end;
      label1.Caption:='正在整理刷卡记录...';
      label1.Update;
      writeln(f,'从文件'+listbox1.items[j]+'中共读取了'+inttostr(pbar1.max)+'笔刷卡数据!');
      writeln(f,'结束读取文件'+listbox1.items[j]+'中的打卡数据:'+formatdatetime('yyyy/mm/dd hh:mm:ss',now));
      writeln(f,'---------------------------------------------------------');
   end else  //if fileexist
   Application.MessageBox(pchar('文件'+listbox1.items[j]+'不存在,请重新选择!'),'文件不存在',mb_iconstop+mb_ok);
   listbox1.Items.Delete(j);
   listbox1.update;
  end;  //for listbox
  Animate1.Active:=False;
  pbar1.visible:=false;
  label1.visible:=false;
  label2.visible:=false;
  closefile(logfile);
  closefile(f);
  speedbutton1.enabled:=true;
  speedbutton2.enabled:=true;
end;

procedure TFormreadrecord.N1Click(Sender: TObject);
var i:integer;
    list:TStringList;
begin
 if listbox1.SelCount>0 then
 begin
  list:=TStringList.Create;
  for i:=0 to listbox1.items.count-1 do
    list.add(listbox1.items[i]);
  for i:=0 to listbox1.items.count-1 do
    if listbox1.Selected[i] then
      list.delete(i);
  listbox1.items.clear;
  for i:=0 to list.Count-1 do
    listbox1.Items.Add(list.Strings[i]);
 end else application.messagebox('你没有选择要删除的项目','齐协提示',mb_ok+mb_iconinformation);
 if listbox1.items.count>0 then
   speedbutton2.enabled:=true
 else speedbutton2.enabled:=false;
end;

procedure TFormreadrecord.N2Click(Sender: TObject);
begin
   listbox1.Items.Clear;
   if listbox1.items.count>0 then speedbutton2.enabled:=true
   else speedbutton2.enabled:=false;
end;

procedure TFormreadrecord.SpeedButton2Click(Sender: TObject);
begin
   if radiobutton1.Checked then onebyone
   else if radiobutton2.checked then batchread;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -