📄 ustainfo.pas
字号:
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 + -