📄 lbfz.pas
字号:
unit LBFZ;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, ComCtrls, Buttons;
type
TFrmLbfz = class(TForm)
Panel1: TPanel;
Panel3: TPanel;
BtnAppend: TBitBtn;
BtnEdit: TBitBtn;
BtnDelete: TBitBtn;
BtnSure: TBitBtn;
BtnCancel: TBitBtn;
BtnExit: TBitBtn;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
EditFzmc: TEdit;
EditFzBz: TEdit;
GroupBox2: TGroupBox;
DBGrid1: TDBGrid;
GroupBox3: TGroupBox;
TVFzLbxx: 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 TVFzLbxxChange(Sender: TObject; Node: TTreeNode);
procedure TVFzLbxxChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
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
FFzbh: Integer;
FLbbh: integer;
FGLY: String;
FFzbz: String;
end;
var
FrmLbfz: TFrmLbfz;
implementation
uses DGSDM, mycommon;
{$R *.DFM}
procedure TFrmLbfz.ShowTree();
var
RootNode: TTreeNode;
MyTreeNode: TTreeNode;
MyRecPtr: PMyRec;
begin
with DM_GSGL do
begin
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('select 轮班编号,轮班名称');
QryTemp.SQL.Add('from 轮班信息');
QryTemp.Open;
if QryTemp1.Active=true then
QryTemp1.Close;
QryTemp1.SQL.Clear;
QryTemp1.SQL.Add('select *');
QryTemp1.SQL.Add('from 轮班分组信息');
QryTemp1.SQL.Add('where 分组管理员工号 like '+''''+'%'+userName+'%'+'''');
QryTemp1.Open;
end;
with TVFzLbxx.Items do
begin
BeginUpdate;
Clear; { remove any existing nodes }
New(MyRecPtr);
MyRecPtr^.FFzbh := -1;
MyRecPtr^.Flbbh := -1;
MyRecPtr^.FFzbz := '';
MyRecPtr^.FGLY := '';
RootNode := AddObject(nil,'所有轮班',MyRecPtr); { Add a root node }
while (not DM_GSGL.QryTemp.Eof) do
begin
New(MyRecPtr);
MyRecPtr^.Flbbh := DM_GSGL.QryTemp.FieldByName('轮班编号').Asinteger;
MyRecPtr^.FFzbh := 0;
MyRecPtr^.FFzbz := '';
MyTreeNode := AddChildObject(RootNode,DM_GSGL.QryTemp.FieldByName('轮班名称').AsString,MyRecPtr);
DM_GSGL.QryTemp1.First;
while (not DM_GSGL.QryTemp1.Eof) do
begin
if (DM_GSGL.QryTemp.FieldByName('轮班编号').AsString = DM_GSGL.QryTemp1.FieldByName('轮班编号').AsString) Then
begin
New(MyRecPtr);
MyRecPtr^.FLbbh := DM_GSGL.QryTemp1.FieldByName('轮班编号').AsInteger;
MyRecPtr^.FFzbh := DM_GSGL.QryTemp1.FieldByName('分组编号').AsInteger;
MyRecPtr^.FFzbz := DM_GSGL.QryTemp1.FieldByName('备注').AsString;
MyRecPtr^.FGLY := DM_GSGL.QryTemp1.FieldByName('分组管理员工号').AsString;
AddChildObject(MyTreeNode,DM_GSGL.QryTemp1.FieldByName('分组名称').AsString,MyRecPtr);
end;
DM_GSGL.QryTemp1.Next;
end;
DM_GSGL.QryTemp.Next;
end;
EndUpdate;
end;
end;
procedure TFrmLbfz.FormShow(Sender: TObject);
begin
EditGh.Text := '';
MyStatus := '浏览';
ShowMyButton;
ShowTree;
TVFzLbxx.Selected := TVFzLbxx.Items.GetFirstNode;
end;
procedure TFrmLbfz.BtnAppendClick(Sender: TObject);
var
MyTreeNode: TTreeNode;
MyRecPtr: PMyRec;
begin
if ((TVFzLbxx.Selected = nil) or (TVFzLbxx.Selected.Level=0)) then
begin
MessageDlg('您没有选择轮班。',mtError, [mbYes],0);
exit;
end;
New(MyRecPtr);
MyRecPtr^.FLbbh := PMyRec(TVFzLbxx.Selected.Data)^.FLbbh;
MyRecPtr^.FFzbh := -1;
MyRecPtr^.FFzbz := '';
if (TVFzLbxx.Selected.Level = 1) then
MyTreeNode := TVFzLbxx.Items.AddChildObject(TVFzLbxx.Selected,'新分组',MyRecPtr)
else
MyTreeNode := TVFzLbxx.Items.AddObject(TVFzLbxx.Selected,'新分组',MyRecPtr);
TVFzLbxx.Selected := MyTreeNode;
MyStatus := '增加';
EditFzmc.Text := '新分组';
EditFzBz.Text := '';
EditFzmc.SetFocus;
EditGh.Text := UserName;
ShowMyButton;
end;
procedure TFrmLbfz.BtnSureClick(Sender: TObject);
var
i:Integer;
TempMaxFzdm : Integer;
begin
if (Trim(EditFzmc.Text) = '') then
begin
MessageDlg('请指定分组名称。',mtError, [mbYes],0);
EditFzmc.SetFocus;
exit;
end;
if (Trim(EditGh.Text) = '') then
begin
MessageDlg('请指定分组管理员。',mtError, [mbYes],0);
EditGh.SetFocus;
exit;
end;
if (MyStatus = '增加') then
begin
with DM_GSGL do
begin
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('select 分组编号 from 轮班分组信息');
QryTemp.SQL.Add('where 轮班编号=:plbbh and 分组名称=:pfzmc and 分组管理员工号=:pgly');
QryTEmp.ParamByName('plbbh').asinteger:=PMyRec(TVFzLbxx.Selected.Data)^.FLbbh;
QryTEmp.ParamByName('pfzmc').asstring:=EditFzmc.Text;
QryTEmp.ParamByName('pgly').asstring:=EditGh.Text;
QryTemp.Open;
if not QryTemp.Eof then
begin
MessageDlg('同名的分组已经存在,不能增加,请输入新的分组名称。',mtError, [mbYes],0);
EditFzmc.SetFocus;
exit;
end;
MyStatus := '浏览';
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('INSERT INTO 轮班分组信息');
QryTemp.SQL.Add('(轮班编号,分组名称,分组管理员工号,备注)');
QryTemp.SQL.Add(' VALUES ('+inttostr(PMyRec(TVFzLbxx.Selected.Data)^.FLbbh));
QryTemp.SQL.Add(','+''''+EditFzmc.Text+'''');
QryTemp.SQL.Add(','+''''+EditGh.Text+'''');
QryTemp.SQL.Add(','+''''+EditFzbz.Text+''''+')');
QryTemp.ExecSql;
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('Select max(分组编号) MaxFzdm');
QryTemp.SQL.Add('From 轮班分组信息');
QryTemp.SQL.Add('Where 轮班编号='+inttostr(PMyRec(TVFzLbxx.Selected.Data)^.FLbbh));
QryTemp.SQL.Add('and 分组名称='+''''+EditFzmc.Text+'''');
QryTemp.SQL.Add('and 分组管理员工号='+''''+EditGh.Text+'''');
QryTemp.ExecSql;
QryTemp.Open;
PMyRec(TVFzLbxx.Selected.Data)^.FFzbh := QryTemp.Fields[0].AsInteger;
PMyRec(TVFzLbxx.Selected.Data)^.FGLY :=Editgh.Text;
TVFzLbxx.Selected.Text:=EditFzmc.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 分组名称='+''''+EditFzmc.Text+'''');
QryTemp.SQL.Add(',分组管理员工号='+''''+Editgh.Text+'''');
QryTemp.SQL.Add(',备注='+''''+EditFzbz.Text+'''');
QryTemp.SQL.Add('Where 分组编号='+IntToStr(PMyRec(TVFzLbxx.Selected.Data)^.FFzbh));
QryTemp.ExecSql;
TVFzLbxx.Selected.Text := EditFzmc.Text;
PMyRec(TVFzLbxx.Selected.Data)^.FFzbz := EditFzbz.Text;
PMyRec(TVFzLbxx.Selected.Data)^.FGly := EditGh.Text;
end;
end;
ShowMyButton;
end;
procedure TFrmLbfz.BtnDeleteClick(Sender: TObject);
begin
if (TVFzLbxx.Selected.Level<>2) then
begin
MessageDlg('请先在分组浏览器中选择要删除的分组。',mtError, [mbYes],0);
exit;
end
else
begin
if ansipos(userName,PMyRec(TVFzLbxx.Selected.Data)^.FGly)=0 then
begin
MessageDlg('您没有权限删除该分组。',mtError, [mbYes],0);
exit;
end;
if (MessageDlg('删除当前分组:'+EditFzmc.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 分组编号='+IntToStr(PMyRec(TVFzLbxx.Selected.Data)^.FFzbh));
ExecSql;
if Active=true then
Close;
SQL.Clear;
SQL.Add('update 员工信息 set 分组编号=null');
SQL.Add('Where 分组编号='+IntToStr(PMyRec(TVFzLbxx.Selected.Data)^.FFzbh));
ExecSql;
end;
Dispose(PMyRec(TVFzLbxx.Selected.Data));
TVFzLbxx.Items.Delete(TVFzLbxx.Selected);
end;
end;
end;
procedure TFrmLbfz.ShowMyButton();
begin
if (MyStatus='浏览') Then
begin
EditFzmc.ReadOnly := True;
EditFzbz.ReadOnly := True;
EditGh.ReadOnly := 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
EditFzmc.ReadOnly := False;
EditFzbz.ReadOnly := False;
EditGh.ReadOnly := 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 TFrmLbfz.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 TVFzLbxx.Items.Count-1 do
Dispose(PMyRec(TVFzLbxx.Items[i].Data));
end;
procedure TFrmLbfz.BtnEditClick(Sender: TObject);
begin
if (TVFzLbxx.Selected.Level<>2) then
begin
MessageDlg('请先在分组浏览器中选择要修改的分组。',mtError, [mbYes],0);
exit;
end;
if ansipos(userName,PMyRec(TVFzLbxx.Selected.Data)^.FGly)=0 then
begin
MessageDlg('您没有权限修改该分组。',mtError, [mbYes],0);
exit;
end;
MyStatus := '编辑';
ShowMyButton;
EditFzmc.SetFocus;
end;
procedure TFrmLbfz.BtnCancelClick(Sender: TObject);
begin
if (MyStatus = '增加') then
begin
MyStatus := '浏览';
Dispose(PMyRec(TVFzLbxx.Selected.Data));
TVFzLbxx.Items.Delete(TVFzLbxx.Selected);
ShowTree;
end;
if (MyStatus = '编辑') then
begin
MyStatus := '浏览';
with DM_GSGL do
begin
EditFzmc.Text := TVFzLbxx.Selected.Text;
EditFzBz.Text := PMyRec(TVFzLbxx.Selected.Data)^.FFzbz;
end;
end;
ShowMyButton;
end;
procedure TFrmLbfz.TVFzLbxxChange(Sender: TObject; Node: TTreeNode);
begin
if (TVFzLbxx.Selected.Level < 2) then
begin
EditFzmc.Text := '';
EditFzBz.Text := '';
EditGh.Text := '';
DM_GSGL.QryFzry.Close;
end
else
begin
EditFzmc.Text := TVFzLbxx.Selected.Text;
EditFzBz.Text := PMyRec(TVFzLbxx.Selected.Data)^.FFzbz;
EditGh.Text := PMyRec(TVFzLbxx.Selected.Data)^.FGly;
With DM_GSGL do
begin
if (QryFzry.Active = True) Then
QryFzry.Close;
QryFzry.Params[0].AsInteger := PMyRec(TVFzLbxx.Selected.Data)^.FFzbh;
QryFzry.Open;
end;
end;
end;
procedure TFrmLbfz.TVFzLbxxChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
if (MyStatus <> '浏览') then
AllowChange := False;
end;
procedure TFrmLbfz.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 + -