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

📄 formdeptchart.pas

📁 pasa人力资源考勤管理系统
💻 PAS
字号:
//**********************************************************//
//部门组织架构图,采用穷举算法,试图找出该节点下面的所有节点//
//从左到右读二叉树的算法,算法逻辑基本准确,实现的方法不好,//
//它受到部门编码位数必须一样,且要按照规定的编码进行处理,该//
//方法的速度慢,不灵活,现提出一种解法,先把它写进临时表,在//
//用上面的方法进行,这样可以少写很多代码,不用循环(编码组成//
//部份的位数)次数即可。时间有限,放在第二版处理            //
//Danny  2002/03/07 8:50                                    //
//**********************************************************//

unit formdeptchart;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ImgList, ComCtrls, Db, DBTables, ADODB, ExtCtrls, DBCtrls, ToolWin;

type
  TformDchart = class(TForm)
    ListView1: TListView;
    ADOQuery1: TADOQuery;
    Tree1: TTreeView;
    Splitter1: TSplitter;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    DBNavigator1: TDBNavigator;
    ImageList2: TImageList;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Tree1Click(Sender: TObject);
    procedure ToolButton7Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
    function dup(s:integer):string;
    function fname(field:string;i:integer):string;  //field表示字段值,i是第几个点
  public
    { Public declarations }
    procedure createtable(tier:integer);
  end;

var
  formDchart: TformDchart;

implementation

uses datamol,main,cvcode;
{$R *.DFM}

procedure TformDchart.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   action:=cafree;
   formdchart:=nil;
end;

function tformdchart.dup(s:integer):string;
var i:integer;
    st:string;
begin
  st:='';
  for i:=1 to s do
    st:=st+'0';
  dup:=st;
end;

function tformdchart.fname(field:string;i:integer):string;
var p,k:integer;
    f:string;
begin
  f:=field;
  for p:=1 to i do
   begin
     k:=pos('.',f);
     delete(f,1,k);
     if p=i then
      fname:=f;
   end;
end;

procedure TformDchart.Tree1Click(Sender: TObject);
var listitem:Tlistitem;
    tn:Ttreenode;
    s:string;
begin
  with datamod.ADOQuery1 do
  begin
    s:='';
    tn:=tree1.Selected;
    repeat
      if s='' then
        s:=tn.text
      else
        s:=tn.Text +'.'+s;
      tn:=tn.Parent;
    until tn=nil;
    s:=s+'.';
    listview1.Items.Clear;
    sql.Clear;
    sql.Add ('select workno,name,sexname,prof from per24010 where dept='''+trim(s)+''' and leave<>1 order by workno');
    open;
    while not eof do
    begin
      listitem:=listview1.Items.add;
      listitem.Caption:=fieldbyname('workno').asstring;
      listitem.SubItems.Add (fieldbyname('name').asstring);
      listitem.SubItems.Add (fieldbyname('sexname').asstring);
      listitem.SubItems.Add (fieldbyname('prof').asstring);
      next;
    end;
    close;
  end;
end;

procedure TformDchart.ToolButton7Click(Sender: TObject);
begin
  close;
end;

procedure TformDchart.FormActivate(Sender: TObject);
var i,j,n:0..8;
    k:integer;
    mynode:Ttreenode;
    aqy1:Tadoquery;
begin
   aqy1:=tadoquery.Create(self);
   aqy1.Connection:=adoquery1.Connection ;

   //部门资料dept∶dno部门编号,dname部门名称
   //部门资料规格表∶a1是编码中的第一部份,存放的是该部份中有几位组成
  // 编码定义最多为8位,最多为8部份组成
  aqy1.sql.text:='select sumpart from pub05011';
  aqy1.open;
  if aqy1.eof then
   begin
     Application.messagebox('您必须设定您的部门名称最多有几部份组成','Warning',mb_ok+mb_iconwarning);
     exit;
   end
  else
    k:=strtoint(aqy1.fieldbyname('sumpart').asstring);                 //如果K值为空,证明部门编码规则有误,退出作业处理

  //产生临时表的内容,tempDept,Cdept
  try
    Createtable(k);
  except
    Application.messagebox('对不起,产生部门资料时出错,请再来一次','Warning',mb_ok+mb_iconwarning);
    exit;
  end;
  
  with tree1.Items do
  begin
    clear;
    aqy1.Close;
    aqy1.SQL.Text :='select dept from TempDept where num=''1'' ';
    aqy1.Open;
    while not aqy1.eof do
     begin
       mynode:=add(nil,aqy1.fieldbyname('dept').asstring);
       aqy1.next;
     end;
    aqy1.Close;
  end;

  n:=k;
  for j:=2 to n do
  begin
    aqy1.SQL.Text :='select * from tempDept where num='''+inttostr(j)+''' ';
    aqy1.open;
    while not aqy1.eof do
    begin
     for i:=0 to tree1.Items.Count-1 do
      begin
       if pos(aqy1.fieldbyname('fdept').asstring,tree1.items[i].Text)>0 then  //find item;
        begin
         tree1.Items[i].Selected:=true;

         //Mynode1:=tree1.Items.add(tree1.items[i].TreeView.Selected,aqy1.fieldbyname('dept').asstring);
         tree1.Items.addchild(tree1.items[i].TreeView.Selected,aqy1.fieldbyname('dept').asstring);
        end;
      end;
     aqy1.next;
    end;
    aqy1.Close;
  end;
end;

procedure Tformdchart.createtable(tier:integer);
var aqy1:Tadoquery;
    i,j:integer;
begin
  aqy1:=Tadoquery.Create(self);
  aqy1.Connection :=datamod.Database1;
  aqy1.SQL.Clear;
  aqy1.SQL.add('Delete from TempDept');
  aqy1.sql.add('delete from Cdept');
  aqy1.SQL.Add ('insert cdept(dno,dept) select dno,dept from pub05010');
  aqy1.ExecSQL;
  aqy1.Close;     //第1,2层
  j:=0;
  for i:=1 to tier-1 do
  begin
    aqy1.sql.Clear;
    j:=j+1;
    if j=1 then
     begin
       aqy1.sql.add('insert tempdept(dept,fdept,num) select distinct( left(dept,charindex(''.'',dept)-1)),''f'',''1'' from Cdept where charindex(''.'',dept)>0');
       j:=j+1;
     end;
     aqy1.SQL.add('insert tempdept(dept,fdept,num) select  distinct(left(right(dept,len(dept)-charindex(''.'',dept)),charindex(''.'',right(dept,len(dept)-charindex(''.'',dept)))-1)) '+
                    ',left(dept,charindex(''.'',dept)-1),'''+inttostr(J)+'''  from Cdept '+
                    'where charindex(''.'',right(dept,len(dept)-charindex(''.'',dept)))>0');
     aqy1.SQL.Add('update  Cdept set dept=right(dept,len(dept)-charindex(''.'',dept)) ');
     aqy1.SQL.add('delete Cdept where charindex(''.'',dept)=0');
     aqy1.execsql;
     aqy1.close;
  end;
  aqy1.Free;
end;

end.

⌨️ 快捷键说明

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