分享
 
 
 

在PB中快速实现数据库树形结构

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

在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下运行通过

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有