📄 emp_pay.pas
字号:
unit Emp_Pay;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls,
ComCtrls, DBCtrls, Mask;
type
TForm_Emp_Pay = class(TForm)
DBGrid: TDBGrid;
Panel2: TPanel;
Label3: TLabel;
Bevel1: TBevel;
Panel3: TPanel;
AddBtn: TBitBtn;
DelBtn: TBitBtn;
SaveBtn: TBitBtn;
CancelBtn: TBitBtn;
ExtBtn: TBitBtn;
DBNavigator1: TDBNavigator;
Label1: TLabel;
Label2: TLabel;
Label4: TLabel;
Label19: TLabel;
ComboBox_ID: TComboBox;
edtname: TEdit;
edtsex: TEdit;
ADOQtmp: TADOQuery;
Label5: TLabel;
Edtduty: TEdit;
DataSource1: TDataSource;
ADOQ_Emp_Pay: TADOQuery;
ADOQuery1: TADOQuery;
ADOQ_Emp_Payempid: TIntegerField;
ADOQ_Emp_Paypay: TBCDField;
ADOQ_Emp_Payempname: TStringField;
ADOQ_Emp_Paysex: TStringField;
ADOQ_Emp_Paydutyname: TStringField;
ADOQ_Emp_Paydepname: TStringField;
ADOQuery1empid: TIntegerField;
ADOQuery1pay: TBCDField;
ADOQuery1empname: TStringField;
ADOQuery1sex: TStringField;
ADOQuery1depname: TStringField;
DBE_Pay: TDBEdit;
ADOQuery1dutyname: TStringField;
ADOQ_Emp_Paystate: TBooleanField;
ADOQuery1state: TBooleanField;
procedure AddBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
procedure DelBtnClick(Sender: TObject);
procedure ComboBox_IDChange(Sender: TObject);
procedure ComboBox_IDKeyPress(Sender: TObject; var Key: Char);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure ADOQuery1AfterInsert(DataSet: TDataSet);
procedure ADOQuery1BeforePost(DataSet: TDataSet);
procedure DBE_PayKeyPress(Sender: TObject; var Key: Char);
procedure ADOQuery1AfterPost(DataSet: TDataSet);
procedure DataSource1StateChange(Sender: TObject);
procedure DataSource1DataChange(Sender: TObject; Field: TField);
private
{ Private declarations }
// procedure refreshdb;
public
{ Public declarations }
end;
var
Form_Emp_Pay: TForm_Emp_Pay;
implementation
uses data, sharefun, sharevar;
{$R *.dfm}
procedure TForm_Emp_Pay.FormShow(Sender: TObject);
begin
//添加人员编码
with ADOQtmp do
begin
close;sql.clear;
sql.add('select a.empid,a.empname,a.sex,b.dutyname from employee a, duty b');
sql.Add('where a.dutyid=b.dutyid and a.state=1 and a.grade<>''计件制''');
open;
if recordcount =0 then
begin
MsgErr(handle,'无人员信息!');
exit;
end;
// if ComboBox_ID.Items.Count>1 then
ComboBox_ID.Items.Clear;
first;
while not eof do
begin
ComboBox_ID.Items.Add(fieldvalues['empid']);
next;
end;
end;
ComboBox_ID.SetFocus;
end;
procedure TForm_Emp_Pay.AddBtnClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
if edtname.Text='' then
begin
MsgOk(handle,'员工姓名不能为空,请在员工编号文本框内输入员工编号,再按回车键!');
exit;
end;
if ADOQuery1.Locate('empid',trim(combobox_id.Text),[]) then
begin
Msgok(handle, '编号 ['+trim(combobox_id.Text)+'] 的人员已有月薪收入档案,请重新选择员工!');
exit;
end;
ADOQuery1.Append;
DBE_Pay.SetFocus;
end;
procedure TForm_Emp_Pay.CancelBtnClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
ADOQuery1.cancel;
end;
procedure TForm_Emp_Pay.SaveBtnClick(Sender: TObject);
begin
if not ADOQuery1.Active then exit;
ADOQuery1.Post;
end;
procedure TForm_Emp_Pay.DelBtnClick(Sender: TObject);
var empid:string;
begin
if not ADOQuery1.Active then exit;
if ADOQuery1.RecordCount = 0 then exit;
empid:=inttostr(adoquery1.FieldValues['empid']);
if ADOQuery1.FieldValues['state']=0 then
begin
MsgErr(handle,'该员工已离职致月薪收入不能更改!');
abort; exit;
end;
if MsgQst(handle,'确定删除编号为 ['+empid+'] 的员工 ['+adoquery1.FieldValues['empname']+'] 的月薪档案码?') =IDNO then exit;
try
ADOQuery1.Delete;
except
abort;
MsgErr(handle,'当前数据在相关连的表中用到,不能删除!');
end;
end;
procedure TForm_Emp_Pay.ComboBox_IDChange(Sender: TObject);
begin
ComboBox_ID.Text:=trim(ComboBox_ID.Text);
edtname.Clear;
end;
procedure TForm_Emp_Pay.ComboBox_IDKeyPress(Sender: TObject;
var Key: Char);
begin
if not ( key in ['0'..'9',chr(8),chr(13)]) then abort;
if trim(ComboBox_ID.Text)='' then exit;
if key = chr(13) then
if not adoqtmp.Locate('empid',trim(ComboBox_ID.Text),[loCaseInsensitive]) then
begin
MsgErr(handle,'人员编码 ['+trim(ComboBox_ID.Text)+'] 不存在或者该人员为计件制!');
exit;
end
else
begin
edtname.Text:=adoqtmp.FieldValues['empname'];
edtsex.Text:=adoqtmp.FieldValues['sex'];
Edtduty.Text:=adoqtmp.FieldValues['dutyname'];
ADOQuery1.Locate('empid',trim(combobox_id.Text),[]);
end;
end;
procedure TForm_Emp_Pay.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree;
end;
procedure TForm_Emp_Pay.FormCreate(Sender: TObject);
begin
if not ADOQ_Emp_Pay.Active then ADOQ_Emp_Pay.Open;
if not ADOQuery1.Active then ADOQuery1.Open;
end;
procedure TForm_Emp_Pay.ADOQuery1AfterInsert(DataSet: TDataSet);
begin
ADOQuery1.FieldValues['empid']:=trim(ComboBox_ID.Text);
ADOQuery1.FieldValues['pay']:=0.00;
end;
procedure TForm_Emp_Pay.ADOQuery1BeforePost(DataSet: TDataSet);
var info:string;
begin
if not (Dataset.State in[dsedit,dsinsert]) then begin abort; exit; end;
if trim(edtname.text)='' then begin abort; exit; end;
if (Dataset.State in [dsedit]) then
begin
if Dataset.FieldValues['empid']<>trim(ComboBox_ID.Text) then
begin
MsgErr(handle,'待编辑的员工编号与员工编号文本框内的号码不一致'+#13+#13' 请按[取消]键后再重新操作!');
abort; exit;
end;
if Dataset.FieldValues['state']=0 then
begin
MsgErr(handle,'该员工已离职致月薪收入不能更改!');
abort; exit;
end;
end;
if not ToMoney(floattostr(Dataset.FieldValues['pay']),info) then
begin
MsgErr(handle,'月薪金额格式不对[0.00]!');
DBE_Pay.SetFocus; abort; exit;
end;
if Dataset.FieldValues['pay']<=0 then
begin
MsgErr(handle,'员工月薪收入不能为0!');
DBE_Pay.SetFocus; abort; exit;
end;
if (Dataset.State in [dsedit]) then
begin
if MsgQst(handle,'确认保存员工编号为 ['+inttostr(ADOQuery1.FieldValues['empid'])+'] 的员工 ['+ADOQuery1.FieldValues['empname']+'] 月薪收入的修改吗?')=idno
then begin abort; exit; end;
end;
if (Dataset.State in [dsinsert]) then
begin
if MsgQst(handle,'确认保存员工编号为 ['+inttostr(ADOQuery1.FieldValues['empid'])+'] 的员工 ['+edtname.Text+'] 月薪收入的增加吗?')=idno
then begin abort; exit; end;
end;
end;
procedure TForm_Emp_Pay.DBE_PayKeyPress(Sender: TObject; var Key: Char);
begin
if not ( key in ['0'..'9','.',chr(8),chr(13)]) then abort;
end;
procedure TForm_Emp_Pay.ADOQuery1AfterPost(DataSet: TDataSet);
var empid:integer;
begin
with ADOQ_Emp_Pay do
begin
close; sql.Clear;
sql.Add('select a.*,b.empname,b.sex,b.state,c.dutyname,d.depname');
sql.Add('from emp_pay a, employee b,duty c,department d');
sql.Add('where a.empid=b.empid and b.dutyid=c.dutyid and b.depid=d.depid');
sql.Add('order by d.depname, c.dutyname, b.sex');
execsql; open;
end;
empid:=adoquery1.FieldValues['empid'];
adoquery1.close; adoquery1.Open;
adoquery1.Locate('empid',empid,[]);
end;
procedure TForm_Emp_Pay.DataSource1StateChange(Sender: TObject);
begin
if (Sender as TDataSource).DataSet.State in [dsedit,dsinsert] then
Begin
AddBtn.Enabled :=False;
DelBtn.Enabled :=False;
CancelBtn.Enabled :=True;
SaveBtn.Enabled :=True;
ExtBtn.Enabled :=False;
end;
if (Sender as TDataSource).DataSet.State in [dsBrowse] then
Begin
AddBtn.Enabled :=True;
DelBtn.Enabled :=True;
CancelBtn.Enabled :=False;
SaveBtn.Enabled :=False;
ExtBtn.Enabled :=True;
end;
end;
procedure TForm_Emp_Pay.DataSource1DataChange(Sender: TObject;
Field: TField);
begin
with adoquery1 do
begin
if not (adoquery1.State in [dsbrowse]) then exit;
if adoquery1.RecordCount=0 then exit;
ComboBox_ID.Text:=FieldValues['empid'];
if FieldValues['empname']<>null then edtname.Text:=FieldValues['empname'];
if FieldValues['sex']<>null then edtsex.Text:=FieldValues['sex'];
if FieldValues['dutyname']<>null then Edtduty.Text:=FieldValues['dutyname'];
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -