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

📄 ufrmworkshop.pas

📁 水电管理系统,介绍了水电管理系统的基本结构和基本功能,对进行这方面的开发人员有一定帮助
💻 PAS
字号:
unit ufrmWorkshop;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, StdCtrls, Buttons, ExtCtrls, ComCtrls, Db, ADODB, XPMenu;

type
  {车间结构}
  PWorkShop = ^TWorkShop;
  TWorkShop = Record
    ID:   LongInt;          //车间ID
    Name: String;           //车间名称
    Description: String;    //车间描述
    Level:       Integer;   //车间级别
    ResideLevel: Integer;   //上级车间级别
  End;

  TfrmWorkshop = class(TForm)
    TVWorkShop: TTreeView;
    Panel3: TPanel;
    Label2: TLabel;
    Label3: TLabel;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    edtWorkShopName: TEdit;
    edtWorkShopMemo: TEdit;
    PopupMenu1: TPopupMenu;
    N2: TMenuItem;
    N1: TMenuItem;
    N3: TMenuItem;
    N5: TMenuItem;
    N4: TMenuItem;
    DataSource1: TDataSource;
    adoWorkshop: TADOQuery;
    XPMenu1: TXPMenu;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
    FSubQuery: TADOQuery;
    Procedure ReadAllWorkShop(SubTreeNode: TTreeNode; iLevelCount: Integer);  //读出所有的车间
    Procedure ReadBure;                                     //读站(段)

    Procedure AddSubWorkShop;                        //增加车间班组
    Procedure DeleteSubWorkShop;                     //删除车间
    Procedure EditWorkShop;                          //修改车间班组信息
  public
    { Public declarations }
  end;

var
  frmWorkshop: TfrmWorkshop;

implementation

uses UCommon, uConst;

var
  WorkShop,
  SubWorkShop: PWorkShop;
  EditWorkShopP: PWorkShop;  //修改
  IsEdit: Boolean;

{$R *.DFM}

procedure TfrmWorkshop.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfrmWorkshop.FormDestroy(Sender: TObject);
begin
  frmWorkshop := nil;
end;

procedure TfrmWorkshop.BitBtn3Click(Sender: TObject);
begin
  Panel3.Visible := False;
  Exit;
end;

procedure TfrmWorkshop.FormCreate(Sender: TObject);
begin
  Sdgl.SetConnectString(adoWorkshop);
  Panel3.Visible := False;
  FSubQuery := TADOQuery.Create(nil);
  Sdgl.SetConnectString(FSubQuery);
end;

procedure TfrmWorkshop.ReadAllWorkShop(SubTreeNode: TTreeNode;
  iLevelCount: Integer);
var
  WorkShopNode,
  SubWorkShopNode: TTreeNode;
begin
  with adoWorkshop do begin
    if not Active then Open;

    Filter := 'WorkShopLevel = ' + IntToStr(iLevelCount);
    Filtered := True;

    First;
    While Not Eof Do
    Begin
      New(WorkShop);
      WorkShop^.ID    := FieldByName('WrokShopID').AsInteger;
      WorkShop^.Name  := FieldByName('WrokShopName').AsString;
      WorkShop^.Level := FieldByName('WorkShopLevel').AsInteger;
      WorkShop^.Description := FieldByName('WrokShopMemo').AsString;
      WorkShop^.ResideLevel := FieldByName('ResideWorkShopID').AsInteger;

      WorkShopNode := TVWorkShop.Items.AddChildObject(SubTreeNode, WorkShop.Name, WorkShop);

      //读取所属的班组
      With FSubQuery Do
      Begin
        Close;
        SQL.Clear;
        SQL.Add('Select * from Workshop');
        Open;
        Filter := 'WorkShopLevel = ' + IntToStr(iLevelCount + 1) +
                 ' and ResideWorkShopID ='+ IntToStr(WorkShop.ID);
        Filtered := True;
        First;
        
        While Not Eof Do
        Begin
          New(SubWorkShop);
          SubWorkShop^.ID    := FieldByName('WrokShopID').AsInteger;
          SubWorkShop^.Name  := FieldByName('WrokShopName').AsString;
          SubWorkShop^.Level := FieldByName('WorkShopLevel').AsInteger;
          SubWorkShop^.Description := FieldByName('WrokShopMemo').AsString;
          SubWorkShop^.ResideLevel := FieldByName('ResideWorkShopID').AsInteger;

          SubWorkShopNode := TVWorkShop.Items.AddChildObject(WorkShopNode, SubWorkShop.Name, SubWorkShop);
          Next;
        End;
      End;
      Next;
    End;    //end while
  End;      //end frmdm.adoworkshop

end;


procedure TfrmWorkshop.ReadBure;
var
  WorkShopNode,
  MyFirstNode: TTreeNode;
begin
  New(SubWorkShop);
  if Sdgl.CurUnitName <> '' then
  begin
    SubWorkShop^.ID := 1;
    SubWorkShop^.Name := Sdgl.CurUnitName;
    SubWorkShop^.Description := Sdgl.CurUnitName;
    SubWorkShop^.Level := 0;
    SubWorkShop^.ResideLevel := 0;

    MyFirstNode := TVWorkShop.Items.AddObject(nil, Sdgl.CurUnitName, SubWorkShop);
    //DisPose(SubWorkShop);
  end
  else
  begin
     Sdgl.ShowErrMsg('请首先设置使用单位!');
     Close;
     Exit;
  end;

  With ADOWorkShop Do
  Begin
    Filter := 'WorkShopLevel = ' + '1';
    Filtered := True;
    open;
    
    First;
    while not Eof do begin
      New(WorkShop);
      WorkShop^.ID    := FieldByName('WrokShopID').AsInteger;
      WorkShop^.Name  := FieldByName('WrokShopName').AsString;
      WorkShop^.Level := FieldByName('WorkShopLevel').AsInteger;
      WorkShop^.Description := FieldByName('WrokShopMemo').AsString;
      WorkShop^.ResideLevel := FieldByName('ResideWorkShopID').AsInteger;
      if WorkShop^.Name <> '' then
        WorkShopNode := TVWorkShop.Items.AddChildObject(MyFirstNode, WorkShop.Name, WorkShop);

      Next;
    end;
  End;
  
  ReadAllWorkShop(WorkShopNode, 2);
end;

procedure TfrmWorkshop.FormShow(Sender: TObject);
begin
  ReadBure;
end;

procedure TfrmWorkshop.AddSubWorkShop;
var
  SubWorkShopNode: TTreeNode;
  strAppendWorkShop: String;
begin
  New(SubWorkShop);

  If TVWorkShop.Items.Count = 0 Then    //增加站(段)
  Begin
    SubWorkShop^.Level := 0;
    SubWorkShop^.Name  := edtWorkShopName.Text;
    SubWorkShop^.Description :=edtWorkShopMemo.Text;
    SubWorkShop^.ResideLevel := 0;

    SubWorkShopNode := TVWorkShop.Items.AddChildObject(nil, edtWorkShopName.Text, SubWorkShop);
  End
  Else If TVWorkShop.Selected <> nil Then
  Begin
    SubWorkShop^.Level := TVWorkShop.Selected.Level + 1; //PWorkShop(TVWorkShop.Selected.Data)^.Level + 1;
    SubWorkShop^.Name  := Trim(edtWorkShopName.Text);
    SubWorkShop^.Description := Trim(edtWorkShopMemo.Text);
    SubWorkShop^.ResideLevel := PWorkShop(TVWorkShop.Selected.Data)^.ID;

    SubWorkShopNode := TVWorkShop.Items.AddChildObject(TVWorkShop.Selected, edtWorkShopName.Text, SubWorkShop);
  End
  Else
    Exit;

  //write to database
  With ADOWorkShop Do
  Begin
    Try
    Append;
    FieldByName('WrokShopName').AsString   := SubWorkShop^.Name;
    FieldByName('WorkShopLevel').AsInteger := SubWorkShop^.Level;
    FieldByName('WrokShopMemo').AsString   := SubWorkShop^.Description;
    FieldByName('ResideWorkShopID').AsInteger := SubWorkShop^.ResideLevel;
    //Try
      Post;
    Except
      Sdgl.ShowErrMsg('车间(班组)增加失败!');
    End;
  End;

  Dispose(SubWorkShop);
end;

procedure TfrmWorkshop.N2Click(Sender: TObject);
//var
  //Temp: PWorkShop;
begin
  //New(Temp);

  if TVWorkShop.Selected = nil then Exit;

  //Temp := PWorkShop(TVWorkShop.Selected.Data);
  //If Temp^.Level >= 3 Then
  if TVWorkShop.Selected.Level >= 3 then
  Begin
    ShowMessage('不能增加班组以下的单位!');
    Exit;
  End;

  Panel3.Visible := True;
  edtWorkShopName.SetFocus;
  //Dispose(Temp);
end;


procedure TfrmWorkshop.N3Click(Sender: TObject);
begin
  IsEdit := True;

  If TVWorkShop.Selected = nil Then Exit;

  Panel3.Visible := True;
  edtWorkShopName.SetFocus;

  New(EditWorkShopP);
  EditWorkShopP := TVWorkShop.Selected.Data;
  edtWorkShopName.Text := EditWorkShopP^.Name;
  edtWorkShopMemo.Text := EditWorkShopP^.Description;
end;

procedure TfrmWorkshop.N4Click(Sender: TObject);
begin
  If MessageBox(Handle, Pchar(DeleteWorkShop), Pchar(DeleteHits), MB_YESNO Or
                MB_ICONQUESTION) = IDYES Then
    DeleteSubWorkShop;
end;

procedure TfrmWorkshop.DeleteSubWorkShop;
var
  subWorkShopP: PWorkShop;
  StrDeleteSQL: String;  //delete string
begin
  With TVWorkShop.Items Do
  Begin
    If Count = 0 Then
      Exit
    Else If TVWorkShop.Selected <> nil Then
    Begin
      subWorkShopP := TVWorkShop.Selected.Data;
      if subWorkShopP^.Level <> 0 then
        Delete(TVWorkShop.Selected)
      else begin
        Sdgl.ShowErrMsg('不能删除当前使用单位!');
        Exit;
      end;
    End
    Else
      Exit;

    StrDeleteSQL := 'Delete from WorkShop where WrokShopID = ' + IntToStr(subWorkShopP^.ID) +
                  ' or ResideWorkShopID = ' + IntToStr(subWorkShopP^.ID);
    With FSubQuery Do
    Begin
      Close;
      SQL.Clear;
      SQL.Text := StrDeleteSQL;
      Try
        ExecSQL;
      Except
        Sdgl.ShowErrMsg('删除车间班组出错!');
        Exit;
      End;
    End;

  End;
end;

procedure TfrmWorkshop.EditWorkShop;
var
  strUpdateWorkShop: String;
Begin
  strUpdateWorkShop := 'Update WorkShop set WrokShopName=''' + edtWorkShopName.Text +
             ''', WrokShopMemo=''' + edtWorkShopMemo.Text +
             ''' where WrokShopID = ' + IntToStr(EditWorkShopP^.ID);
  With FSubQuery Do
  Begin
    Close;
    SQL.Clear;
    SQL.Text := strUpdateWorkShop;
    Try
      ExecSQL;
    Except
      ShowMessage('车间班组信息更新失败!');
      IsEdit := False;
      Exit;
    End;
  End;

  With ADOWorkShop Do
  Begin
    Close;
    SQL.Clear;
    SQL.Text := 'Select * from Workshop order by WrokShopID';
    Open;
    //If Not Active Then Open;
    Filter := 'WrokShopID = ' + IntToStr(EditWorkShopP^.ID);
    Filtered := True;

    First;
    EditWorkShopP^.ID   := FieldByName('WrokShopID').AsInteger;
    EditWorkShopP^.Name := FieldByName('WrokShopName').AsString;
    EditWorkShopP^.Description := FieldByName('WrokShopMemo').AsString;
    EditWorkShopP^.Level       := FieldByName('WorkShopLevel').AsInteger;
    EditWorkShopP^.ResideLevel := FieldByName('ResideWorkShopID').AsInteger;
    TVWorkShop.Selected.Text := EditWorkShopP^.Name;
  End;

  IsEdit := False;
end;

procedure TfrmWorkshop.BitBtn2Click(Sender: TObject);
begin
  If (edtWorkShopName.Text = '') Or (edtWorkShopMemo.Text = '') Then
  Begin
    ShowMessage('请输入车间班组名称或描述!');
    Exit;
  End;

  If Not IsEdit Then AddSubWorkShop
  Else EditWorkShop;

  Panel3.Visible := False;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -