DataWindow中动态变更DropDownDW值.doc_第1页
DataWindow中动态变更DropDownDW值.doc_第2页
DataWindow中动态变更DropDownDW值.doc_第3页
DataWindow中动态变更DropDownDW值.doc_第4页
DataWindow中动态变更DropDownDW值.doc_第5页
全文预览已结束

VIP免费下载

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

文档简介

在PowerBuilder的应用程序开发过程中,对数据库中数据进行操作的对象是数据窗口对象(DataWindow),利用数据窗口对象,我们可以十分方便地完成对数据库中已经存在的表中数据进行检索、查询、插入、删除和更新。但是,在实际问题中,我们常常遇到数据库中的一些表是用户在程序运行期间动态生成的,若要对这样表中的数据进行操作,就要运用动态数据窗口对象,值得提到的一点是,在动态数据窗口对象生成时,其标题区(Header Band)中的文本不能直接显示成汉字,这的确是一点遗憾,不过这个问题可以通过映射的方法得到解决。一、 问题的提出设有如下两张表:A表中的记录是用户可以在程序运行期间进行自由增加、修改、删除和更新的,B表中的属性(即:字段)由A表中的记录决定并动态创建,而且,能够方便地对B表中的数据提供汉化的操作界面。当然,将B表创建为下表也是可以的,但是,在动态生成数据窗口对象时,其标题区(Header Band)中的文本不会显示成汉字,而是一些乱码,反而不利于问题的解决。二、 问题的解决1、 动态创建B表的解决我们要动态创建B表,就要构建动态SQL语句。何谓动态SQL语句?数据库应用程序通常进行确定的工作,因此在编写和编译时,就可以确定完整的SQL语句,但当需要使用PowerBuilder不支持的嵌入SQL语句(如DDL语句),或者在编译时不知道语句的具体格式或参数,则在运行时构成SQL语句,这类语句被称为动态SQL语句。动态SQL语句的格式:EXECUTE IMMEDIATE SQL statement Using Transation Object;参数说明:SQL statement 包含一条有SQL语句的字符串Transation Object 事务对象2、 动态数据窗口对象创建及标题区(Header Band)中文本汉化的解决(1) 在程序运行时,我们可以调用Create函数动态生成数据窗口对象。格式如下:DataWindowControl.Create(Syntax,Errorbuffer)参数说明:DataWindowControl 将在其中创建数据窗口对象的数据窗口控件名Syntax 数据窗口对象源代码Errorbuffer 用于保存错误信息的字符串(2) 由于标题区(Header Band)中文本框的名称是对应细目区(Detail Band)中相应列的名称加上_t构成的,而细目区(Detail Band)中列的名称又是相应表的属性的名称。因此,我们能够使用游标(Cursor)取出A表中的ywm和zwm的值,然后使用映射的方式替换标题区(Header Band)中文本框的文本(Text)属性,从而使标题区(Header Band)中文本框的文本显示为相应的汉字。三、 一个简单的例子在PowerBuilder 6.5和MS SQL Server 6.5的环境下,使用一个简单的例子实现上述的观点,限于篇幅,只列出主要界面及关键程序。1、动态创建B表按钮对应的代码是:int li_i=1,li_countstring ywm,zdlx,ls_temp,ls_sql/使用游标(Cursor)从数据库的表中获取ywm和zdlx的值并存储于数组ywm和zdlx中select count(*) into :li_count from a;DECLARE a_cur CURSOR FOR SELECT ywm,zdlx FROM a order by ywm;OPEN a_cur ; FETCH a_cur INTO :ywmli_i, :zdlxli_i ;do while sqlca.sqlcode=0ls_temp=trim(zdlxli_i)choose case ls_tempcase 1ls_temp=char(10)case 2ls_temp=numeric(7,2)end choosezdlxli_i=ls_tempywmli_i=trim(ywmli_i)li_i+FETCH a_cur INTO :ywmli_i, :zdlxli_i ;loopclose a_cur;/创建B表和主键(Primary Key)ls_sql=create table b+(+ywm1+ +zdlx1+ not null,&+constraint pk_b primary key (+ywm1+)execute immediate:ls_sql;/增加B表的列for li_i=2 to li_countls_sql=alter table b add +ywmli_i+ +zdlxli_iexecute immediate:ls_sql;end for2、动态创建数据窗口对象按钮对应的代码是:string syntax,sqlselect,errmsg,ls_col1,ls_col2,ls_name,ls_b;/动态创建数据窗口对象DataWindowls_b=bsqlselect=select * from +ls_b;syntax=sqlca.syntaxfromsql(sqlselect,style(type=grid),errmsg);dw_1.create(syntax)/汉化标题区(Header Band)文本DECLARE v_cur CURSOR FOR SELECT ywm,zwm FROM a order by ywm;OPEN v_cur ; FETCH v_cur INTO :ls_col1, :ls_col2 ;do while sqlca.sqlcode=0ls_name=ls_col1+_+t+.+text+=+ls_col2+dw_1.modify(ls_name)FETCH v_cur INTO :ls_col1, :ls_col2 ;loopclose v_cur;dw_1.settransobject(sqlca);dw_1.retrieve()四、 结束语利用PowerBuilder的动态数据窗口对象的技术应用,可以解决实际中数据库的动态数据处理问题,从而使应用程序具有更好的交互性和适应性,若稍加变动,用途是十分广泛的。又1篇DataWindow中动态变更DropDownDW值PowerBuilder中的DataWindow对数据库的操作功能非常强大,尤其是它的DropDownDW编辑风格,更是 为相关数据的一致性提供了保证。在实际应用中,经常需要将具有DropDownDW编辑风格的字段按某一条件 显示特定的内容。 比如在某一应用中,部门员工字段的值须按变化的部门编号(或部门名称)动态改变。 为实现这一要求,可利用DataWindowChild对象。DataWindowChild对象可以是嵌套的报表,或具有 DropDownDataWindow编辑风格的DataWindow对象。例如,一个具有DropDownDataWindow编辑风格列的 DataWindow对象就是一个DataWindowChild对象。DataWindowChild对象用于访问独立于DataWindow功能之 外的DataWindow对象,并且由于它需要被存储和自动实例化,它继承自系统的Structure对象。 下面以一个小实例简要说明。设有一名为dw_1的DataWindow,其中有一“name (员工姓名)”字段,该字段具有DropDownDataWindow编辑风格,与之相连的DataWindow名为dw_who,该DataWindow包含一个按字段“deptid(部门编号)”动态更新的查询条件。代码如下: DataWindowChild dwc integer rtncode file:/具有DropDownDW编辑风格、值需动态改变的字段的名称 rtncode = dw_1.GetChild(name, dwc) IF rtncode = -1 THEN MessageBox( 错误提示, Not a DataWindowChild) / 建立连接 CONNECT

温馨提示

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

评论

0/150

提交评论