数据窗口可以说是PowerBuilder这一优秀的数据库开发工具的王冠,动态数据窗口则是其王冠上的一颗熣灿明珠。熟练掌握并运用这一技术是PowerBuilder开发人员必修功夫之一。本文试图将有关动态数据窗口的技术资料并结合本人的一些实际开发经验对此作一较为系统的整理,疏漏之处请不吝指正。
简而言之,PowerBuilder用Create()函数创建动态数据窗口,其语法格式为:
| dw.Create(Syntax[,ErrString]) |
其中:dw为需创建的动态数据窗口名;Syntax为创建动态数据窗口的语法字符串;ErrString为可选参数,用来存放发生错误时的错误信息,若忽略,发生错误时系统自动显示消息框,一般不符我们需要,所以需定义该参数。
显然重点在Syntax, PowerBuilder提供LibraryExport()与SyntaxFromSQL()二个函数来达到这个目的:
一、 LibraryExport()函数
功能:从PowerBuilder库中输出一个对象,返回该对象的语法。
语法格式:LibraryExport(LibName,ObjName,ObjType)
其中:LibName 为带路径的PowerBuilder库名,若未指定路径,则按系统标准搜索路径搜索;ObjName为导出对象名,现为LibName中的数据窗口对象名;ObjType为该对象的类型,现为数据窗口,值为ExportDataWindow!。示例如下:
| String ls_DwSyntax,ls_Error ls_DwSyntax=LibraryExport("C:\PBExam\dy_dw.pbl","d_tbl1", ExportDataWindow!) //数据窗口dw_1的产生下面将详细讨论,现暂略 dw_1.Create(ls_DwSyntax,ls_Error) //以下语句与下面示例中的相同,故此处略。 |
LibraryExport()函数是利用已有的数据窗口对象创建动态数据窗口,有一定的使用价值,但不多见。
二、 SyntaxFromSQL()函数
功能:基于SQL的SELECT 语句产生创建数据窗口的语法。
语法格式:Transaction.SyntaxFromSQL(SqlString,StyleString,ErrorString)
其中:Transaction.为已连接的事务对象,一般即为SQLCA;SqlString为SQL--SELECT 语句;Stylestring为数据窗口的显示风格字符串,比较复杂,一般常用"Style(Type=Grid)";ErrorString用来存放发生错误时的错误信息。
一般来说,SyntaxFromSQL()函数灵活性高、功能强,因此创建动态数据窗口大都使用该函数,下面的示例也是使用该函数。
三、创建动态数据窗口的一般步骤
创建动态数据窗口的一般步骤如下:
1、在某窗口(如w_main)上用鼠标点建一个数据窗口控件(如dw_1),其DataObject为空。
2、构造SyntaxFromSQL()函数的语法字符串。这是PowerBuilder动态数据窗口的关键,稍为复杂一些,具体做法请见下面实例。
3、用Create()函数创建动态数据窗口dw_1,并用SetTransObject()函数为其分配事务对象,具体做法请见下面实例。
这种方法的主要缺点是必须在设计阶段先建数据窗口控件,运行时无法增减,这对于一些较为特殊的应用(如设计阶段尚不知需几个数据窗口)就不太适合了。那如何解决这个问题呢?经过一番摸索并查阅了一些资料,终于找到了二种解决方法,现分别介绍如下:
1、创建一个标准可视数据窗口用户对象u_d_sample
PowerBuilder6.0/6.5中步骤为:点击工具栏上的UserObject图标,在弹出的Select User Object窗口中点击New按钮,出现New User Object窗口,双击其中Visual下的Standard图标, 在弹出的Select Standard Visual Type窗口中双击datawindow选项,即出现User Object(Untitled)窗口, 点击工具栏上的Save图标,弹出的Save User Object窗口,在User Objects: 中输入u_d_sample回车即进入User Object---u_d_sample窗口,关闭该窗口,标准可视数据窗口用户对象u_d_sample即告建成。
PowerBuilder7.0中步骤为:点击工具栏上的New图标,在弹出的New窗口中选择Object页面,双击其中的Standard Visual图标, 在弹出的Select Standard Visual Type窗口中双击datawindow选项,出现User Object(Untitled)inherited from datawindow窗口,将其右边的Title栏中的none删除,再点击左边空白区,然后点击工具栏上的Save图标,以后的操作步骤与PowerBuilder6.0/6.5大致相同。至于PowerBuilder8.0则与PowerBuilder7.0大体相同,不再赘述。






