gpubunit.pas
来自「delphi renyuanguanlixinxioxitong」· PAS 代码 · 共 112 行
PAS
112 行
unit gpubUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,Dialogs,ComCtrls, ADODB, DB, ExtCtrls, DBCtrls;
var
gsUserID :string;
gsUserName :string;
//tvDepartment为从调用界面传递过来的TTreeView,将部门插入到该tvDepartment对象中
//建立树结构函数
function gfunCreateTree(tvDepartment :TTreeView) :boolean;
//查找父节点函数
function gfunFindparentSite(sUpperDepartmentNo :string; tvDepartment :TTreeView): integer ;
implementation
uses DataModual;
//------------------------------------------------------------------------------
//创建部门数函数
//参数tvDepartment:调用者传递来的TTreeView对象,该对象没有数据
//功能:动态创建TADOQuery对象,用于检索部门树结构,根据该对象的值,
// 在tvDepartment构造一颗部门树,并返回给调用者
function gfunCreateTree(tvDepartment :TTreeView) :boolean;
var
aqryTree: TADOQuery; //用于检索部门树结构
//接收数据集的字段
sDepartmentName,sUpperDepartmentNo,sDepartmentNo :string;
nParentSite :integer; //查找父结点
ilevel :integer; //结点级别
begin
//检索部门树状结构
aqryTree :=TADOQuery.Create(nil);
aqryTree.Connection :=DataModule1.connOracle;
aqryTree.SQL.Add('select departmentNo,departmentname,upperDepartmentNo ,level') ;
aqryTree.SQL.Add('from department');
aqryTree.SQL.Add('connect by prior departmentNo=upperdepartmentno');
aqryTree.SQL.Add('start with departmentno= :sDepartmentNo');
aqryTree.SQL.Add('order by level');
aqryTree.Parameters.ParamByName('sDepartmentNo').Value := '001';
try
aqryTree.Open;
except
application.MessageBox('检索树结构出错','提示',mb_ok) ;
Result :=False;
end;
//将部门插入到treeview中
tvDepartment.Items.Clear ;
aqryTree.First; //将指针移动到最前面
while not aqryTree.Eof do //数据集未完以前
begin
sDepartmentNo:=trim(aqryTree.fieldbyname('DepartmentNo').asstring);
sDepartmentName:=trim(aqryTree.FieldByName('DepartmentName').AsString);
sUpperDepartmentNo:=trim(aqryTree.fieldbyname('UpperDepartmentNo').asstring);
ilevel := aqryTree.fieldbyname('level').AsInteger ;
if ilevel=1 then //如果ilevel=1,则当前要插入的为根结点
tvDepartment.Items.add(tvDepartment.topitem,sDepartmentNo+'--'+sDepartmentName)
else
begin
//找到相应的父结点
nParentSite:= gfunFindparentSite(sUpperDepartmentNo,tvDepartment);
if nParentSite<>-1 then
tvDepartment.Items.AddChild(tvDepartment.Items[nParentSite],
sDepartmentNo+'--'+sDepartmentName);
end;
aqryTree.Next;//数据集向下移一条
end;
if tvDepartment.Items.Count=0 then
begin
Result :=True;
exit;
end;
tvDepartment.TopItem.Expanded:=true;
//释放对象qryTree
aqryTree.Active :=False;
aqryTree.Free;
Result :=True;
end;
//------------------------------------------------------------------------------
//查找父结点函数
//参数sUpperDepartmentNo:上级部门编号
//参数tvDepartment:调用者传递来的TTreeView对象,该对象已经建立并有数据
//功能:依据sUpperDepartmentNo值,在tvDepartment中找到相应的位置,
// 若找到,返回序号,否则返回-1
function gfunFindparentSite(sUpperDepartmentNo :string;tvDepartment :TTreeView): integer;
var
i :integer;
tempStr :string;
begin
//遍历整棵树
if tvDepartment.Items.Count=0 then
begin
result:=-1;
exit;
end;
for i:=0 to tvDepartment.Items.Count-1 do
begin
tempStr:=tvDepartment.Items[i].Text;
//判断结点显示值中的第一个是否与上级编号相同
if pos(sUpperDepartmentNo,tempStr)<>0 then
begin
result:=i; //i为TreeView中items集合中的序号数
exit;
end;
end;
result :=0;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?