| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> pb >> datawindow >> 文章正文
在PB中巧用下拉数据窗口            【字体:
在PB中巧用下拉数据窗口
作者:-    文章来源:-    点击数:    更新时间:2006-4-14

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

静态设计下拉数据窗口
    首先对主表和代码表设计两个数据窗口dw_main和dw_code,其中dw_main包括字段id、name、sex、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

[1] [2] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • PB编程技巧实例

  • 制作中国式报表(二)

  • 制作中国式报表(一)

  • PB中隐藏下拉数据窗的检索参…

  • PowerBuilder中数据窗口使用…

  • DataWindow的数据缓冲区

  • 利用PowerBuilder开发格式生…

  • 用DataWindow实现对多表的修…

  • 不安装Oracle数据库的连接方…

  • 如何恢复SybaseSQLAnywhere的…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |