祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 7297|回复: 3

[其它] 在PB中巧用下拉数据窗口

[复制链接]

[其它] 在PB中巧用下拉数据窗口

[复制链接]
newease

主题

0

回帖

1万

积分

论坛元老

积分
19020
贡献
在线时间
小时
2009-8-12 09:34:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
PowerPB提供了下拉数据窗口(DropDown DataWindow),使数据窗口更灵活、更方便。在用数据窗口进行数据录入时,经常要用到代码录入,即对经常输入的某些值设置代码,录入时直接录入代码即可。例如,有两个表,主表main_table和代码表code_table,录入时主表中需要代码表中的数据,但不允许录入不在代码表中的数据。下面介绍如何使用下拉数据窗口实现上述功能。


静态设计下拉数据窗口
    首先对主表和代码表设计两个数据窗口dw_main和dw_code,其中dw_main包括字段id、name、本人、city和unit;dw_code包括字段code和data。假设unit字段有几个常用值可使用代码录入,则在设计dw_main时,用鼠标右键点击字段unit,在下拉菜单中选择Properties...(属性),则系统会弹出unit列的属性对话框;在其中选择Edit(编辑)项,并在Style(风格)下拉列表框中选择DropDownDW项;然后在下面的Options(选项)框中作具体的选项配置:在DataWindow下拉框中选择已设计好的代码数据窗口dw_code作为下拉数据窗口;在DisplayColumn(显示列)下拉框中选择code字段;在Data Column(数据列)下拉框中选择data字段 ,这表示显示的是code字段的内容,而实际存于表main_table中的是data字段的内容。至此,数据窗口设计完毕。
    设计完数据窗口后,需要建立一个数据录入的窗口(window),名字为w_input;在窗口w_input上建立一个数据窗口的控件dw_1,其属性DataWindow Object Name设为dw_main,并在w_input的open事件中写入下列语句:
    dw_1.SetTransObject(SQLCA)
    dw_1.Retrieve()
    这样,在执行此窗口时,在unit字段上就会出现一个下拉列表框,列出了表code_table中所有的内容,用户可以用鼠标选择录入。

动态改变SQL语句
    在上面的例子中,如果表main_table中的字段city也需要代码录入,则还需为city字段新建一个表,这样很麻烦,因为有几个字段需要代码,就需有几个表与之对应。我们可利用下拉数据窗口的一些特点来解决这一问题。可以相应地修改表code_table的结构,加一
个字段field(char(30)),以存储需要代码的字段名,这样,就可利用SQL语句对之进行检索,以得到某字段的所有代码。具体实现如下:
    重新设计数据窗口dw_code,把field字段加上并使它不可见(因为用户不需要见到该字段的内容),数据窗口dw_main和窗口w_input的设置同上,只是在数据窗口dw_1中需要进行一些编程。在ItemFocusChanged事件中,加入如下代码:
String ls_sql
Integer rtncode
DataWindowChild field_child
//dwo为该事件的参数,其name属性的值表示获得焦点的字段名
Choose Case lower(dwo.name)
Case ‘city'
//city字段获得焦点
//获得city字段下拉数据窗口的句柄
rtncode = dw_1.GetChild("city",field_child)
If rtncode = -1 Then MessageBox( "Error", "Not a DataWindowChild")
//设置事务对象
field_child.SetTransObject(SQLCA)
//获得下拉数据窗口的SQL语句
ls_sql=field_child.GetSQLSelect()
//重新设置SQL语句,加上Where条件
ls_sql=ls_sql+"Wherefield=‘"+dwo.name+"'"
field_child.SetSQLSelect(ls_sql)
//取得满足条件的数据
field_child.Retrieve()
Case ‘unit'
unit字段获得焦点
//获得unit字段下拉数据窗口的句柄
rtncode = dw_1.GetChild("unit",field_child)
……(此处编程同上)
End Choose

动态设置取值参数
    上例中采用动态改变SQL语句,其实,下拉数据窗口有一种更简单的方法就是设置取值参数(Retrieval Arguments),但这种方法适合从固定表中取数据,如果是从动态表(即表名不固定)中取数据,则只能通过改变SQL语句来实现。
    修改数据窗口dw_code,在图形方式下,选择Design菜单下的Retrieval Arguments…,设置取值参数的类型为String,名字可任取,假设为field_data。然后在窗口下面的Where标签中选择Column为"code_table.field",Operator为"=",Value为取值参数的值:field_data(变量名前加冒号表示该变量的值),至此,取值参数设置完毕。同上例,也需要在窗口w_input中的数据窗口控件dw_1中的ItemFocusChanged事件中进行如下编程:
Integer rtncode
DataWindowChild field_child
//dwo为该事件的参数,其name属性的值表示获得焦点的字段名
Choose Case lower(dwo.name)
Case ‘city'//city字段获得焦点
//获得city字段下拉数据窗口的句柄
rtncode = dw_1.GetChild("city",field_child)
If rtncode = -1 Then MessageBox( "Error", "Not a DataWindowChild")
//设置事务对象
field_child.SetTransObject(SQLCA)
//利用取值参数取得满足条件的数据,如果没有数据,则插入一空记录,否则系统会提示一个英文对话框,要求输入取值参数的值
If field_child.Retrieve(dwo.name)<1 Then
field_child.InsertRow(0)
Case ‘unit'
//unit字段获得焦点
//获得unit字段下拉数据窗口的句柄
rtncode = dw_1.GetChild("unit",field_child)
……(此处编程同上)
End Choose
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
unicoowen

主题

0

回帖

377

积分

高级会员

积分
377
贡献
在线时间
小时
2009-8-18 10:20:06 | 显示全部楼层
这办法不错,我也常用
共享共进共赢Sharing And Win-win Results
yezi1305

主题

0

回帖

53

积分

注册会员

积分
53
贡献
在线时间
小时
2009-9-1 13:23:10 | 显示全部楼层
非常感谢楼主分享,初学中。。。
共享共进共赢Sharing And Win-win Results
fuxiaoyang13

主题

0

回帖

3136

积分

论坛元老

积分
3136
贡献
在线时间
小时
2010-6-14 23:01:26 | 显示全部楼层
学习学习!!!!!!!!!
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-5-4 15:19 , Processed in 0.038306 second(s), 7 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表