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

📄 bas_dept2.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    abort;
  end;
  edt_DeptCode.text:=Trim(edt_DeptCode.text);
  if length(edt_DeptCode.text) mod 2<>0 then
  begin
    DispInfo(' 部门代码长度不规范! ',1);
    TWinControl(Sender).SetFocus;
    abort;
  end;

  s:=edt_DeptCode.text;

  if length(s)<>2 then
    with AdoQry_tmp do
    begin
      Close;
      sql.text:=
        'select DeptName from Dept '+
          ' where DeptCode='''+copy(s,0,length(s)-2)+'''';
      open;
      if eof then
      begin
        DispInfo(' 上级部门不存在! ',1);
        TWinControl(Sender).SetFocus;
        abort;
      end
      else
        Lbl_DeptName.Caption:=fieldbyname('DeptName').asstring;
     end
   else
     Lbl_DeptName.Caption:='';

   if (Add)or((not Add) and
     (TEdit(Sender).Text<>AdoQry_Main.fieldbyname('DeptCode').AsString)) then
   begin
     with AdoQry_Tmp do
     begin
       Close;
       SQL.text:=
         'Select DeptCode From Dept Where DeptCode='''+TEdit(Sender).Text+'''';
       Open;
       if fieldbyname('DeptCode').AsString<>'' then
       begin
         DispInfo('  该部门代码已经存在,不允许增加或修改!  ',1);
         TWinControl(Sender).SetFocus;
         Abort;
       end;
     end;
   end;
end;

procedure TFrm_Bas_Dept2.btn_CancelClick(Sender: TObject);
begin
  inherited;
  TV.SetFocus;
  btn_ok.enabled:=False;
  btn_Cancel.enabled:=False;
  if not fReadOnly then
  begin
    Act_Delete.Enabled :=True;
    Act_New.Enabled :=True;
  end
  else
  begin
    Act_Delete.Enabled :=False;
    Act_New.Enabled :=False;
  end;
  if TV.selected.text<>'Root' then
    refreshedits;
end;

procedure TFrm_Bas_Dept2.btn_okClick(Sender: TObject);
var
  s:string;
begin
  inherited;
  with AdoQry_Tmp do
  begin
    Close;
    SQL.clear;
    if(Add)then
    begin
      SQL.Add('Insert Dept (DeptCode,DeptName,DeptremArk) '+
              ' Values '+
              '(:DeptCode,:DeptName,:remArk)');
    end
    else
    begin
      SQL.Add('Update Dept set '+
                 ' DeptCode=:DeptCode,'+
                 ' DeptName=:DeptName,'+
                 ' DeptremArk=:remArk '+
               ' where DeptCode=:oldCode');
      Parameters.ParambyName('oldCode').Value:=AdoQry_Main.fieldbyname('DeptCode').asstring;
    end;
    Parameters.ParambyName('DeptCode').Value:=Trim(edt_DeptCode.text);
    Parameters.ParambyName('DeptName').Value:=Trim(edt_DeptName.text);
    Parameters.ParambyName('remArk').Value:=Trim(edt_remArk.text);
    execsql;
  end;
  with AdoQry_Main do
  begin
    if (Add) Then
      Append
    Else
      Edit;
    fieldbyname('DeptCode').AsString:=Trim(edt_DeptCode.text);
    fieldbyname('DeptName').AsString:=Trim(edt_DeptName.text);
    fieldbyname('DeptremArk').AsString:=Trim(edt_remArk.text);
    Post;
  end;
  btn_ok.Enabled :=False;
  btn_Cancel.enabled:=False;
  if Add then
    set_Treeview_after_ok
  else
    TV.Selected.text:=Trim(Edt_DeptCode.text)+' '+Trim(Edt_DeptName.Text);
  TV.setfocus;
  s:=getCode(TV.selected.text);
  AdoQry_Main.Locate('DeptCode',s,[]);
  Sysrefresh:=True;
  refreshedits;
  Sysrefresh:=False;
end;

procedure TFrm_Bas_Dept2.RefreshTV;
var
  rootnode:ttreenode;
  Currentid,s:string;
  i:integer;
begin
  TV.Items.clear;
  RootNode:=TV.Items.Add(nil,'Root');
  RootNode.SelectedIndex :=1;
  with AdoQry_Main do
  begin
    First;
    for i:=1 to recordCount do
    begin
      if Length(fieldbyname('DeptCode').AsString)=2 then
      begin
        Currentid:=fieldbyname('DeptCode').AsString ;
        s:=Currentid+' '+fieldbyname('DeptName').AsString;
        treenode:=TV.Items.Addchild(RootNode,s);
        treenode.SelectedIndex :=1;
        Addnode(fieldbyname('DeptCode').asstring,treenode);
        locate('DeptCode',Currentid,[]);
      end;
      next;
    end;
  end;
  TV.Items[0].Expand(True);
end;

procedure TFrm_Bas_Dept2.set_Treeview_after_ok;
var
  node,Parentnode:ttreenode;
  s,Sourceid,tArgetid:string;
begin
  isfound:=False;
  findnode(TV.Items[0]);
  if not isfound then
  begin
    find_Addnode(TV.Items[0].GetLastChild);
    exit;
  end;
  node:=TV.selected;
  if (getCode(TV.selected.text)>Trim(Edt_DeptCode.text)) and (node.Parent.GetPrevChild(node)<>nil) then
    find_Addnode(node.Parent.GetPrevChild(node))
  else
  begin
    Parentnode:=node.Parent;
{    while node<>nil do
    begin
      Sourceid:=GetCode(node.text);
      s:=copy(Sourceid,length(Sourceid)-1,2);
      s:=prefixofstr(inttostr(strtoint(s)+1),'0',2);
      tArgetid:=copy(Sourceid,1,length(Sourceid)-2)+s;
      Changenode(node,Sourceid,tArgetid);
      node:=Parentnode.GetNextChild(node);
    end;
}
    node:=TV.Items.AddChild(Parentnode,Trim(Edt_DeptCode.text)+' '+Edt_DeptName.text);
    Parentnode.AlphaSort;
    node.selected:=True;
//    TV.setfocus;
  end;
end;

procedure TFrm_Bas_Dept2.set_Treeview_after_Delete;
var
  node,Parentnode:ttreenode;
  s,Sourceid,tArgetid:string;
begin
  Parentnode:=TV.selected.Parent;
  node:=Parentnode.GetNextChild(TV.selected);
  if node<>nil then
  begin
    TV.Items.Delete(TV.selected);
    node.selected:=True;
    TV.setfocus;
  end
  else if Parentnode.GetprevChild(TV.selected)<>nil then
  begin
    node:=Parentnode.GetprevChild(TV.selected);
    TV.Items.Delete(TV.selected);
    node.selected:=True;
    TV.setfocus;
    exit;
  end
  else
  begin
    TV.Items.Delete(TV.selected);
    node:=Parentnode;
    node.selected:=True;
    TV.setfocus;
    exit;
  end;
{  while node<>nil do
  begin
    Sourceid:=GetCode(node.text);
    s:=copy(Sourceid,length(Sourceid)-1,2);
    s:=prefixofstr(inttostr(strtoint(s)-1),'0',2);
    tArgetid:=copy(Sourceid,1,length(Sourceid)-2)+s;
    Changenode(node,Sourceid,tArgetid);
    node:=Parentnode.GetNextChild(node);
  end;
}
end;

procedure TFrm_Bas_Dept2.findnode(node: ttreenode);
begin
  if (node.Text>=Trim(Edt_DeptCode.text))and(node.text<>'Root')then
  begin
    isfound:=True;
    TV.Selected:=node;
    exit;
  end;
  node:=node.getFirstChild;
  while(node<>nil)and (not isfound) do
  begin
    findnode(node);
    node:=node.Parent.GetNextChild(node);
  end;

end;

procedure TFrm_Bas_Dept2.find_Addnode(node: ttreenode);
var
  nodeselceted:ttreenode;//要选中的节点
begin
  if node=nil then
  begin
    node:=TV.Items.AddChild(tv.Items[0],Trim(Edt_DeptCode.Text)+' '+Edt_DeptName.Text);
    node.selected:=True;
    TV.setfocus;
    exit;
  end;
  while length(GetCode(node.text))<>length(Trim(Edt_DeptCode.text)) do
  begin
    if node.GetLastChild=nil then
      break
    else
      node:=node.GetLastChild;
  end;
  if length(GetCode(node.text))<>length(Trim(Edt_DeptCode.Text)) then
  begin
    node:=TV.Items.AddChild(node,Trim(Edt_DeptCode.Text)+' '+Edt_DeptName.Text);
    node.selected:=True;
    TV.setfocus;
  end
  else
  begin
    nodeselceted:=TV.Items.AddChild(node.Parent,Trim(Edt_DeptCode.Text)+' '+Edt_DeptName.Text);
    node.Parent.AlphaSort;
    nodeselceted.selected:=True;
    TV.setfocus;
  end;
end;

function TFrm_Bas_Dept2.prefixofstr(s:string;chr:chAr;len:integer):string;
begin
  Result:=Trim(s);
  Result:=stringofchAr(chr,len-length(Result))+Result;
end;

procedure TFrm_Bas_Dept2.Changenode(node: ttreenode; Sourceid,
  tArgetid: string);
var
  s:string;
begin
  s:=node.text;
  delete(s,1,length(Sourceid));
  node.text:=tArgetid+s;
  node:=node.getFirstChild;
  while node<>nil do
  begin
    Changenode(node,Sourceid,tArgetid);
    node:=node.Parent.GetNextChild(node);
  end;
end;

end.

⌨️ 快捷键说明

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