ask.pas

来自「pasa人力资源考勤管理系统」· PAS 代码 · 共 525 行

PAS
525
字号
unit ask;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBCtrls, StdCtrls, Mask, ToolEdit, CurrEdit, RXDBCtrl, Buttons, ExtCtrls,
  Grids, DBGrids, ImgList, ComCtrls, ToolWin, Menus,Db,Adodb;

type
  TFormask = class(TForm)
    ImageList2: TImageList;
    DBGrid1: TDBGrid;
    ToolBar1: TToolBar;
    ToolButton5: TToolButton;
    tbnsort: TToolButton;
    tbnfind: TToolButton;
    tbnprint: TToolButton;
    ToolButton4: TToolButton;
    DBNavigator1: TDBNavigator;
    Splitter1: TSplitter;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N4: TMenuItem;
    N3: TMenuItem;
    Panel2: TPanel;
    Label18: TLabel;
    Edit1: TEdit;
    MaskEdit1: TMaskEdit;
    Label19: TLabel;
    MaskEdit2: TMaskEdit;
    Label20: TLabel;
    DateTimePicker3: TDateTimePicker;
    DateTimePicker4: TDateTimePicker;
    ADOQuery1: TADOQuery;
    ToolButton1: TToolButton;
    Panel3: TPanel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    Animate1: TAnimate;
    DateTimePicker5: TDateTimePicker;
    BitBtn1: TBitBtn;
    DateTimePicker6: TDateTimePicker;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    DBText2: TDBText;
    DBText3: TDBText;
    DBText4: TDBText;
    DBText5: TDBText;
    DBText6: TDBText;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit11: TDBEdit;
    DBComboBox1: TDBComboBox;
    DBComboBox2: TDBComboBox;
    DBText1: TDBText;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ToolButton4Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure DateTimePicker1CloseUp(Sender: TObject);
    procedure DateTimePicker2CloseUp(Sender: TObject);
    procedure tbnfindClick(Sender: TObject);
    procedure tbnsortClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit11KeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure tbnprintClick(Sender: TObject);
    procedure DBNavigator1BeforeAction(Sender: TObject;
      Button: TNavigateBtn);
    procedure DBEdit5Exit(Sender: TObject);
    procedure DBEdit6Exit(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure MaskEdit2Exit(Sender: TObject);
    procedure DateTimePicker3CloseUp(Sender: TObject);
    procedure DateTimePicker4CloseUp(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    
  private
    { Private declarations }
    manyfield:boolean;
    findex:array[1..5] of integer;
    fsort:array[1..5] of string;
    fcount:0..5;
    f:string;   //排序的字段
  public
    { Public declarations }
  end;

var
  Formask: TFormask;

implementation

uses main,publicfunction,datamol, reportask;
{$R *.DFM}

procedure TFormask.FormCreate(Sender: TObject);
begin

  with datamod do
  begin
    adoask.Open;
    adoaskkind.open;
    while not adoaskkind.eof do
    begin
       dbcombobox2.items.add(adoaskkindaskkind.asstring);
       adoaskkind.next;
    end;
    adoaskreason.open;
    while not adoaskreason.eof do
    begin
       dbcombobox1.items.add(adoaskreasonaskreason.asstring);
       adoaskreason.next;
    end;
    adopersonal.Open;
  end;
{    if dbcombobox3.text='有薪' then
  begin
  //  label21.Visible:=true;
  //  label21.visible:=true;
    dbedit8.Enabled:=true;
  end
  else
  begin
   // label21.Visible:=false;
   // label21.Visible:=false;
    label21.Enabled:=false;
    dbedit8.Enabled:=false;
  end;


 }
end;

procedure TFormask.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     with datamod do
     begin
        adoask.close;
        adoaskkind.close;
        adoaskreason.close;
        adopersonal.close;
     end;
     formask:=nil;
     action:=cafree;
end;

procedure TFormask.ToolButton4Click(Sender: TObject);
begin
  close;
end;

procedure TFormask.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if activecontrol=dbgrid1 then
    exit;
   if key=#13 then
    begin
      key:=#0;
      if activecontrol=dbedit11 then
       begin
        if datamod.ADOask.State =dsinsert then
         begin
          datamod.adoask.post;
          datamod.adoask.append;
         end;
         dbedit1.setfocus;
       end
      else
        selectnext(activecontrol,true,true);
    end;
 end;
procedure TFormask.DateTimePicker1CloseUp(Sender: TObject);
begin
  datamod.adoask.edit;
 // datamod.adoaskstartrq.AsString:=datetostr(datetimepicker1.date);
end;

procedure TFormask.DateTimePicker2CloseUp(Sender: TObject);
begin
  datamod.adoask.edit;
  //datamod.adoaskendrq.AsString:=datetostr(datetimepicker2.date);
end;

procedure TFormask.tbnfindClick(Sender: TObject);
begin
  findrecorder(datamod.adoask,'Adoask','atd13010');
end;

procedure TFormask.tbnsortClick(Sender: TObject);
var i:1..5;
begin
  if manyfield then
   begin
     manyfield:=false;
     tbnsort.hint:='设定多字段排序';
     popupmenu1.Items[0].Enabled :=false;
     popupmenu1.Items[1].Enabled :=false;
     popupmenu1.Items[2].Enabled :=false;
     popupmenu1.Items[3].Enabled :=false;
   end
  else begin
    manyfield:=true;
    tbnsort.hint:='取消多字段排序'; //说明现在dbgrid1正处于多字段排序中
    f:='';
    popupmenu1.Items[0].Enabled :=true;
    popupmenu1.Items[1].Enabled :=true;
    popupmenu1.Items[2].Enabled :=true;
    popupmenu1.Items[3].Enabled :=true;
    fcount:=0;
    for i:=1 to 5 do
     begin
      findex[i]:=0;
      fsort[i]:='';
     end;
   end;
end;

procedure TFormask.N1Click(Sender: TObject);
var i:integer;
begin
  for i:=1 to fcount do
   if dbgrid1.SelectedIndex =findex[i] then
    begin
     fsort[i]:='ASC';
     exit;
    end;
  if fcount<5 then
   begin
    fcount:=fcount+1;
    findex[fcount]:=dbgrid1.selectedindex;
    fsort[fcount]:='ASC';
    dbgrid1.Columns[dbgrid1.selectedindex].Color :=clgray;
   end;
end;

procedure TFormask.N2Click(Sender: TObject);
var i:integer;
begin
  for i:=1 to fcount do
   if dbgrid1.SelectedIndex =findex[i] then
    begin
     fsort[i]:='DESC';
     exit;
    end;
  if fcount<5 then
   begin
    fcount:=fcount+1;
    findex[fcount]:=dbgrid1.selectedindex;
    fsort[fcount]:='DESC';
    dbgrid1.Columns[dbgrid1.selectedindex].Color :=clgray;
   end;
end;

procedure TFormask.N4Click(Sender: TObject);
var i:1..5;
begin
  datamod.ADOask.Sort:='';
  for i:=1 to fcount do
  begin
   if dbgrid1.Columns[findex[i]].Color=clgray then
    begin
     datamod.ADOask.Sort :=datamod.ADOask.Sort+dbgrid1.Columns[findex[i]].FieldName+' '+fsort[i];
     if i<fcount then datamod.ADOask.Sort:=datamod.ADOask.Sort+',';
    end;
  end;
end;

procedure TFormask.N3Click(Sender: TObject);
var i:1..5;
begin
  for i:=1 to fcount do
    dbgrid1.Columns[findex[i]].Color :=clwindow;
  fcount:=0;
end;

procedure TFormask.DBGrid1TitleClick(Column: TColumn);
begin
    if f='DESC' then
     f:='ASC'
   else
     f:='DESC';
   datamod.ADOask.Sort :=column.FieldName+' '+f;
end;

procedure TFormask.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
   dbgrid_keypress(sender,key);
end;

procedure TFormask.DBEdit11KeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
   begin
    if datamod.ADOask.Modified then
       datamod.adoask.post;
    dbedit1.setfocus;
    key:=#0;
   end;
end;

procedure TFormask.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=vk_f1 then
  begin
   Application.helpfile :=extractfilepath(application.exename) +'help\pasahelp.hlp';
   application.HelpJump('shm_contents0025');
  end;
end;

procedure TFormask.tbnprintClick(Sender: TObject);
begin
  if not assigned(reportofask) then
     reportofask:=treportofask.create(self);
     reportofask.show;
end;

procedure TFormask.DBNavigator1BeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
   if (button=nbinsert) or (button=nbedit) then
      dbedit1.setfocus;
end;

procedure TFormask.DBEdit5Exit(Sender: TObject);
begin
    if not datamod.ADOask.fieldbyname('endrq').isnull then
    begin
      if not isdate(dbedit4.text) then
      begin
      application.messagebox('您必须输入一个正确的日期,否则您的作业将产生一想不到的结果','Warning',mb_ok+mb_iconwarning);
      dbedit6.SetFocus;
      exit;
      end;
      if dbedit6.text<dbedit4.Text then
      begin
      showmessage('后面的日期不能小于前面的日期');
      exit;
      end;
   end;
 end;
procedure TFormask.DBEdit6Exit(Sender: TObject);
begin

      if  dbedit6.Text<dbedit4.text then
       begin
      showmessage('后面的日期不能小于前面的日期');
      exit;
   end;
   begin
     if (dbedit6.text=dbedit4.text) and (dbedit6.text<dbedit4.text) then
     showmessage('后面的时间不能小于前面的时间');
     exit;
end;
end;
procedure TFormask.Edit1Exit(Sender: TObject);
begin
  with datamod do
  begin
   adoask.close;
   adoask.commandtext:='select * from atd13010 where workno='''+edit1.text+''' or operator='''+edit1.text+''' or name like '''+edit1.text+'%'+''' ';
   adoask.open;
   end;
end;

procedure TFormask.ToolButton5Click(Sender: TObject);
begin
  with datamod do
  begin
   adoask.close;
   adoask.commandtext:='select * ,isnull(askhours,0)-isnull(dechours,0) nomoneyhours  from     atd13010  ';
   adoask.open;
   end;
end;
procedure TFormask.MaskEdit2Exit(Sender: TObject);
var fmat1:string;
begin
 if fmat='/' then
   fmat1:='    /  /  ';
 if fmat='-' then
   fmat1:='    -  -  ';
  with datamod do
   begin
    if (edit1.text='') and (maskedit2.text<>fmat1) then
    if (not isdate(maskedit1.Text)) or (not isdate(maskedit2.Text))  then
      begin
       Application.MessageBox('对不起,您输入的不是有效日期','Warning',mb_ok+mb_iconwarning);
       maskedit1.SetFocus;
      end
    else begin
   adoask.close;
   adoask.commandtext:='select * from atd13010 where startrq >= '''+maskedit1.text+''' and startrq<='''+maskedit2.text+''' ';
   adoask.open;
   end;
  end;

 if (edit1.text<>'') and (maskedit1.text<>fmat1)and (maskedit2.text<>fmat1) then
    if (not isdate(maskedit1.Text)) or (not isdate(maskedit2.Text))  then
      begin
       Application.MessageBox('对不起,您输入的不是有效日期','Warning',mb_ok+mb_iconwarning);
       maskedit1.SetFocus;
      end
    else
    begin
      datamod.ADOask.Close;
      datamod.ADOask.Prepared;
      datamod.ADOask.CommandText:='select *  from atd13010  where ( workno='''+edit1.text+''' or operator='''+edit1.text+''' or name like '''+edit1.text+'%'+''') and startrq >= '''+maskedit1.text+''' and startrq<='''+maskedit2.text+''' ';
      datamod.ADOask.Open;
    end;
end;

procedure TFormask.DateTimePicker3CloseUp(Sender: TObject);
begin
 maskedit1.Text :=datetostr(datetimepicker3.Date);
end;

procedure TFormask.DateTimePicker4CloseUp(Sender: TObject);
begin
 maskedit2.text:=datetostr(datetimepicker4.date);

end;

procedure TFormask.BitBtn2Click(Sender: TObject);
var i:string;
begin
if messagedlg('注意:移除前,无效的数据'+#13+'是否要进行移除',mtinformation,[mbyes,mbno],0)=mryes then
begin
  Animate1.Active:=true;
  adoquery1.Close;
  adoquery1.SQL.Clear;
  label24.Caption:='正在移除资料,请稍後........';
  label24.Visible:=true;
  label24.Update;
  adoquery1.SQL.text:='exec bkask ''1'','''+formatdatetime('yyyy/mm/dd',DateTimePicker5.DateTime)+''','''+formatdatetime('yyyy/mm/dd',DateTimePicker6.datetime)+'''';
  try
  adoquery1.ExecSQL;
  except
    ;
  end;
  label24.Caption:='移除完毕';
  label24.Update;
  Datamod.Adoask.Close;
  Datamod.Adoask.commandtext:='select * from atd13010 order by deptno,workno';
  Datamod.Adoask.Open;
  messagedlg('移除成功,谢谢使用!!!!',mtinformation,[mbok],0);
  Animate1.Active:=false;
  label24.Visible:=false;
end;
end;

procedure TFormask.BitBtn1Click(Sender: TObject);
begin
  panel3.Visible:=false;
  label24.Visible:=false;
  datetimepicker5.Date :=now;
  datetimepicker6.Date :=now;
  Animate1.Active:=false;
end;

procedure TFormask.BitBtn3Click(Sender: TObject);
begin
  if messagedlg('注意:还原资料,将删除现有的资料',mtinformation,[mbyes,mbno],0)=mryes then
  begin
    Animate1.Active:=true;
    label24.Caption:='正在还原资料,请稍後.......';
    label24.Visible:=true;
    label24.Update;
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.text:='exec bkask ''0'','''+formatdatetime('yyyy/mm/dd',DateTimePicker5.DateTime)+''','''+formatdatetime('yyyy/mm/dd',DateTimePicker6.datetime)+'''';
    try
      adoquery1.ExecSQL;
    except
      ;
    end;
    label24.Caption:='还原完毕';
    label24.Update;
    Datamod.Adoask.close;
    Datamod.Adoask.commandtext:='select * from atd13010 order by deptno,workno';
    Datamod.Adoask.Open;
    messagedlg('还原成功,谢谢使用!!!!',mtinformation,[mbok],0);
    Animate1.Active:=false;
    label24.Visible:=false;
    label24.Update;
  end;
end;
procedure TFormask.ToolButton1Click(Sender: TObject);
begin
  panel3.Visible:=true;
  datetimepicker5.SetFocus;
end;

end.

⌨️ 快捷键说明

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