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

📄 unit_attendmanager.pas

📁 Delphi+ADO+SQLServer 登陆:superuser/密码为空 调试:打开企业管理器附加数据库 第三方控件:无
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      temp_date:= sg_Normal.cells[0,i];
      pre_morning:=sg_Normal.cells[1,i];
      aft_morning:=sg_Normal.cells[2,i];
      pre_afternoon:=sg_Normal.cells[3,i];
      aft_afternoon:=sg_Normal.cells[4,i];
      pre_evening:=sg_Normal.cells[5,i];
      aft_evening:=sg_Normal.cells[6,i];

      if temp_date <> '' then
      try
        strtodate(temp_date);
      except
        err_no := err_no + 1 ;
      end ;

      if pre_morning <> '' then
      try
        pre_morning := timetostr(strtotime(pre_morning));
        sg_Normal.cells[1,i] := pre_morning ;
      except
        err_no := err_no + 1 ;
      end ;

      if aft_morning <> '' then
      try
        aft_morning := timetostr(strtotime(aft_morning));
        sg_Normal.cells[2,i] := aft_morning ;
      except
        err_no := err_no + 1 ;
      end ;

      if pre_afternoon <> '' then
      try
        pre_afternoon := timetostr(strtotime(pre_afternoon));
        sg_Normal.cells[3,i] := pre_afternoon ;
      except
        err_no := err_no + 1 ;
      end ;

      if aft_afternoon <> '' then
      try
        aft_afternoon := timetostr(strtotime(aft_afternoon));
        sg_Normal.cells[4,i] := aft_afternoon ;
      except
        err_no := err_no + 1 ;
      end ;

      if pre_evening <> '' then
      try
        pre_evening := timetostr(strtotime(pre_evening));
        sg_Normal.cells[5,i] := pre_evening ;
      except
        err_no := err_no + 1 ;
      end ;

      if aft_evening <> '' then
      try
        aft_evening := timetostr(strtotime(aft_evening));
        sg_Normal.cells[6,i] := aft_evening ;
      except
        err_no := err_no + 1 ;
      end ;

      with dmod.ADOQuery1 do
      begin
        close;
        temp_SQL :='update normalattend set ';
        if pre_morning  <>'' then
           temp_Str := 'pre_morning='+#39+temp_date+' '+pre_morning+#39;

        if temp_str  <> '' then
        begin
          if aft_morning  <>'' then
             temp_Str := temp_Str +',aft_morning='+#39+temp_date  +' ' +aft_morning+#39;
        end else
        begin
          if aft_morning  <>'' then
             temp_Str := 'aft_morning='+#39+temp_date  +' ' +aft_morning+#39;
        end;

        if temp_str <>'' then
        begin
          if pre_afternoon<>'' then
             temp_Str := temp_Str +',pre_afternoon='+#39+temp_date+' ' +pre_afternoon+#39;
        end else
        begin
          if pre_afternoon<>'' then
             temp_Str := 'pre_afternoon='+#39+temp_date+' ' +pre_afternoon+#39;
        end;

        if temp_str <>'' then
        begin
          if aft_afternoon<>'' then
            temp_Str := temp_Str +',aft_afternoon='+#39+temp_date+' ' +aft_afternoon+#39;
        end else
        begin
          if aft_afternoon<>'' then
            temp_Str := 'aft_afternoon='+#39+temp_date+' ' +aft_afternoon+#39;
        end;

        if temp_str <>'' then
        begin
          if pre_evening  <>'' then
            temp_Str := temp_Str +',pre_evening='+#39+temp_date  +' ' +pre_evening+#39;
        end else
        begin
          if pre_evening  <>'' then
            temp_Str := 'pre_evening='+#39+temp_date  +' ' +pre_evening+#39;
        end;

        if temp_str <>'' then
        begin
          if aft_evening  <>'' then
             temp_Str := temp_Str +',aft_evening='+#39+temp_date  +' ' +aft_evening+#39;
        end else
        begin
          if aft_evening  <>'' then
             temp_Str := 'aft_evening='+#39+temp_date  +' ' +aft_evening+#39 ;
        end;

        if (temp_str <> '') and (err_no = 0) then
        begin
           temp_SQL := temp_SQL + temp_str + ' where emp_no='+#39+trim(edt_Empno.text)+#39+' and att_date='+#39+temp_date+#39;

           SQL.Text := temp_SQL;
           ExecSQL;
        end ;
      end;
    end;
  finally
    if err_no = 0 then
    begin
      try
        dmod.ADOConn.CommitTrans ;
        MessageBox(handle,'数据保存成功!','提示',mb_ok+mb_iconinformation);
        sg_Normal.Options :=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goColSizing,goRowSelect];
        sbtn_save.Enabled :=false;
        sbtn_edit.Enabled :=true;
        sbtn_delete.Enabled :=true;
      except
        dmod.ADOConn.RollbackTrans ;
        MessageBox(handle,'数据保存失败,请重试!','提示',mb_ok+mb_iconinformation);
      end;
    end
    else
    begin
      dmod.ADOConn.RollbackTrans ;
      MessageBox(handle,'数据保存失败,请重试!','提示',mb_ok+mb_iconinformation);
    end ;
  end;//开始进行特殊考勤的保存
  end else begin
    try
      dmod.ADOConn.BeginTrans ;
      with dmod.ADOQuery1 do
      begin
        close;
        SQL.Text :='delete from specialattend where emp_no='+#39+trim(edt_empno.Text)+#39+
                   ' and att_date between'+#39+DateToStr(dtp_datestart.Date)+#39+
                   ' and '+#39+DateToStr(dtp_dateend.Date)+#39;
        ExecSQL;

        for i:=1 to sg_Special.Rowcount-2 do
        begin
          Close;
          SQL.Text :='insert into SpecialAttend(emp_no,emp_name,att_date,time_start,time_end,reason_id) values('+
               ':empno,:empname,:attdate,:timestart,:timeend,:reasonid)';
          Parameters.ParamValues['empno']:=trim(edt_Empno.Text);
          Parameters.ParamValues['empname']:=trim(edt_Empname.Text);
          Parameters.ParamValues['attdate']:= StrToDate(sg_Special.cells[0,i]);
          Parameters.ParamValues['timestart'] :=StrToDateTime(sg_Special.cells[0,i]+' '+sg_Special.cells[3,i]) ;
          Parameters.ParamValues['timeend'] :=StrToDateTime(sg_Special.cells[0,i]+' '+sg_Special.cells[4,i]);
          Parameters.ParamValues['reasonid']:=sg_Special.cells[1,i];
          ExecSQL;
        end;
      end;
    finally
      try
        dmod.ADOConn.CommitTrans ;
        MessageBox(handle,'数据保存成功!','提示',mb_ok+mb_iconinformation);
        sg_Normal.Options :=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goColSizing,goRowSelect];
        sbtn_save.Enabled :=false;
        sbtn_edit.Enabled :=true;
        sbtn_delete.Enabled :=true;
      except
        dmod.ADOConn.RollbackTrans ;
        MessageBox(handle,'数据保存失败,请重试!','提示',mb_ok+mb_iconinformation);
      end;
    end;
  end;
end;

procedure Tfrm_attendmanager.sbtn_deleteClick(Sender: TObject);
begin
  if pagecontrol1.ActivePage = sht_Normal then
  begin
    if MessageBox(handle,'你确定删除该员工正常考勤记录吗?','询问',mb_yesno+mb_iconquestion)=IDYES then
    begin
      if sg_Normal.Cells[0,sg_Normal.Row]='' then exit;
    
      with dmod.ADOQuery1 do
      begin
        close;
        SQL.Text :='delete from normalattend where emp_no='+#39+trim(edt_Empno.Text)+#39+
                 ' and att_date='+#39+sg_Normal.Cells[0,sg_Normal.Row]+#39;
        ExecSQL;
      end;
      StringGridDelete(sg_Normal,sg_Normal.Row);
      if sg_Normal.Row = sg_Normal.RowCount - 1 then
      begin
        if sg_Normal.RowCount > 2 then
          sg_Normal.Row := sg_Normal.Row - 1
        else
          sbtn_back.Enabled := false;
      end;
      if sg_Normal.Row = 1 then sbtn_front.Enabled := false;
      if sg_Normal.Row = sg_Normal.RowCount - 2 then sbtn_back.Enabled := false;
    end;
  end else begin
    if MessageBox(handle,'你确定删除该员工特殊考勤记录吗?','询问',mb_yesno+mb_iconquestion)=IDYES then
    begin
      if sg_Special.Cells[0,sg_Special.Row]='' then exit;
    
      with dmod.ADOQuery1 do
      begin
        close;
        SQL.Text :='delete from specialattend where emp_no='+#39+trim(edt_Empno.Text)+#39+
                 ' and att_date='+#39+sg_Special.Cells[0,sg_Special.Row]+#39+
                 ' and reason_id='+#39+sg_Special.Cells[1,sg_Special.row]+#39;
        ExecSQL;
      end;
      StringGridDelete(sg_Special,sg_Special.Row);
      if sg_Special.Row = sg_Special.RowCount - 1 then
      begin
        if sg_Special.RowCount > 2 then
          sg_Special.Row := sg_Special.Row - 1
        else
          sbtn_back.Enabled := false;
      end;
      if sg_Special.Row = 1 then sbtn_front.Enabled := false;
      if sg_Special.Row = sg_Special.RowCount - 2 then sbtn_back.Enabled := false;
    end;
  end;
end;

procedure Tfrm_attendmanager.edt_EmpnoExit(Sender: TObject);
begin
  with dmod.ADOQuery1 do
  begin
    Close;
    SQL.Text :='select emp_name from employee where emp_no='+#39+trim(edt_Empno.Text)+#39;
    Open;
    if not eof then
      edt_empname.Text := FieldByName('emp_name').AsString 
    else begin
      MessageBox(self.handle,'该员工编号不存在,请重试!','提示',mb_ok+mb_iconinformation);
      edt_empno.SetFocus ;
    end;
  end;
end;

procedure Tfrm_attendmanager.sbtn_backClick(Sender: TObject);
begin
  if pagecontrol1.ActivePage = sht_Normal then
  begin
    if sg_Normal.Row > sg_Normal.RowCount-2 then
    begin
      sbtn_back.Enabled := false;
      exit;
    end;
    sbtn_front.Enabled := true;
    sg_Normal.Row := sg_Normal.Row+1;
  end else begin
    if sg_Special.Row > sg_Special.RowCount-2 then
    begin
      sbtn_back.Enabled := false;
      exit;
    end;
    sbtn_front.Enabled := true;
    sg_Special.Row := sg_Special.Row+1;
  end;
end;

procedure Tfrm_attendmanager.sbtn_frontClick(Sender: TObject);
begin
  if pagecontrol1.ActivePage = sht_Normal then
  begin
    if sg_Normal.Row=1 then
    begin
      sbtn_front.Enabled := false;
      exit;
    end;

    sbtn_back.Enabled := true;
    sg_Normal.Row := sg_Normal.Row-1;
  end else begin
    if sg_Special.Row=1 then
    begin
      sbtn_front.Enabled := false;
      exit;
    end;

    sbtn_back.Enabled := true;
    sg_Special.Row := sg_Special.Row-1;
  end;
end;

procedure Tfrm_attendmanager.N1Click(Sender: TObject);
begin
  DoSelectReason;
end;

procedure Tfrm_attendmanager.sg_SpecialMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if sg_Special.cells[0,sg_Special.Row]='' then exit;
  if button=mbright then
     popupmenu1.Popup(X,Y+150); 
end;

end.

⌨️ 快捷键说明

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