祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 7747|回复: 2

[参考资料] [PB]-动态数据窗口

[复制链接]

[参考资料] [PB]-动态数据窗口

[复制链接]
ehxz

主题

0

回帖

57万

积分

管理员

积分
570764
贡献
在线时间
小时
2010-8-12 15:43:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
〓创建动态数据窗口
若要动态创建数据窗口,需要使用函数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_sql
ls_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,本人,from address where 本人='男'~"")
    也可以直接使用语法来修改数据窗口的SQL语句。例如,上面的语句可以改写成:
    dw_1.datawindow.table.select="select name,本人,from address where 本人='男'"
然而这种方法无法验证SQL语句是否正确,不如使用Modify函数,但是上面这种方法的执行速度比较快,如果能够确保准确无误,这种方法还是可以考虑的。可以看出它的语法和上面的相同。
    这里的技巧是,如果在运行时需要对数据窗口的SQL语句进行修改,创建没有where子句的数据窗口比较好些。因为where子句可以在动态修改时添加,sort可以在运行时使用setsort函数实现。这样,程序运行时处理数据窗口的SQL语句就比较方便。
下面介绍一个在程序运行时动态修改数据窗口的SQL语句的实例。在该例子中,使用数据窗口控件函数ModIfy可以修改数据窗口对象中的控件的属性。脚本如下:
String ls_SQL,ls_where,ls_select
ls_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前面的内容
Else
ls_select = ls_SQL //如果没有where子句则直接赋值
End If
ls_where = " where xm like '郭%' order by xm" //where子句。可以设计界面让用户构造
ls_SQL = ls_select + ls_where //添加where子句
If dw_1.SetSQLSelect(ls_SQL) = 1 Then
dw_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 from tab-delimited data in a string.(把字符串数据插入到数据窗口中)
--具体请见PB帮助
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
j528

主题

0

回帖

3254

积分

论坛元老

积分
3254
贡献
在线时间
小时
2013-4-27 16:06:45 | 显示全部楼层
这篇文章真不错
共享共进共赢Sharing And Win-win Results
renliqing

主题

0

回帖

271

积分

注册会员

积分
271
贡献
在线时间
小时
2013-5-12 14:42:24 | 显示全部楼层
赞一个,学习了!
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-4-28 06:37 , Processed in 0.045383 second(s), 10 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表