新动态数据窗口技术.doc_第1页
新动态数据窗口技术.doc_第2页
新动态数据窗口技术.doc_第3页
新动态数据窗口技术.doc_第4页
新动态数据窗口技术.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

12.3 动态数据窗口(3) 12.3.3 获得数据窗口的SQL语句 有时需要修改数据窗口对应的SQL语句,以便构造查询应用。这时,首先就要读取数据窗口当前的SQL语句,然后再对where子句进行修改。可以有多种方法获取SQL语句。最常用的是使用函数GetSQLSelect,它的语法如下: dwcontrol.GetSQLSelect ( ) 其中,dwcontrol是数据窗口控件的名称,可以是子数据窗口或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语句。脚本如下: long ll_RowNo string ls_temp dw_1.SetTransObject(SQLCA) ll_RowNo = dw_2.InsertRow(0) dw_2.ScrollToRow(ll_RowNo) ls_temp = dw_1.Describe(DataWindow.table.select) dw_2.SetItem(ll_RowNo,method,table.select) dw_2.SetItem(ll_RowNo,connected,ls_temp) ll_RowNo = dw_2.InsertRow(0) dw_2.ScrollToRow(ll_RowNo) ls_temp = dw_1.Describe(DataWindow.table.SQLselect) dw_2.SetItem(ll_RowNo,method,table.SQLselect) dw_2.SetItem(ll_RowNo,connected,ls_temp) ll_RowNo = dw_2.InsertRow(0) dw_2.ScrollToRow(ll_RowNo) ls_temp = dw_1.Describe(DataWindow.table.select.attribute) dw_2.SetItem(ll_RowNo,method,select.attribute) dw_2.SetItem(ll_RowNo,connected,ls_temp) ll_RowNo = dw_2.InsertRow(0) dw_2.ScrollToRow(ll_RowNo) ls_temp = dw_1.GetSQLSelect() dw_2.SetItem(ll_RowNo,method,getSQLselect() dw_2.SetItem(ll_RowNo,connected,ls_temp) Disconnect; ls_temp = dw_1.Describe(DataWindow.table.select) dw_2.SetItem(1,not_connected,ls_temp) ls_temp = dw_1.Describe(DataWindow.table.SQLselect) dw_2.SetItem(2,not_connected,ls_temp) ls_temp = dw_1.Describe(DataWindow.table.select.attribute) dw_2.SetItem(3,not_connected,ls_temp) ls_temp = dw_1.GetSQLSelect() dw_2.SetItem(4,not_connected,ls_temp) Connect; 上面的脚本在窗口的Open事件中编写,执行后的结果如图12-8所示。 图12-8 显示SQL语法 12.3.4 修改数据窗口的SQL语句 使用上面介绍的方法获得SQL后,可以进行修改加工,然后重新应用于数据窗口对象。使用这种方法可以创建功能比较强大的查询程序。 和提取语法一样,也有两种修改SQL的方法:使用函数ModIfy或者SetSQLSelect。不管使用哪种方法,修改完SQL语句后都要重新设置事务对象。比较常用的是后一种函数,它的语法是: dwcontrol.SetSQLSelect ( statement ) 其中,dwcontrol是要重新设置SQL语句的数据窗口控件名称,可以是子数据窗口或者datasTore。statement是一个包含合法SQL语句的字符串。该函数正确执行返回1,否则返回-1。另外,对于新的SQL语句有很多需要注意的地方: (1)字段的类型和个数必须和原SQL语句相同; (2)原来的SQL语句中定义了检索变量时,就不能重新设置SQL语句。 如果原来的数据窗口可以修改数据库中的数据表,那么重新设置时,PowerBuilder把和原来主键位置相同的字段仍然作为新的主键。如果碰到了下面的两种情况,则将使数据窗口无法更新: l from子句中包含多个数据表名; l 数据窗口可以更新的是数据库的计算列。 使用相应的ModIfy函数和相应的语法也可以修改数据窗口的SQL。例如: dw_1.ModIfy(DataWindow.table.select=select name,sex from address where 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_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(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论