📄 untdptemp.~pas
字号:
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 + -