9.3 动态数据窗口
9.3.1 简介
从前面的内容当中,我们知道一个窗口上的数据窗口控件,必须和一个真正的数据窗口对象配合起来才能进行工作。数据窗口对象和数据窗口对象所包含的所有的实体(如文本、图形)都有自己的属性。在程序运行的时候,我们可以通过获取、修改这些属性的方法来对数据窗口对象及其所属实体进行动态的控制,甚至能够动态地建立一个新的数据窗口对象。下面,我们就来介绍动态的操纵数据窗口对象的方法。
9.3.2 动态创建数据窗口
创建数据窗口有两种方法。一种是在POWER BUILDER 的数据画板中建立,另一种就是在程序运行的过程中通过执行一段脚本来动态地建立数据窗口。下面我们来介绍这种动态创建的方法。
首先打开一个窗口画板。我们看到该窗口上面有一个数据窗口控件(图9-1)。
图9-1
在该数据窗口上面单击鼠标右键,弹出菜单,选择PROPERTIES 属性命令。弹出这个数据窗口控件的属性对话框(图9-2)。
图9-2
我们可以看到DATA WINDOWS OBJECT NAME 一项的内容为空,这说明DW_1这个数据窗口控件的所连接的数据窗口对象为空。关掉这个对话框。单击POWER BAR 上面的运行画板按钮,运行这个程序,我们看到该数据窗口上面并没有任何的显示(图9-3)。
关闭这个程序,回到POWER BUILDER 的窗口工作区。
在窗口上面单击鼠标右键,弹出菜单。在菜单上选择SCRIPT命令,为该窗口的打开事件编写程序。输入这样一段脚本:
STRING SYNTAX,SQLSTR,ERRMSG
SQLSTR = "SELECT SOCCER.NAME,SOCCER.AGE,SOCCER.CLUB,SOCCER.NATION"&
+" FROM SOCCER"
CONNECT USING SQLCA;
SYNTAX = SQLCA.SYNTAXFROMSQL(SQLSTR,"STYLE(TYPE=GRID)", ERRMSG)
dw_1.CREATE(SYNTAX, ERRMSG)
这段程序的意思是把SPSTAR 这个表中的关于足球明星的内容显示在DW_1 这个数据窗口控件上面。关闭窗口画板工作区。
单击POWER BAR上的运行按钮,执行这个程序。我们看到数据窗口中显示了我们需要的信息(图9-4)。
图9-4
9.3.3 动态更新数据窗口
数据窗口中的内容可以根据用户的需要动态的修改。下面,就给您一个例子。我们在窗口上布置一个新的按钮——“更改”。 在新的按钮上面单击鼠标右键,弹出菜单。在菜单上选择PROPERTIES 命令,弹出这个按钮的属性定义对话框。将按钮上面的文本设置为“更改”,单击OK按钮,确认修改。如图8-5。
图9-5
在按钮上面再次单击鼠标右键,弹出菜单,在菜单上面选择SCRIPT命令,开始为这个按钮的CLICKED单击事件编写脚本。我们输入这样一段脚本。
STRING SYNTAX,SQLSTR,ERRMSG
SQLSTR = "SELECT TENNIS.NAME,TENNIS.AGE,TENNIS.CLUB,TENNIS.NATION"&
+" FROM TENNIS"
CONNECT USING SQLCA;
SYNTAX = SQLCA.SYNTAXFROMSQL(SQLSTR,"STYLE(TYPE=GRID)", ERRMSG)
dw_1.CREATE(SYNTAX, ERRMSG)
dw_1.SetTransObject(SQLCA)
dw_1.RETRIEVE()
这段脚本的意思是将DW_1这个数据窗口的显示内容从足球明星更改为网球明星。请注意最后的这两行脚本。当我们创建新的数据窗口对象的时候,已经断开了数据窗口控件与事物对象的连接,所以当我们调用CREATE函数之后,还要再次调用SETTRANSOBJECT来重新建立相应的连接。
关闭窗口画板的工作区。
单击POWER BAR 上面的运行按钮,运行这个程序。现在数据窗口中的内容是足球明星的名字。如图9-6。
图9-6
下面我们单击“更改”按钮,我们看到窗口中的内容已经更改为网球明星的名字了。如图9-7。
图9-7
9.3.4 提供查询模式
在很多时候用户都希望能够自己设置检索条件来进行数据库的查询工作,所以为用户提供模式查询功能是一个常见而重要的工作。下面我们就介绍如何实现这个功能。我们打开一个预先定制好的窗口。如图5。在“查询模式”按钮上面单击鼠标右键,弹出菜单,选择SCRIPT 命令,为这一按钮的单击事件编写程序。输入下面这段脚本:
dw_1.Modify("datawindow.querymode = yes")
这行脚本的意思是将数据窗口的查询模式设置为允许。关闭这个窗口。
在“开始查询” 按钮上面单击鼠标右键,弹出菜单,选择SCRIPT 命令,为这一按钮的单击事件编写程序。输入下面这段脚本:
dw_1.Retrieve()
dw_1.Modify("datawindow.querymode = no")
这行脚本的意思是命令数据窗口按照用户输入的检索条件进行查询。并且关闭查询模式。关闭这个窗口。
关闭窗口画板工作区,然后单击POWER BAR 上面的运行按钮,运行这个程序。
我们看到数据窗口上面显示了数据库中存储的所有足球明星的资料。如图9-8。
图9-8
下面我们单击窗口上的查询模式按钮,数据窗口上面的所有数据被清空。下面我们就可以进行检索条件的输入工作了。
在窗口中所列出的表列上面输入您要设置的条件。比方说,在国别一栏当中输入意大利,在年龄一栏当中输入<25,同一行的检索条件是逻辑“与”的关系,这就表示要求检索数据库中含有的所有年龄小于25岁的意大利球星的名字。我们还可以输入更多的检索条件,比方说,在国别一栏中输入英国,在俱乐部一栏中输入“曼联”,不同的行的检索条件之间是逻辑“或”的关系,所以,前面输入的查询条件的意思就是查询数据库中小于25岁的意大利球星以及曼彻斯特联队的英国球星的资料。
按下“开始查询”按钮,我们看到数据窗口中的内容已经得到了更新。