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

📄 ustainfo.pas

📁 这是一个门禁系统的应用程序,用 delphi编写,希望与大家交流.
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  if pcSta.ActivePageIndex = 5 then tsStainfo.Show;
  if pcSta.ActivePageIndex = 0 then
  begin
    if MessageBox(handle, '真的要删除此员工记录么?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
      if aqStaInfo.Active = true then
      begin
        if FileExists(sPath + 'images\' + aqStaInfo.Fieldbyname('image').AsString) then
          DeleteFile(sPath + 'images\' + aqStaInfo.Fieldbyname('image').AsString);
        sid := tvPer.Selected.AbsoluteIndex;
        aqStaInfo.Delete;
        aqStaInfo.UpdateBatch();
        if aqStaInfo.RecordCount = 0 then
          btnEdit.Enabled := false
        else
          btnEdit.Enabled := true;
        btnDel.Enabled := btnEdit.Enabled;
        tvPer.Selected.Delete;
        if sid - 1 > 0 then
          tvPer.Selected := tvPer.Items[sid - 1]
        else if sid < tvPer.Items.Count then
          tvPer.Selected := tvPer.Items[sid + 1];
        DrawTree;
      end
      else
        MessageBox(handle, '还没有记录!', '提示', mb_IconWarning + mb_Ok);
  end
  else
  begin
    if MessageBox(self.Handle, '真的要删除此记录么?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
    begin
      aqStaInfo.Delete;
      aqStaInfo.UpdateBatch();
      if aqStaInfo.RecordCount = 0 then
        btnEdit.Enabled := false
      else
        btnEdit.Enabled := true;
      btnDel.Enabled := btnEdit.Enabled;
    end;
  end;
end;

procedure TfrmStainfo.btnPrintClick(Sender: TObject);
begin
  if btnPrint.Caption = '打  印' then
  begin
    if tvPer.Selected.Data <> nil then
    begin
      frmPrint := Tfrmprint.Create(self);
      frmPrint.ShowModal;
      FreeAndNil(frmPrint);
    end
    else
      MessageBox(self.Handle, '请先选择员工!', '提示', mb_IconInformation + mb_Ok);
  end
  else
  begin
    if aqStaInfo.State in [dsEdit, dsInsert] then
    begin
      aqStaInfo.Cancel;
      aqStaInfo.CancelBatch;
    end;

    case pcSta.ActivePageIndex of
      0: SetState(ssSta, otCancel);
      1: SetState(ssExper, otCancel);
      2: SetState(ssFami, otCancel);
      3: SetState(ssAP, otCancel);
      4: SetState(ssTrain, otCancel);
    end;
    if aqStaInfo.RecordCount = 0 then
      btnEdit.Enabled := false
    else
      btnEdit.Enabled := true;
    btnDel.Enabled := btnEdit.Enabled;
  end;    
end;

procedure TfrmStainfo.btnCloseClick(Sender: TObject);
begin
  Close();
end;

//******************************
procedure TfrmStainfo.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeTree;
  Action := caFree;
  frmStaInfo := nil;
  frmper.sbper.Panels[1].Text := sTopic;
end;

procedure TfrmStainfo.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if aqStaInfo.State in [dsInsert, dsEdit] then
  begin
    if MessageBox(self.Handle, '还有信息没有保存,确定要退出吗?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
    begin
      aqStaInfo.Cancel;
      aqStaInfo.CancelBatch;
      CanClose := true;
    end
    else
      CanClose := false;
  end
  else
    CanClose := true;
end;

procedure TfrmStainfo.btnEditiClick(Sender: TObject);  
var
  aqimg: TADOQuery;
  imgstr: string;
begin
  if odimg.Execute then
  begin
    imgstr := ExtractFileName(odimg.FileName);
    if not FileExists(sPath + 'images\' + imgstr) then
    begin
      aqImg := TADOQuery.Create(nil);
      aqImg.Connection := dmPer.acPer;
      aqImg.Close;
      aqImg.SQL.Clear;
      aqImg.SQL.Text := 'select image from stainfo where id=' + IntToStr(id);
      aqImg.open;
      if FileExists(sPath + 'images\' + aqImg.Fieldbyname('image').AsString) then
        DeleteFile(sPath + 'images\' + aqImg.Fieldbyname('image').AsString);
      CopyFile(Pchar(odimg.FileName), pchar(sPath + 'images\' + imgstr), false);
      aqImg.Close;
      aqImg.sql.Clear;
      aqImg.SQL.Text := 'update stainfo set [image]=' + QuotedStr(imgstr) + ' where id=' + IntToStr(id);
      aqImg.ExecSQL;
      imgi.Picture.LoadFromFile(sPath + 'images\' + imgstr);
      MessageBox(self.Handle, '照片更新成功!', '提示', mb_IconInformation + mb_Ok);
      FreeAndNil(aqImg);
    end
    else
    begin
      MessageBox(handle, '此照片文件名已存在,请改名先!', '提示', mb_IconInformation + mb_Ok);
      Exit;
    end;
  end;
end;

procedure TfrmStainfo.btnDeliClick(Sender: TObject);
var
  aqImg: TADOQuery;
begin
  if MessageBox(handle, '真的要删除此员工照片吗?', '提示', mb_IconQuestion + mb_OkCancel) = idOk then
  begin
    aqImg := TADOQuery.Create(nil);
    aqImg.Connection := dmPer.acper;
    aqImg.Close;
    aqImg.sql.Clear;
    aqImg.SQL.Text := 'select image from stainfo where id=' + IntToStr(id);
    aqImg.open;
    if FileExists(sPath + 'images\' + aqImg.Fieldbyname('image').AsString) then
    begin
      DeleteFile(sPath + 'images\' + aqImg.Fieldbyname('image').AsString);
      imgi.Picture.LoadFromFile(sPath + 'images\imgd.jpg');
      MessageBox(self.Handle, '照片删除成功!', '提示', mb_IconInformation + mb_Ok);
    end
    else
      MessageBox(self.Handle, '没有此员工照片!', '提示', mb_IconInformation + mb_Ok);
  end;
end;       

procedure TfrmStainfo.FormResize(Sender: TObject);
begin
  if self.WindowState = wsNormal then
  begin
    imgb.Visible := true;
    imgr.Visible := true;
  end;
  meoBirth.Left := tvPer.Left;
  meoBirth.Top := tvPer.Top + tvPer.Height - meoBirth.Height;
  meoBirth.Width := tvPer.Width;
end;

procedure TfrmStainfo.mnuexpandClick(Sender: TObject);
begin
  tvPer.FullExpand;
end;

procedure TfrmStainfo.mnucloseClick(Sender: TObject);
begin
  tvPer.FullCollapse;
end;

procedure TfrmStainfo.AddStatData(aStatType: TStatType);
  procedure DrawChart;
  var
    i: Integer;
    sXvalue: string;
  begin
    aqStaInfo.First;

    chrStaInfo.Series[0].Clear;
    for i := 0 to aqStaInfo.RecordCount - 1 do
    begin
      sXvalue := aqStaInfo.Fields[0].AsString;
      if aStatType = stAge then
        sXvalue := sXvalue + '岁'
      else if aStatType = stYear then
        sXvalue := sXvalue + '年';
      if sXvalue = '' then sXvalue := '未指定';
      chrStaInfo.Series[0].Add(aqStaInfo.Fields[1].AsFloat, sXvalue);
      aqStaInfo.Next;
    end;
    aqStaInfo.First;
  end;
begin
  if aqStaInfo.Active then aqStaInfo.Close;
  case aStatType of
    stDep:
    begin
      dmPer.OpenStat(sWhr, 'dep');
      aqStaInfo := dmPer.aqStat;
      aqStaInfo.Fields[0].DisplayLabel := '部 门';
      aqStaInfo.Fields[0].DisplayWidth := 12;
      aqStaInfo.Fields[1].DisplayLabel := '人 数';
      aqStaInfo.Fields[1].DisplayWidth := 6;
      dsStat.DataSet := aqStaInfo;
      chrStaInfo.Title.Text.Text := '公司统计信息-部 门';
    end;
    stSex:
    begin
      dmPer.OpenStat(sWhr, 'sex');
      aqStaInfo := dmPer.aqStat;
      aqStaInfo.Fields[0].DisplayLabel := '性 别';
      aqStaInfo.Fields[0].DisplayWidth := 12;
      aqStaInfo.Fields[1].DisplayLabel := '人 数';
      aqStaInfo.Fields[1].DisplayWidth := 6;
      dsStat.DataSet := aqStaInfo;
      chrStaInfo.Title.Text.Text := '公司统计信息-性 别';
    end;
    stLevel:
    begin
      dmPer.OpenStat(sWhr, '[level]');
      aqStaInfo := dmPer.aqStat;
      aqStaInfo.Fields[0].DisplayLabel := '学 历';
      aqStaInfo.Fields[0].DisplayWidth := 12;
      aqStaInfo.Fields[1].DisplayLabel := '人 数';
      aqStaInfo.Fields[1].DisplayWidth := 6;
      dsStat.DataSet := aqStaInfo;
      chrStaInfo.Title.Text.Text := '公司统计信息-学 历';
    end;
    stCap:
    begin
      dmPer.OpenStat(sWhr, '[duty]');
      aqStaInfo := dmPer.aqStat;
      aqStaInfo.Fields[0].DisplayLabel := '职 称';
      aqStaInfo.Fields[0].DisplayWidth := 12;
      aqStaInfo.Fields[1].DisplayLabel := '人 数';
      aqStaInfo.Fields[1].DisplayWidth := 6;
      dsStat.DataSet := aqStaInfo;
      chrStaInfo.Title.Text.Text := '公司统计信息-职 称';
    end;
    stAge:
    begin
      dmPer.OpenStat(sWhr, 'DateDiff(''yyyy'', birth, Date())');
      aqStaInfo := dmPer.aqStat;
      aqStaInfo.Fields[0].DisplayLabel := '年 龄';
      aqStaInfo.Fields[0].DisplayWidth := 12;
      aqStaInfo.Fields[1].DisplayLabel := '人 数';
      aqStaInfo.Fields[1].DisplayWidth := 6;
      dsStat.DataSet := aqStaInfo;
      chrStaInfo.Title.Text.Text := '公司统计信息-年 龄';
    end;
    stYear:
    begin
      dmPer.OpenStat(sWhr, 'left(indate, 4)');
      aqStaInfo := dmPer.aqStat;
      aqStaInfo.Fields[0].DisplayLabel := '年 份';
      aqStaInfo.Fields[0].DisplayWidth := 12;
      aqStaInfo.Fields[1].DisplayLabel := '人 数';
      aqStaInfo.Fields[1].DisplayWidth := 6;
      dsStat.DataSet := aqStaInfo;
      chrStaInfo.Title.Text.Text := '公司统计信息-入司年份';
    end;
    stMonth:
    begin
      dmPer.OpenStat(sWhr, 'left(indate, 7)');
      aqStaInfo := dmPer.aqStat;
      aqStaInfo.Fields[0].DisplayLabel := '月 份';
      aqStaInfo.Fields[0].DisplayWidth := 12;
      aqStaInfo.Fields[1].DisplayLabel := '人 数';
      aqStaInfo.Fields[1].DisplayWidth := 6;
      dsStat.DataSet := aqStaInfo;
      chrStaInfo.Title.Text.Text := '公司统计信息-入司年份';
    end;
  end;

  DrawChart;
end;

procedure TfrmStainfo.sbDepClick(Sender: TObject);
begin
  AddStatData(stDep);
end;

procedure TfrmStainfo.sbSexClick(Sender: TObject);
begin
  AddStatData(stSex);
end;

procedure TfrmStainfo.sbElevelClick(Sender: TObject);
begin
  AddStatData(stLevel);
end;

procedure TfrmStainfo.sbCapClick(Sender: TObject);
begin
  AddStatData(stCap);
end;

procedure TfrmStainfo.sbAgeClick(Sender: TObject);
begin
  AddStatData(stAge);
end;

procedure TfrmStainfo.sbYearClick(Sender: TObject);
begin
  AddStatData(stYear);
end;

procedure TfrmStainfo.sbMonthClick(Sender: TObject);
begin
  AddStatData(stMonth);
end;

procedure TfrmStainfo.sbSaveAsClick(Sender: TObject);
begin
  if spdChart.Execute then
  begin
    if FileExists(spdChart.FileName) then
    begin
      if MessageBox(self.Handle, Pchar('文件' + spdChart.FileName + '已存在,要覆盖吗?'), '提示', mb_IconQuestion + mb_YesNo) = idYes then
      begin
        chrStaInfo.SaveToBitmapFile(spdChart.FileName);
        MessageBox(self.Handle, Pchar('图表已成功导出为' + spdChart.FileName), '提示', mb_IconInformation + mb_Ok);
      end
      else
        sbSaveAsClick(Sender);
    end
    else
    begin
      chrStaInfo.SaveToBitmapFile(spdChart.FileName);
      MessageBox(self.Handle, Pchar('图表已成功导出为' + spdChart.FileName), '提示', mb_IconInformation + mb_Ok);
    end;
  end;
end;

procedure TfrmStainfo.tvPerMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
  function GetStaInfo(sId: string): string;
  var
    aqGetInfo: TADOQuery;
    sInfo: string;
  begin
    if sId = '' then Exit;
    aqGetInfo := TADOQuery.Create(nil);
    dmPer.OpenQuery(aqGetInfo, 'select [name], stano, sex, dep from stainfo where id=' + sId);
    if not aqGetInfo.Eof then
    begin
      sInfo := '';
      sInfo := sInfo + '姓名:' + aqGetInfo.Fields[0].AsString + #13;
      sInfo := sInfo + '工号:' + aqGetInfo.Fields[1].AsString + #13;
      sInfo := sInfo + '性别:' + aqGetInfo.Fields[2].AsString + #13;
      sInfo := sInfo + '部门:' + aqGetInfo.Fields[3].AsString;
    end;
    result := sInfo;
    aqGetInfo.Free;
  end;
var
  sNode: TTreeNode;
  sId: Integer;
begin
  sNode := tvPer.GetNodeAt(X, Y);
  if sNode <> nil then
  begin
    if nIndex <> sNode.AbsoluteIndex then
    begin
      nIndex := sNode.AbsoluteIndex;
      Application.Activatehint(Point(X, Y));
    end;
    if sNode.Data <> nil then
    begin   
      sId := PSid(sNode.Data)^.ID;
      tvPer.Hint := GetStaInfo(IntToStr(sId));
    end
    else
      tvPer.Hint := '';
  end;
end;

procedure TfrmStainfo.GetBrithStaff(IsMonth: Boolean);
var
  aqBirth: TADOQuery;
begin
  aqBirth := TADOQuery.Create(self);
  if IsMonth then
  begin
    dmPer.OpenQuery(aqBirth, 'select stano, [name] from stainfo where datepart(''m'', birth) = '
                             + QuotedStr(IntToStr(MonthOf(Date()))) + ' order by [name]');
    meoBirth.Lines.Append('本月生日的员工['+ IntToStr(aqBirth.RecordCount) +']');
    if not aqBirth.Eof then
    begin
      meoBirth.Lines.Append('他们是:');
      while not aqBirth.Eof do
      begin
        meoBirth.Lines.Append(aqBirth.fieldByName('name').AsString + '[' + aqBirth.fieldByName('stano').AsString + ']');
        aqBirth.Next;
      end;
    end;
  end
  else
  begin
    meoBirth.Lines.Append(#13);
    dmPer.OpenQuery(aqBirth, 'select stano, [name] from stainfo where datepart(''m'', birth) = '
                             + QuotedStr(IntToStr(MonthOf(Date()))) + ' and datepart(''d'', birth) = '
                             + QuotedStr(IntToStr(DayOf(Date()))) + ' order by [name]');
   meoBirth.Lines.Append('今天生日的员工[' + IntToStr(aqBirth.RecordCount) + ']');
    if not aqBirth.Eof then
    begin
      meoBirth.Lines.Append('他们是:');
      while not aqBirth.Eof do
      begin
        meoBirth.Lines.Append(aqBirth.fieldByName('name').AsString + '[' + aqBirth.fieldByName('stano').AsString + ']');
        aqBirth.Next;
      end;
    end;
  end;
  aqBirth.Free;
end;

procedure TfrmStainfo.dcbDepExit(Sender: TObject);
var
  aqFillData: TADOQuery;
  i: Integer;
begin
  dmPer.OpenSDep;
  aqFillData := dmPer.aqSDep;
  if dcbDep.Text <> '' then
  begin
    aqFillData.Filtered := false;
    aqFillData.Filter := 'dep=' + QuotedStr(dcbDep.Text);
    aqFillData.Filtered := true;
  end;
  dcbSDep.Clear;
  if not aqFillData.Eof then
  begin
    for i := 0 to aqFillData.RecordCount - 1 do
    begin
      dcbSDep.Items.add(aqFillData.FieldByName('sdep').AsString);
      aqFillData.Next;
    end;
  end;
  dcbSDep.Items.Insert(0, '[不  限]');
end;

end.

⌨️ 快捷键说明

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