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

📄 bmxx.pas

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