📄 bmxx.pas
字号:
unit BMXX;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, ComCtrls, Buttons;
type
TFrmBmxx = class(TForm)
Panel1: TPanel;
Panel3: TPanel;
BtnAppend: TBitBtn;
BtnEdit: TBitBtn;
BtnDelete: TBitBtn;
BtnSure: TBitBtn;
BtnCancel: TBitBtn;
BtnExit: TBitBtn;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
EditBmbh: TEdit;
EditBmmc: TEdit;
GroupBox2: TGroupBox;
DBGrid1: TDBGrid;
GroupBox3: TGroupBox;
TVbmxx: TTreeView;
Label3: TLabel;
EditGh: TEdit;
procedure FormShow(Sender: TObject);
procedure BtnAppendClick(Sender: TObject);
procedure BtnSureClick(Sender: TObject);
procedure BtnDeleteClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BtnEditClick(Sender: TObject);
procedure BtnCancelClick(Sender: TObject);
procedure TVbmxxChange(Sender: TObject; Node: TTreeNode);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
MyStatus : String;
procedure ShowTree();
procedure ShowMyButton();
public
{ Public declarations }
end;
type
PMyRec = ^TMyRec;
TMyRec = record
Fbmbh: string;
Fbmmc: string;
Fgh: String;
end;
var
FrmBmxx: TFrmBmxx;
implementation
uses DGSDM, mycommon, YGXX;
{$R *.DFM}
procedure TFrmBmxx.ShowTree();
var
MyTreeNode: TTreeNode;
MyRecPtr: PMyRec;
len,plen:integer;
s1,ss:string;
i:integer;
begin
with TVbmxx.Items do
begin
BeginUpdate;
Clear; { remove any existing nodes }
New(MyRecPtr);
MyRecPtr^.Fbmbh:= '';
MyRecPtr^.Fbmmc:= '公司';
MyRecPtr^.Fgh:= '';
AddObject(nil,'公司',MyRecPtr); { Add a root node }
len:=2; //初值
plen:=0; //初值
repeat
with DM_GSGL.QryTemp do
begin
Close();
SQL.Clear();
SQL.Add('select * from 部门信息 where LEN(部门编号)=:plength order by 部门编号');
Prepare();
ParamByName('plength').AsInteger:=len; //find the length=father's+2=(level+1)*2
Open();
if RecordCount>0 then
begin
First();
while not Eof do
begin
S1:=Fields.FieldByName('部门编号').AsString;
sS:=Copy(S1,0,plen);
New(MyRecPtr);
MyRecPtr^.Fbmbh:=Fields.FieldByName('部门编号').AsString;
MyRecPtr^.Fbmmc:=Fields.FieldByName('部门名称').AsString;
MyRecPtr^.Fgh:=Fields.FieldByName('工时汇报员工号').AsString;
for i:=0 to Count-1 do
if ss=PMyRec(Item[i].Data)^.Fbmbh then
MyTreeNode:=Item[i];
S1:=Fields.FieldByName('部门名称').AsString+'('+fields.fieldbyname('部门编号').asstring+')';
AddChildObject(MyTreeNode,s1,MyRecPtr);
Next();
end ;
end;
end;
len:=len+2;
plen:=plen+2;
until DM_GSGL.QryTemp.RecordCount=0;
EndUpdate;
end;
end;
procedure TFrmBmxx.FormShow(Sender: TObject);
begin
MyStatus := '浏览';
ShowTree;
TVbmxx.Selected:=TVBmxx.Items.GetFirstNode;
ShowMyButton;
end;
procedure TFrmBmxx.BtnAppendClick(Sender: TObject);
var
MyTreeNode: TTreeNode;
MyRecPtr: PMyRec;
begin
if (TVbmxx.Selected = nil) then
begin
MessageDlg('请先在左边的部门浏览树中选择上级部门。',mtError, [mbYes],0);
exit;
end;
New(MyRecPtr);
MyRecPtr^.Fbmbh:= 'NULL';
MyRecPtr^.Fbmmc:='新部门';
MyRecPtr^.Fgh:='';
MyTreeNode := TVbmxx.Items.AddChildObject(TVbmxx.Selected,'新部门',MyRecPtr);
TVbmxx.Selected := MyTreeNode;
EditBmBh.Text:=PMyRec(MyTreeNode.Parent.Data)^.Fbmbh;
EditBmBh.MaxLength:=Length(PMyRec(MyTreeNode.Parent.Data)^.Fbmbh)+2;
MyStatus := '增加';
Editbmmc.Text := '新部门';
Editbmbh.SetFocus;
EditGh.Text := UserName;
ShowMyButton;
end;
procedure TFrmBmxx.BtnSureClick(Sender: TObject);
var
tmpbmbh,tmpparentbmbh:string;
begin
tmpbmbh:=trim(Editbmbh.Text);
tmpparentbmbh:=PMyRec(TVbmxx.Selected.Parent.Data)^.Fbmbh;
if (Length(tmpbmbh)<Editbmbh.MaxLength) then
begin
MessageDlg('部门编号输入的长度不够!',mtError, [mbYes],0);
EditBmbh.SetFocus;
exit;
end;
if ((Length(tmpbmbh)>=4) and (copy(tmpbmbh,0,Length(tmpbmbh)-2)<>tmpparentbmbh)) then
begin
MessageDlg('部门编号必须以上级部门编号开头!',mtError, [mbYes],0);
EditBmbh.Text:=tmpparentbmbh;
EditBmbh.SetFocus;
exit;
end;
if (trim(Editbmmc.Text)='') then
begin
MessageDlg('请输入部门名称!',mtError, [mbYes],0);
EditBmmc.SetFocus;
exit;
end;
if (MyStatus = '增加') then
begin
MyStatus := '浏览';
with DM_GSGL do
begin
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('INSERT INTO 部门信息');
QryTemp.SQL.Add('(部门编号, 部门名称,工时汇报员工号)');
QryTemp.SQL.Add(' VALUES ('+''''+Editbmbh.Text+'''');
QryTemp.SQL.Add(','+''''+Editbmmc.Text+'''');
QryTemp.SQL.Add(','+''''+Editgh.Text+''''+')');
QryTemp.ExecSql;
PMyRec(TVbmxx.Selected.Data)^.Fbmbh:=EditBmbh.Text;
PMyRec(TVbmxx.Selected.Data)^.Fbmmc:=EditBmmc.Text;
PMyRec(TVbmxx.Selected.Data)^.Fgh:=Editgh.Text;
TVbmxx.Selected.Text:=Editbmmc.Text+'('+EditBmbh.Text+')';
end;
end;
if (MyStatus = '编辑') then
begin
MyStatus := '浏览';
with DM_GSGL do
begin
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('Update 部门信息');
QryTemp.SQL.Add('Set 部门名称='+''''+Editbmmc.Text+'''');
QryTemp.SQL.Add(',工时汇报员工号='+''''+Editgh.Text+'''');
QryTemp.SQL.Add('Where 部门编号='+EditBmbh.Text);
QryTemp.ExecSql;
TVBmxx.Selected.Text := Editbmmc.Text+'('+EditBmbh.Text+')';
PMyRec(TVbmxx.Selected.Data)^.Fbmmc:=EditBmmc.Text;
PMyRec(TVbmxx.Selected.Data)^.Fgh:=Editgh.Text;
end;
end;
ShowMyButton;
end;
procedure TFrmBmxx.BtnDeleteClick(Sender: TObject);
var
i:integer;
begin
if (TVbmxx.Selected = nil) then
begin
MessageDlg('请在左边的部门浏览树中选择欲删除的部门。',mtError, [mbYes],0);
exit;
end;
if DM_GSGL.QryYg.RecordCount>0 then
begin
MessageDlg('本部门还有员工,不能删除该部门!',mtError, [mbYes],0);
exit;
end
else
if (MessageDlg('删除当前部门:'+Editbmmc.Text+'和其下属部门吗?',mtConfirmation, [mbYes, mbNo],0)=mrYes) Then
begin
with DM_GSGL.QryTemp do
begin
if Active=true then
Close;
SQL.Clear;
SQL.Add('Delete From 部门信息');
SQL.Add('Where 部门编号 like '+''''+PMyRec(TVbmxx.Selected.Data)^.Fbmbh+'%'+'''');
ExecSql;
end;
for i:=0 to TVbmxx.Items.Count-1 do
Dispose(PMyRec(TVbmxx.Items[i].Data));
ShowTree;
TVbmxx.Selected:=TVBmxx.Items.GetFirstNode;
end;
end;
procedure TFrmBmxx.ShowMyButton();
begin
if (MyStatus='浏览') Then
begin
Editbmbh.ReadOnly := True;
Editbmmc.ReadOnly := True;
EditGh.ReadOnly := True;
GroupBox3.Enabled := true;
BtnAppend.Enabled := True;
BtnEdit.Enabled := True;
BtnDelete.Enabled := True;
BtnExit.Enabled := True;
BtnSure.Enabled := False; //Sure Button
BtnCancel.Enabled := False; //Cancel Button
end
else
begin
if (MyStatus='增加') Then
Editbmbh.ReadOnly := False
else
Editbmbh.ReadOnly := True;
Editbmmc.ReadOnly := False;
EditGh.ReadOnly := False;
GroupBox3.Enabled := False;
BtnAppend.Enabled := False;
BtnEdit.Enabled := False;
BtnDelete.Enabled := False;
BtnExit.Enabled := False;
BtnSure.Enabled := True; //Sure Button
BtnCancel.Enabled := True; //Cancel Button
end;
end;
procedure TFrmBmxx.FormClose(Sender: TObject; var Action: TCloseAction);
var
i : Integer;
begin
with DM_GSGL do
begin
if (QryTemp.Active = True) then
QryTemp.Close;
if (QryTemp1.Active = True) then
QryTemp1.Close;
if (QryMeber.Active = True) Then
QryMeber.Close;
end;
for i:=0 to TVbmxx.Items.Count-1 do
Dispose(PMyRec(TVbmxx.Items[i].Data));
end;
procedure TFrmBmxx.BtnEditClick(Sender: TObject);
begin
if (TVbmxx.Selected.Level=0) then
begin
MessageDlg('请选择要修改的部门。',mtError, [mbYes],0);
exit;
end;
MyStatus := '编辑';
ShowMyButton;
Editbmmc.SetFocus;
end;
procedure TFrmBmxx.BtnCancelClick(Sender: TObject);
begin
if (MyStatus = '增加') then
begin
MyStatus := '浏览';
Dispose(PMyRec(TVbmxx.Selected.Data));
TVbmxx.Items.Delete(TVbmxx.Selected);
end;
if (MyStatus = '编辑') then
begin
MyStatus := '浏览';
EditBmmc.Text:=PMyRec(TVbmxx.Selected.Data)^.Fbmmc;
Editgh.Text:=PMyRec(TVbmxx.Selected.Data)^.Fgh;
end;
ShowMyButton;
end;
procedure TFrmBmxx.TVbmxxChange(Sender: TObject; Node: TTreeNode);
begin
Editbmbh.Text := PMyRec(TVbmxx.Selected.Data)^.Fbmbh;
Editbmmc.Text := PMyRec(TVbmxx.Selected.Data)^.Fbmmc;
EditGh.Text := PMyRec(TVbmxx.Selected.Data)^.Fgh;
With DM_GSGL.QryYg do
begin
if (Active = True) Then
Close;
Params[0].AsString := PMyRec(TVbmxx.Selected.Data)^.Fbmbh+'%';
Open;
end;
end;
procedure TFrmBmxx.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
UserSelect : Word;
begin
if (MyStatus <> '浏览') then
begin
UserSelect := MessageDlg('是否保存改动的部门信息?',mtConfirmation, [mbYes, mbNo, mbCancel],0);
case UserSelect of
mrYes: BtnSureClick(Sender);
mrNo: BtnCancelClick(Sender);
mrCancel: CanClose := False ;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -