当前位置:文档之家› PB动态数据窗口

PB动态数据窗口

[PB]-动态数据窗口〓创建动态数据窗口若要动态创建数据窗口,需要使用函数Create,该函数的语法如下:dw_1.Create(syntax{,errorbuffer})其中,dw_1是数据窗口控件的名称,该数据窗口控件要和新创建的数据窗口对象相关联。

syntax是用来描述创建数据窗口对象的确切语法的字符串。

errorburrer是可选项,用来保存创建数据窗口对象过程中发生的错误信息。

如果不指定该参数,就会在发生错误时显示一个错误信息的提示窗口。

如果创建成功该函数返回1,否则返回-1,如果参数为null则函数返回null。

由于Create函数成功创建数据窗口对象后,要改变dw_1数据窗口控件所关联的数据窗口对象,因此,需要重新为数据窗口设置事务对象(使用函数SetTransObject或者SetTrans)。

获取创建数据窗口的语法有多种方法,可以对相关的SQL语句使用SyntaxFromSQL函数,也可以使用对已经创建好的数据窗口对象使用LibraryExport函数。

因为创建数据窗口的语法比较复杂,即使使用了LibraryExport输出已有数据窗口对象的语法,操作起来也相当费劲。

所以,更为通用的是前面一种方法。

这种方法配合一定的编程技巧,让用户指定要创建的数据窗口对象的SQL语句,使用户有更多的自由和选择。

使用这种方法,肯定用到函数SyntaxFromSQL,它的语法是:transaction.SyntaxFromSQL(SQLselect,presetation,err)其中,transaction是事务对象的名称,该事务对象必须正确地设置了相关参数,并且和数据库建立了联结。

SQLselect是用来创建数据窗口的SQL语句,为String 类型。

presentation是要创建的数据窗口对象的显示风格,为String类型。

简单的格式是:Style(Type=presentationstyle)其中Style和Type都是保留字,presentationstyle的取值有Tabular,Grid,Form,Graph,Group,Label和Nup,其中Tabular是缺省类型。

err是用来保存函数执行时出错信息的string类型的变量。

*关于函数SyntaxFromSQL的参数presentation可以有更复杂的语法。

其格式是:"Style ( Type=value property=value ... )DataWindow ( property=value ... )Column ( property=value ... )Group groupby_colnum1 Fby_colnum2 ... property ... )Text property=value ... )Title ( 'titlestring' )"使用这样的格式,可以详细定义要创建的数据窗口对象的外观。

〓在很多情况下都需要一个数据窗口控件和不同的数据窗口对象关联。

可以通过修改数据窗口控件的dataobject属性来实现。

在修改了这一特性之后,数据窗口控件就不再具有与它相关的事务处理对象了,应该再重新为数据窗口设置事务对象。

*如果为数据窗口设置了行焦点标志,在修改了dataobject属性后应该重新设置行焦点标志。

〓获得数据窗口的SQL语句有时需要修改数据窗口对应的SQL语句,以便构造查询应用。

这时,首先就要读取数据窗口当前的SQL语句,然后再对where子句进行修改。

可以有多种方法获取SQL语句。

最常用的是使用函数GetSQLSelect,它的语法如下:dw_1.GetSQLSelect()其中,dw_1是数据窗口控件的名称,可以是子数据窗口或datastore等。

函数执行正确则返回对应的SQL语句,否则返回空字符串("")。

另外,还可以使用Describe函数描述数据窗口对象的相关属性来获得。

在使用该函数时,如果数据宙口联结到数据库则返回真正的SQL语句,否则返回数据窗口的PBselect语句。

PBselect语句是数据窗口的专用语法,和SQL语句有很大的区别,但也是从SQL语句转化而来的。

数据窗口对象有三个属性用来保存SQL 语句,它们是的table.select、table.SQLselect、table.select.attribute。

这些属性获得的SQL语法稍微有区别。

下面是获取一个数据窗口SQL语法的不同的语句:string ls_sqlls_sql = dw_1.GetSQLSelect()ls_sql = dw_1.Describe("datawindow.table.select")ls_sql = dw_1.describe("datawindow.table.SQLselect")ls_sql = dw_1.describe("datawindow.table.select.attribute")〓修改数据窗口的SQL语句使用上面介绍的方法获得SQL后,可以进行修改加工,然后重新应用于数据窗口对象。

使用这种方法可以创建功能比较强大的查询程序。

和提取语法一样,也有两种修改SQL的方法:使用函数Modify或者SetSQLSelect。

不管使用哪种方法,修改完SQL语句后都要重新设置事务对象。

比较常用的是后一种函数,它的语法是:dw_1.SetSQLSelect(statement)其中,dw_1是要重新设置SQL语句的数据窗口控件名称,可以是子数据窗口或者datastore。

statement是一个包含合法SQL语句的字符串。

该函数正确执行返回1,否则返回-1。

另外,对于新的SQL语句有很多需要注意的地方:(1)字段的类型和个数必须和原SQL语句相同;(2)原来的SQL语句中定义了检索变量时,就不能重新设置SQL语句。

如果原来的数据窗口可以修改数据库中的数据表,那么重新设置时,PowerBuilder把和原来主键位置相同的字段仍然作为新的主键。

如果碰到了下面的两种情况,则将使数据窗口无法更新:a)from于句中包含多个数据表名;b)数据窗口可以更新的是数据库的计算列。

使用相应的Modify函数和相应的语法也可以修改数据窗口的SQL。

例如:dw_1.modify("datawindow.table.select=~"select name,sex,from addresswhere sex='男'~"")也可以直接使用语法来修改数据窗口的SQL语句。

例如,上面的语句可以改写成:dw_1.datawindow.table.select="select name,sex,from address where sex='男'"然而这种方法无法验证SQL语句是否正确,不如使用Modify函数,但是上面这种方法的执行速度比较快,如果能够确保准确无误,这种方法还是可以考虑的。

可以看出它的语法和上面的相同。

这里的技巧是,如果在运行时需要对数据窗口的SQL语句进行修改,创建没有where子句的数据窗口比较好些。

因为where子句可以在动态修改时添加,sort 可以在运行时使用setsort函数实现。

这样,程序运行时处理数据窗口的SQL语句就比较方便。

下面介绍一个在程序运行时动态修改数据窗口的SQL语句的实例。

在该例子中,使用数据窗口控件函数ModIfy可以修改数据窗口对象中的控件的属性。

脚本如下:String ls_SQL,ls_where,ls_selectls_SQL = dw_1.Describe("DataWindow.table.select") //获取数据窗口当前的SQL语句If Pos(ls_SQL,"where") > 0 Then //如果有where子句(有可能是运行时添加的)ls_select = Left(ls_SQL,pos(ls_SQL,"where") - 1) //取where前面的内容Elsels_select = ls_SQL //如果没有where子句则直接赋值End Ifls_where = " where xm like '郭%' order by xm" //where子句。

可以设计界面让用户构造ls_SQL = ls_select + ls_where //添加where子句If dw_1.SetSQLSelect(ls_SQL) = 1 Thendw_1.Retrieve()End If在上面的例子中,where条件都是固定的。

也可以设计界面,让用户指定条件来查询数据。

该脚本可以编写成一个函数,将where子句作为参数,将是否成功设置SQL作为返回值,在用户每次指定查询条件进行检索时调用该函数。

〓其他*GetFileOpenName(title,pathname,filename{,extension{,filter}})功能:Displays the system's Open File dialog and allows the user to select a file or enter a filename.(打开选择文件对话框)--具体请见PB帮助*LibraryDirectory ( libraryname, objecttype )功能:Obtains a list of the objects in a PowerBuilder library.(获得PBL中的对象)--具体请见PB帮助*long dwcontrol.ImportString ( string string {, long startrow {, long endrow {,long startcolumn {, long endcolumn {, long dwstartcolumn } } } } } ) 功能:Inserts data into a DataWindow control or DataStore fromtab-delimited data in a string.(把字符串数据插入到数据窗口中)--具体请见PB帮助。

相关主题