📄 hm_dp.~pas
字号:
var
tempsnum,temppnum:integer;
begin
if ADOQuery2.Active then
if ADOQuery2.RecordCount > 0 then
if MessageBox(handle, '要删除此部门么?', '提示', mb_IconQuestion + mb_OkCancel) = idOk then
begin
pnum:=adoquery2.FieldByName('父编号').AsInteger;
snum:=adoquery2.FieldByName('编号').AsInteger;
//由自身编号是否和最大子号相等确定是否有子部门
if snum <> adoquery2.FieldByName('最大子号').AsInteger then
begin
ShowMessage('该部门拥有子部门,请先清除子部门!!');
end
else
begin
//从部门信息表中删除该条信息
ADOQuery3.close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Text := 'delete from 部门信息 where 编号 ='+inttostr(snum);
ADOQuery3.ExecSQL;
tempsnum:= snum;
temppnum:= pnum;
//更新负责人的基本信息
ADOQuery4.close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Text := 'update 基本信息 set 部门 = '+QuotedStr('') + 'where 姓名 = ' + QuotedStr(Combobox1.Text);
ADOQuery4.ExecSQL;
//更新部门组织图TreeView1
try
CreateTreeNodes(nil,nil);
except
end;
pnode:= treeview1.Items.Item[strtoint(temptable[temppnum,1])];
pnode.Selected;
pnode.MakeVisible;
//查看删除的部门的编号是否上级部门的最大子号
if not(tempsnum < strtoint(temptable[temppnum,2]))then
begin
pnode:=pnode.GetLastChild;
if pnode <> nil then
begin
//更新上级部门的最大子号
ADOQuery3.close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Text := 'update 部门信息 set 最大子号 ='+inttostr(indextable[pnode.AbsoluteIndex+1,1])+'where 编号 ='+inttostr(temppnum);
ADOQuery3.ExecSQL;
temptable[temppnum,2]:= inttostr(indextable[pnode.AbsoluteIndex+1,1]);
end
else
begin
ADOQuery3.close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Text := 'update 部门信息 set 最大子号 ='+inttostr(temppnum)+'where 编号 ='+inttostr(temppnum);
ADOQuery3.ExecSQL;
end;
end;
if treeview1.Items.Count > 0 then
treeview1.Items[0].Selected := True;
TreeView1Click(nil);
end;
end;
end;
//-----------点击确定按钮,处理增加子部门,增加同级部门,修改部门信息的实际执行工作
procedure Thm_dpForm.Button5Click(Sender: TObject);
var
newnum:integer;
begin
if Trim(DBEdit1.Text) = '' then
begin
showmessage('部门名称不能为空');
exit;
end;
if Trim(ComboBox1.Text) = '' then
begin
showmessage('负责人不能为空!');
exit;
end;
if Trim(DBEdit4.Text) = '' then
begin
showmessage('员工号不能为空!');
exit;
end;
if ComboBox1.Items.IndexOf(Trim(ComboBox1.Text)) < 0 then
begin
ShowMessage('该部门不存在该负责人:'+ Trim(ComboBox1.Text));
Exit;
end;
if Button1.Visible or Button2.Visible then
begin
ADOQuery4.Close;
ADOQuery4.SQL.Text := 'Select * From 基本信息 Where 部门 = ' + QuotedStr(Trim(DBEdit1.Text));
ADOQuery4.Open;
if ADOQuery4.RecordCount > 0 then
begin
showmessage('已存在相同名称的部门,请重新设置!');
exit;
end;
end;
//
if Button3.Visible=true then //如果是修改部门信息
begin
pnode:=treeview1.Items.Item[strtoint(temptable[strtoint(dbedit2.EditText),1])];
pnode.Text:=dbedit1.EditText;//更新部门组织图TreeView1的节点信息
adoquery2.FieldByName('员工号').AsString := Trim(DBEdit4.Text);
adoquery2.FieldByName('负责人').AsString := Trim(ComboBox1.Text);
adoquery2.Post;//更新部门信息表
end
else //增加子部门,增加同级部门操作相同,
begin
//插入部门
sname:=Trim(DBEdit1.EditText);
adoquery2.FieldByName('名称').AsString := Trim(DBEdit1.EditText);
adoquery2.FieldByName('负责人').AsString := Trim(ComboBox1.Text);
adoquery2.FieldByName('员工号').AsString := Trim(DBEdit4.Text);
adoquery2.FieldByName('父编号').AsInteger := pnum;
adoquery2.FieldByName('最大子号').AsInteger := snum;
adoquery2.FieldByName('层次').AsInteger:=ItemLevel;
adoquery2.post;
//更新新部门的上级部门最大子号
ADOQuery3.close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Text := 'update 部门信息 set 最大子号 ='+inttostr(snum)+'where 编号 ='+inttostr(pnum);
ADOQuery3.ExecSQL;
//更新部门组织图TreeView1
newnum:=snum;
CreateTreeNodes(nil,nil);
pnode:=treeview1.Items.Item[strtoint(temptable[newnum,1])];
pnode.MakeVisible;
//更新基本表中的部门信息
ADOQuery4.Close;
ADOQuery4.SQL.Text := 'update 基本信息 set 部门 ='+QuotedStr(Trim(DBEdit1.Text)) +'where 姓名 ='+QuotedStr(Trim(ComboBox1.Text));
ADOQuery4.ExecSQL;
end;
//更新状态
Button5.Visible:=false;
Button6.Visible:=false;
Button1.Enabled:=true;
Button2.Enabled:=true;
Button3.Enabled:=true;
Button1.Visible:=true;
Button2.Visible:=true;
Button3.Visible:=true;
Button4.Visible:=true;
end;
//-----------点击取消按钮,取消增加子部门,增加同级部门,修改部门信息
procedure Thm_dpForm.Button6Click(Sender: TObject);
begin
Button5.Visible:=false;
Button6.Visible:=false;
Button1.Enabled:=true;
Button2.Enabled:=true;
Button3.Enabled:=true;
Button1.Visible:=true;
Button2.Visible:=true;
Button3.Visible:=true;
Button4.Visible:=true;
ADOQuery2.Cancel;
if Name <> '' then
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(Name);
end;
procedure Thm_dpForm.DBEdit3Exit(Sender: TObject);
var
sText, sDP: string;
begin
if ADOQuery2.Active then
begin
if ADOQuery2.State In [dsEdit, dsInsert] then
begin
sText := Trim(Combobox1.Text);
sDP := Trim(DBEdit1.Text);
if sDP = '' then
begin
ShowMessage('请先输入部门信息');
//DBEdit3.Field.AsString := '';
Exit;
end;
ADOQuery4.Close;
ADOQuery4.SQL.Text := 'Select * From 基本信息 Where 姓名 =' + QuotedStr(sText) + ' and 部门 = ' + QuotedStr(sDP);
ADOQuery4.Open;
if ADOQuery4.RecordCount <= 0 then
begin
ShowMessage(sText + ' 负责人不存在');
//DBEdit3.Field.AsString := '';
end
else
ADOQuery2.FieldByName('员工号').AsString := Trim(ADOQuery4.FieldbyName('编号').AsString);
end;
end;
end;
procedure Thm_dpForm.ADOQuery2AfterOpen(DataSet: TDataSet);
begin
Button1.Enabled := ADOQuery2.RecordCount > 0 ;
Button3.Enabled := ADOQuery2.RecordCount > 0 ;
Button4.Enabled := ADOQuery2.RecordCount > 0 ;
end;
procedure Thm_dpForm.SetMen(const AName,ADP: string);
var
i: Integer;
begin
ADOQuery4.close;
ADOQuery4.SQL.Clear;
if ADP <> '' then//本部门的人
ADOQuery4.SQL.Text := 'Select * From 基本信息 Where 部门 = ' + QuotedStr(ADP)
else
ADOQuery4.SQL.Text := 'Select * From 基本信息';
ADOQuery4.Open;
Combobox1.Clear;
for i :=0 to ADOQuery4.RecordCount - 1 do
begin
Combobox1.AddItem(Trim(ADOQuery4.FieldByName('姓名').AsString), nil);
ADOQuery4.next;
end;
ADOQuery4.close;
if AName <> '' then
begin
if Combobox1.Items.Count > 0 then
Combobox1.ItemIndex := Combobox1.Items.IndexOf(AName);
Name := AName;
end;
end;
procedure Thm_dpForm.ValidButton;
var
B: Boolean;
begin
B := (Trim(DBEdit1.Text) <> '') and (Trim(DBEdit2.Text) <> '') and (Trim(DBEdit4.Text) <> '') and (Trim(ComboBox1.Text) <> '');;
Button1.Enabled := B;
Button2.Enabled := B;
end;
procedure Thm_dpForm.ComboBox1Select(Sender: TObject);
begin
ADOQuery4.close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Text := 'Select * From 基本信息 Where 姓名 = '+ QuotedStr(Trim(Combobox1.Text));
ADOQuery4.Open;
if ADOQuery4.RecordCount > 0 then
DBEdit4.Text := Trim(ADOQuery4.FieldByName('编号').AsString);
end;
procedure Thm_dpForm.ValidMen(const AExceptMen: string);
var
i: Integer;
begin
i := 0;
while i < Combobox1.Items.Count do
begin
if AExceptMen <> Combobox1.Items[i] then
begin
ADOQuery4.close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Text := 'Select * From 部门信息 Where 负责人 = ' + QuotedStr(Combobox1.Items[i]);
ADOQuery4.Open;
if ADOQuery4.RecordCount > 0 then
begin
Combobox1.Items.Delete(i);
continue;
end;
end;
inc(i);
end;
if Combobox1.Items.Count = 0 then
begin
Button6Click(nil);
showmessage('没有空闲职位的人员可选,请先添加职员,再新增部门!');
TreeView1Click(nil);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -