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

📄 untdptemp.~pas

📁 是分布式粮库程序,是采用Delphi实现的
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
  if node = nil then
  begin
    iSelectnodeparent := 0;
    NewNode.SelectedIndex := 10;
    NewNode.ImageIndex := 11;
  end
  else
  begin
    iSelectnodeparent := node.StateIndex; //得到该父结点的所对应的部门代码
    NewNode.SelectedIndex := 0;
    NewNode.ImageIndex := 1;
  end;
  newnode.Selected := true;
  ClearCtrl([frameDpt]);
  frameDpt.dedtDptName.SetFocus;
  //得到部门表中得到最大的部门代码
  try
    qryDptEmp.Active := false;
    qryDptEmp.SQL.Clear;
    qryDptEmp.SQL.Add('select isnull(Max(DptId),0) as maxDptId from Department');
    qryDptEmp.Active := true;
    iMaxDptid := qryDptEmp.FieldByname('maxDptId').asinteger + 1;
    frameDpt.stcDepcode.Caption := inttostr(iMaxDptid);
    frameDpt.stcupDptName.Caption := node.Text;
    bbtnOk.Enabled := true;
    bbtnCancel.Enabled := true;
  except
    on E: Exception do
    begin
      ErrorHandler(E, 'TfrmDptEmp.btnAddDptClick');
      Application.MessageBox('打开部门数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
    end;
  end;
  NewNode.StateIndex := iMaxDptid;
  bbtnAddDpt.Enabled := false;
  bbtnAddEmp.Enabled := false;
  bbntDelete.Enabled := false;
  bbtnmodify.Enabled := false;
  frameDpt.tblDpt.Append;

end;



procedure TfrmDptEmp.btnOkClick(Sender: TObject);
var
  newnode: TTreeNode;
begin
  if bAdd then //判断是否出去增加状态
  begin
    //增加部门记录
    if frameDpt.Visible then
    begin
      try
        {if frameDpt.cbxDptmaneger.Text <> '' then
        begin
          newnode := treeview1.Selected;
          newnode := TreeView1.Items.AddChild(newNode, frameDpt.cbxDptmaneger.Text); //在该父结点上增加新的结点
          NewNode.SelectedIndex := 3;
          NewNode.ImageIndex := 2;
          qryDptEmp.Active := false;
          qryDptEmp.SQL.Clear;
          qryDptEmp.SQL.Add('select isnull(Max(EmpID),0) as maxEmpId  from OA');
          qryDptEmp.Active := true;
          iMaxEmpid := qryDptEmp.FieldByname('maxEmpId').asinteger + 1;
          bbtnOk.Enabled := true;
          bbtnCancel.Enabled := true;
          NewNode.StateIndex := iMaxEmpid;
          tblEmp.Active := true;
          tblEmp.Append;
          tblEmp.FieldByname('EmpID').asinteger := iMaxEmpid;
          tblEmp.FieldByname('Name').asstring := frameDpt.cbxDptmaneger.Text;
          tblEmp.post;
          frameDpt.tblDpt.fieldbyname('Dptmaneger').asinteger := iMaxEmpid;
        end; }
        frameDpt.tblDpt.FieldByname('DptId').asinteger := strtoint(frameDpt.stcDepcode.Caption);
        frameDpt.tblDpt.FieldByname('upDptID').asinteger := iSelectnodeparent;
        frameDpt.tblDpt.Post;
        application.MessageBox('增加部门信息保存成功!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
        bAdd := false;
      except
        on E: Exception do
        begin
          ErrorHandler(E, 'TfrmDptEmp.btnOkClick');
          Application.MessageBox('打开部门或人员数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
        end;
      end;
    end
    else
    //增加人员记录
    begin
      if (not CheckEmpcode(frameEmp.dedtUserName.Text)) then
      begin
        if frameEmp.dedtUserName.Text <> '' then application.MessageBox('该员工用户名已被别人使用,请重新输入!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
        frameEmp.dedtUserName.SetFocus;
        exit;
      end;
      try
        frameEmp.tblEmp.FieldByname('USER_ID').asinteger := iMaxEmpid;
        frameEmp.tblEmp.FieldByname('DptID').asinteger := iSelectnodeparent;
        frameEmp.tblEmp.Post;
        application.MessageBox('增加员工信息保存成功!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
        bAdd := false;
      except
        on E: Exception do
        begin
          ErrorHandler(E, 'TfrmDptEmp.btnOkClick');
          Application.MessageBox('打开员工数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
        end;
      end;
    end;
  end;
  if bEdit then //判断是否处于修改状态
  begin
    if frameDpt.Visible then
    //修改部门信息
    begin
      try
        frameDpt.tblDpt.Post;
        application.MessageBox('修改部门信息成功!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
        bEdit := false;
      except
        on E: Exception do
        begin
          ErrorHandler(E, 'TfrmDptEmp.btnOkClick');
          Application.MessageBox('打开部门数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
        end;
      end;
    end
    else
    //修改员工信息
    begin
      if sUserName <> frameEmp.dedtUserName.Text then
      begin
        if (not CheckEmpcode(frameEmp.dedtUserName.Text)) then
        begin
          if frameEmp.dedtUserName.Text <> '' then application.MessageBox('该员工用户名已被别人使用,请重新输入!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
          frameEmp.dedtUserName.SetFocus;
          exit;
        end;
      end;
      try
        frameEmp.tblEmp.Post;
        application.MessageBox('修改员工信息成功!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
        bEdit := false;
      except
        on E: Exception do
        begin
          ErrorHandler(E, 'TfrmDptEmp.btnOkClick');
          Application.MessageBox('打开部门或人员数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
        end;
      end;
    end;
  end;
  bbtnCancel.Enabled := false;
  bbtnOk.Enabled := false;
  bbtnAddDpt.Enabled := true;
  bbtnAddEmp.Enabled := true;
  bbntDelete.Enabled := true;
  bbtnmodify.Enabled := true;
end;

procedure TfrmDptEmp.btnAddEmpClick(Sender: TObject);
var
  node, newnode: TTreeNode;
begin
  bAdd := true; //处于增加状态
  frameDpt.Visible := false;
  frameEmp.Visible := true;
  node := TreeView1.Selected; //得到该结点的父结点
  if node = nil then
  begin
    Application.MessageBox('最上层部门只能为一个,不能在增加!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
    exit;
  end;
  iSelectnodeparent := node.StateIndex; //得到父结点的stateindex属性
  newnode := TreeView1.Items.AddChild(Node, ''); //在父结点下增加一个新的结点
  NewNode.SelectedIndex := 3;
  NewNode.ImageIndex := 2;
  newnode.Selected := true;
  ClearCtrl([frameEmp]);
  frameEmp.stcEmpDpt.Caption := node.Text; //隶属部门显示为新加结点的父结点的text属性
  frameEmp.dedtName.SetFocus;
  //得到员工的最大流水号增加1为新加员工的流水号
  try
    qryDptEmp.Active := false;
    qryDptEmp.SQL.Clear;
    qryDptEmp.SQL.Add('select isnull(Max(USER_ID),0)  as maxEmpId  from OA');
    qryDptEmp.Active := true;
    iMaxEmpid := qryDptEmp.FieldByname('maxEmpId').asinteger + 1;
    bbtnOk.Enabled := true;
    bbtnCancel.Enabled := true;
  except
    on E: Exception do
    begin
      ErrorHandler(E, 'frmDptEmp.btnAddEmpClick');
      Application.MessageBox('打开人员数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
    end;
  end;
  NewNode.StateIndex := iMaxEmpid;
  bbtnAddDpt.Enabled := false;
  bbtnAddEmp.Enabled := false;
  bbntDelete.Enabled := false;
  bbtnmodify.Enabled := false;
  frameEmp.tblEmp.Append;
end;

//删除选中的部门结点或人员结点

procedure TfrmDptEmp.bntDeleteClick(Sender: TObject);
var
  delete_node: TTreeNode;
begin
  if (TreeView1.Selected = nil) then
    exit;
  delete_node := treeView1.Selected;
  if delete_node.HasChildren then
  begin //有子树则先处理子节点
    application.MessageBox('非末节点不能删除!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
  end
  else
  begin
    DeleteNode;
  end;


end;

//该过程实现结点的删除,如果有子结点给出提示部门删除

procedure TfrmDptEmp.DeleteNode;
var Sinformation, Snodetext: pchar;
begin
  if treeView1.Selected.ImageIndex <> 2 then
    snodetext := Pchar('确认要删除' + TreeView1.Selected.Text + '部门吗?')
  else
    snodetext := pchar('确认要删除' + TreeView1.Selected.Text + '员工吗?');
  if Application.MessageBox(snodetext, Pchar(_sAppTitle), mb_OkCancel + mb_iconQuestion) = IdCancel then
    exit;
  //删除部门
  if treeView1.Selected.ImageIndex <> 2 then
  begin
    frameDpt.tblDpt.Filtered := false;
    try
      frameDpt.tblDpt.Active := true;
      if frameDpt.tblDpt.Locate('DptID', TreeView1.Selected.StateIndex, []) then
      begin
        Sinformation := pchar(TreeView1.Selected.Text + '部门记录删除成功!');
        frameDpt.tblDpt.Delete; //在表中删除部门的记录
        TreeView1.Items.Delete(TreeView1.Selected); //在树中删除该部门结点
        application.MessageBox(Sinformation, Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
      end;
    except
      on E: Exception do
      begin
        ErrorHandler(E, 'TfrmDptEmp.DeleteNode');
        Application.MessageBox('删除部门数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
      end;
    end;
  end
  else
  // 删除员工
  begin
    frameEmp.tblEmp.Filtered := false;
    if frameEmp.tblEmp.Locate('USER_ID', TreeView1.Selected.StateIndex, []) then
    begin
      Sinformation := pchar(TreeView1.Selected.Text + '员工记录删除成功!');
      frameEmp.tblEmp.Delete; //删除表中的员工记录
      TreeView1.Items.Delete(TreeView1.Selected); //在树中删除该员工结点
      application.MessageBox(Sinformation, Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
    end;
  end;
end;

//该过程使系统处于修改部门或员工状态

procedure TfrmDptEmp.btnmodifyClick(Sender: TObject);
begin
  if frameDpt.visible then
  begin
    frameDpt.dedtDptName.SetFocus;
    frameDpt.tblDpt.Edit;
  end
  else
  begin
    frameEmp.dedtName.SetFocus;
    sUserName := frameEmp.dedtUserName.Text;
    frameEmp.tblEmp.Edit;
  end;
  bEdit := true;
  bbtnCancel.Enabled := true;
  bbtnOk.Enabled := true;
  bbtnAddDpt.Enabled := false;
  bbtnAddEmp.Enabled := false;
  bbntDelete.Enabled := false;
  bbtnmodify.Enabled := false;
end;

//该过程实现部门和人员的调动,通过拖动的方式来操作

procedure TfrmDptEmp.TreeView1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  node, newnode, oldnode: TTreeNode;
begin
  if source is TTreeView then
  begin
    //得到调动到部门或人员的结点
    node := treeView1.GetNodeAt(x, y);
    if node <> nil then
    begin
      if node.ImageIndex = 2 then
        exit;
      if Application.MessageBox('是否要调动该部门或人员吗?', Pchar(_sAppTitle), mb_OkCancel + mb_iconQuestion) = IdCancel then
        exit;
      //得到要调动部门或人员的结点
      oldnode := treeView1.Selected;
      //把oldnode结点移到node结点下去
      oldnodetonewnode(oldnode, node);
      //下面是修改调动的部门的上级部门或人员的所属部门
      if oldnode.ImageIndex <> 2 then
      begin
        tblDpt.Filtered := false;
        if tblDpt.Locate('DptID', oldnode.StateIndex, []) then
        begin
          try
            tblDpt.Active := true;
            tblDpt.Edit;
            //把调动部门的上级部门改为调动到部门结点所对应的部门代码
            tblDpt.FieldByname('upDptID').asstring := inttostr(treeView1.Selected.Parent.StateIndex);
            tblDpt.Post;
            application.MessageBox('调动部门成功!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
          except
            on E: Exception do
            begin
              ErrorHandler(E, 'TfrmDptEmp.TreeView1DragDrop');
              Application.MessageBox('打开部门或人员数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
            end;
          end;
        end;
      end
      else
      begin
        tblEmp.Filtered := false;
        if tblEmp.Locate('USER_ID', oldnode.StateIndex, []) then
        begin
          try
            tblEmp.Edit;
            //把用调动人员的所属部门改为调动到部门结点所对应的部门代码
            tblEmp.FieldByname('DptID').asstring := inttostr(treeView1.Selected.Parent.StateIndex);
            tblEmp.Post;
            application.MessageBox('调动人员成功!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
          except
            on E: Exception do
            begin
              ErrorHandler(E, 'TfrmDptEmp.TreeView1DragDrop');
              Application.MessageBox('打开部门或人员数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
            end;
          end; //try...end
        end;
      end;
    end;
  end;
end;



//把一个结点oldnode和该结点下的所有结点移到另一个结点node下

procedure TfrmDptEmp.oldnodetonewnode(oldnode, node: TTreeNode);
var
  newnode, node1, node2: TTreeNode;
  iOldlevel, iNodelevel, iNumber, iCount: integer;
begin
  iOldlevel := oldnode.Level; //得到要移动结点的层数
  //先把该oldnode结点加入到node结点下去,结点的属性都原来的结点一样

⌨️ 快捷键说明

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