数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
在PB中快速实现数据库树形结构

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

在PB中快速实现数据库树形结构
(作者:阮晓华 2001年04月03日 17:23)

  树形结构在Windows环境中被普遍应用,它以简捷的界面深受用户喜爱。但在数据库开发中面对层次多、结构复杂的数据,如何快速地构造树形目录呢?

  实现关键技术
  在PowerBuilder所提供的控件中包含了Treeview控件,但树的具体形成还需用户编写脚本实现,即它的列表项要在程序中动态添加,而这些列表数据通常由用户已录入在数据库中,并作为数据库维护的一项内容。

  为了能快速实现数据库的树形结构,我们可以采用编码法,即利用编码表来实现。

  编码表的基本字段包括编码和编码名称,其编码规则是以数字、字母的位数来区分不同层次,同一层编码位数相同,层次按位数递增,程序通过判断编码位数来决定所在层数。

  例如:第一层为10~99两位,第二层为1010~1099四位,用户需要做的是先要设计树的结构和对应编码,并把相应名称进行录入,然后程序在读取这些数据时形成树。

  编码法的优点是可以适应任何复杂的层次数据,实现方法简单,且树内容有变动时,无需更改程序代码。

  范例程序与主要代码分析
  我们以建立一个城市名称的树形结构为例,来说明编码法的应用。

  首先建立编码表:city_tab(行政编码、行政名称),其对应的数据窗口是dw_tree(处于隐藏状态),对应树控件为tv_1。

  接着在录入界面下输入各城市名称、区域名称及对应编码,最后在窗口的OPEN事件上输入以下代码:

  long tvi_root,tvi_next,tvi_next1,tvi_next2,tvi_root1,currenthandle,currentnext

  int i,j,z,k

  string city_bm,city_name

  treeviewitem tvi

  //定义一个树形数据类型的变量

  tv_1.setredraw(false)

  dw_tree.settransobject(trooptrans) //连接数据库

  dw_tree.retrieve()

  i=dw_tree.rowcount()

  j=1

  //定义树形变量的属性,设置根目录的标签,若在编码表中有此根目录,则不用在此生成

  tvi.label="城市"

  //生成根目录

  // 目录未打开时的图片索引,此图片可在树形控件中设定

  tvi.pictureindex=1

  //目录打开时的图片索引

  tvi.selectedpictureindex=3

  tvi_root=tv_1.insertitemlast(0,tvi)

  do while j<=i

  //从隐含的编码数据窗口检索数据,第一行开始取区域内码,因为编码表按编码序排,所以可自动按序建层次

  city_bm=dw_tree.getitemstring(j,"city_bm")

  city_name=dw_tree.getitemstring(j,"city_name")

  //取区域名称

  k=len(city_bm)

  z=int(k)//取内码的位数

  choose case z

  case 2

  tvi.label=city_name

  //把编码值赋给tvi

  tvi.data=city_bm tvi.pictureindex=2

  tvi.selectedpictureindex=3

  //以根项目为父项目,插入第二层项目,以后凡是检索到位数是二的,均在此生成二层目录

  tvi_root1=tv_1.insertitemlast(tvi_root,tvi)

  case 4

  //以后凡是检索到位数是四位,均生成第三层目录

  tvi.label=city_name

  tvi.data=city_bm

  tvi.pictureindex=2

  tvi.selectedpictureindex=3

  tvi_next=tv_1.insertitemlast(tvi_root1,tvi)

  end choose

  j=j+1

  loop

  tv_1.setredraw(true)

  currenthandle=tv_1.finditem(roottreeitem!,0)

  //查找根目录下的第一项目

  tv_1.expanditem(currenthandle) //缺省打开此项目

  图1


  图1是运行此段程序后形成的树形结构,该程序在Windows 98、PowerBuilder 6.5下运行通过



相关文章

相关软件