[返回]
计算机世界1999年第10期

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

兰州铁道学院 胡法红

  PowerBuilder是目前流行的数据库前端开发工具之一,特别是它的数据窗口,可以很方便地对数据库进行操作,并且数据窗口对象又以其灵活多样的显示风格深得广大开发者的喜爱。有时候,数据窗口对象中的某些列的取值必须满足一定的条件且来自另一个数据源,这样,我们就要使用下拉数据窗口风格的数据窗口对象,并且在下拉数据窗口中设置检索参数,该下拉数据窗口仅显示满足条件的数据。不幸的是,如果我们直接使用该带参数的下拉数据窗口,在使用Insertrow()、Retrieve()函数操纵数据窗口时,系统会自动检索下拉数据窗口,出现"Specify`Retrieval"对话框,怎样才能避免该对话框出现呢?

----为了避免出现"Specify`Retrieval"对话框的出现,我们在操纵主数据窗口之前必须先操纵下拉数据窗口。为了让读者更清楚具体操作过程,我们以一个具体实现为例加以说明。本例子的数据来自于两个表:bj和student。具体步骤如下:

----一.创建窗口w_test。窗口上的控件有:命令按钮:cb_1(插入)、cb_2(关闭),数据窗口控件dw_1,静态文本st_1(年度),单行编辑框sle_1。

----二.创建基于表student的数据窗口对象d_student、基于表bj的数据窗口对象d_bj。其中设置d_bj中的列"nd(年度)"设置检索参数,参数名为nd(string),当检索子数据窗时,下拉数据窗显示满足nd=:nd的数据;而d_student的列class(班级)为下拉数据窗风格,子数据窗为d_bj;这样,当单击"插入"时,数据窗的"班级"列只显示满足条件"nd=sle_1.text"的班级名称。

----三.在窗口"w_test"中声明事例变量(Instance`Variables):DatawindowChild`child

----四.在窗口open事件中写入以下脚本程序:

sle_1.text=string(today(),"yyyy")

  dw_1.settransobject(sqlca)

----五.在命令按钮cb_1(插入)的"clicked"事件中写入以下脚本程序:

  dw_1.getchild("class",child)

  child.settransobject(sqlca)

  child.retrieve(sle_1.text)

  dw_1.settransobject(sqlca)

  dw_1.insertrow(0)

----所有步骤完成后,运行该窗口,出现窗口如图一。

pb121_1.jpg (19262 字节)
图一

----此时,光标停于单行编辑框sle_1内,在该编辑框内输入年度号(如:1998),然后单击命令按钮cb_1(插入),移动光标到新添加行的"班级"列,单击,出现下拉数据窗口(如图二),该子窗口出现的数据就为满足nd="1998"的班级名称。

pb121_2.jpg (19253 字节)
图二

----从上面的实例操作可知,为了在子数据窗口中仅显示满足条件的数据,就必须为子数据窗口设置检索参数。单为了在操纵主数据窗口时出现"SpecifyRetrival"窗口,只需在操纵主数据窗口之前先对子数据窗口操纵,这样就可以达到我们的要求。