⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lbfz.pas

📁 有需要的同仁载回去慢慢研究
💻 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 + -