📄 ustainfo.pas
字号:
begin
aqStaInfo.Cancel;
aqStaInfo.CancelBatch;
end;
dmPer.OpenFami(IntToStr(ID));
aqStaInfo := dmPer.aqFami;
if (btnAdd.Caption = '提 交') and (aqStaInfo.State <> dsInsert) then
begin
aqStaInfo.Append;
SetState(ssFami, false);
Exit;
end
else if (btnAdd.Caption = '确 定') and (aqStaInfo.State <> dsEdit) then
begin
aqStaInfo.Edit;
SetState(ssFami, false);
Exit;
end;
SetState(ssFami, true);
if aqStaInfo.RecordCount = 0 then
btnEdit.Enabled := false
else
btnEdit.Enabled := true;
end;
procedure TfrmStainfo.tsAPShow(Sender: TObject);
var
i: Integer;
begin
if aqStaInfo.State in [dsEdit, dsInsert] then
begin
aqStaInfo.Cancel;
aqStaInfo.CancelBatch;
end;
dmPer.OpenDep;
aqStaInfo := dmPer.aqDep;
if not aqStaInfo.Eof then
begin
dbDep.Clear;
for i :=0 to aqStaInfo.RecordCount - 1 do
begin
dbDep.AddItem(aqStaInfo.FieldByName('dep').AsString, nil);
aqStaInfo.Next;
end;
end;
dmPer.OpenAP(IntToStr(ID));
aqStaInfo := dmPer.aqAP;
if (btnAdd.Caption = '提 交') and (aqStaInfo.State <> dsInsert) then
begin
aqStaInfo.Append;
SetState(ssAP, false);
Exit;
end
else if (btnAdd.Caption = '确 定') and (aqStaInfo.State <> dsEdit) then
begin
aqStaInfo.Edit;
SetState(ssAP, false);
Exit;
end;
SetState(ssAP, true);
if aqStaInfo.RecordCount = 0 then
btnEdit.Enabled := false
else
btnEdit.Enabled := true;
end;
procedure TfrmStainfo.tsTrainShow(Sender: TObject);
begin
if aqStaInfo.State in [dsEdit, dsInsert] then
begin
aqStaInfo.Cancel;
aqStaInfo.CancelBatch;
end;
dmPer.OpenTrain(IntToStr(ID));
aqStaInfo := dmPer.aqTrain;
if (btnAdd.Caption = '提 交') and (aqStaInfo.State <> dsInsert) then
begin
aqStaInfo.Append;
SetState(ssTrain, false);
Exit;
end
else if (btnAdd.Caption = '确 定') and (aqStaInfo.State <> dsEdit) then
begin
aqStaInfo.Edit;
SetState(ssTrain, false);
Exit;
end;
SetState(ssTrain, true);
if aqStaInfo.RecordCount = 0 then
btnEdit.Enabled := false
else
btnEdit.Enabled := true;
end;
procedure TfrmStainfo.tsStatShow(Sender: TObject);
begin
sbDepClick(Sender);
end;
procedure TfrmStainfo.btnEditClick(Sender: TObject);
begin
if pcSta.ActivePageIndex = 5 then
tsStainfo.Show;
btnEdit.Visible := false;
aqStaInfo.Edit;
case pcSta.ActivePageIndex of
0: SetState(ssSta, otEdit);
1: SetState(ssExper, otEdit);
2: SetState(ssFami, otEdit);
3: SetState(ssAP, otEdit);
4: SetState(ssTrain, otEdit);
end;
end;
procedure TfrmStainfo.btnAddClick(Sender: TObject);
begin
if pcSta.ActivePageIndex = 5 then
tsStainfo.Show;
if btnAdd.Caption = '添 加' then
begin
aqStaInfo.Append;
case pcSta.ActivePageIndex of
0: SetState(ssSta, otAdd);
1: SetState(ssExper, otAdd);
2: SetState(ssFami, otAdd);
3: SetState(ssAP, otAdd);
4: SetState(ssTrain, otAdd);
end;
end
else if btnAdd.Caption = '提 交' then
begin
case pcSta.ActivePageIndex of
0: AddData(ssSta);
1: AddData(ssExper);
2: AddData(ssFami);
3: AddData(ssAP);
4: AddData(ssTrain);
end;
end
else
begin
case pcSta.ActivePageIndex of
0: UpdateData(ssSta);
1: UpdateData(ssExper);
2: UpdateData(ssFami);
3: UpdateData(ssAP);
4: UpdateData(ssTrain);
end;
end;
end;
procedure TfrmStainfo.btnInquClick(Sender: TObject);
begin
frmPer.miInqusClick(Sender);
end;
procedure TfrmStainfo.btnPriorClick(Sender: TObject);
begin
if tvPer.Selected.AbsoluteIndex > 0 then
begin
tvPer.Selected := tvPer.Items[tvPer.Selected.AbsoluteIndex - 1];
if tvPer.Selected.Data <> nil then
begin
tvPerClick(Sender);
tvPer.SetFocus;
end
else
btnPriorClick(Sender);
end;
end;
procedure TfrmStainfo.btnNextClick(Sender: TObject);
begin
if tvPer.Selected.AbsoluteIndex < tvPer.Items.Count - 1 then
begin
tvPer.Selected := tvPer.Items[tvPer.Selected.AbsoluteIndex + 1];
if tvper.Selected.Data <> nil then
begin
tvPerClick(Sender);
tvPer.SetFocus;
end
else
btnNextClick(Sender);
end;
end;
procedure TfrmStainfo.btnDelClick(Sender: TObject);
var
sid: integer;
begin
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
sid := tvPer.Selected.AbsoluteIndex;
aqStaInfo.Delete;
aqStaInfo.UpdateBatch();
if aqStaInfo.RecordCount = 0 then
btnEdit.Enabled := false
else
btnEdit.Enabled := true;
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]
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;
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;
end;
end;
procedure TfrmStainfo.btnCloseClick(Sender: TObject);
begin
Close();
end;
//******************************
procedure TfrmStainfo.FormActivate(Sender: TObject);
begin
pcsta.ActivePage := tsStainfo;
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, path: string;
begin
if odimg.Execute then
begin
imgstr := ExtractFileName(odimg.FileName);
path := ExtractFilePath(Application.ExeName);
if not FileExists(path + '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(path + 'images\' + aqImg.Fieldbyname('image').AsString) then
DeleteFile(path + 'images\' + aqImg.Fieldbyname('image').AsString);
CopyFile(Pchar(odimg.FileName), pchar(path + 'images\' + imgstr), false);
aqImg.Close;
aqImg.sql.Clear;
aqImg.SQL.Text := 'update stainfo set [image]="' + imgstr + '" where id=' + IntToStr(id);
aqImg.ExecSQL;
imgi.Picture.LoadFromFile(path + 'images\' + imgstr);
MessageBox(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;
path: string;
begin
if MessageBox(handle, '真的要删除此员工照片吗?', '提示', mb_IconQuestion + mb_OkCancel) = idOk then
begin
path := ExtractFilePath(Application.ExeName);
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(path + 'images\' + aqImg.Fieldbyname('image').AsString) then
begin
deletefile(path + 'images\' + aqImg.Fieldbyname('image').AsString);
imgi.Picture.LoadFromFile(path + 'images\imgd.jpg');
MessageBox(handle, '照片删除成功!', '提示', mb_IconInformation + mb_Ok);
end
else
MessageBox(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;
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('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('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('[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;
stAge:
begin
dmPer.OpenStat('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('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('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.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;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -