浅谈PB中动态DataWindow的技术应用.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈PB中动态DataWindow的技术应用

浅谈PB中动态DataWindow的技术应用 在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_count   string 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 :ywm[li_i], :zdlx[li_i] ;   do while sqlca.sqlcode=0   ls_temp=trim(zdlx[li_i])   choose case ls_temp   case 1   ls_temp=char(10)   case 2   ls_temp=numeric(7,2)   end choose   zdlx[li_i]=ls_temp   ywm[li_i]=trim(ywm[li_i])   li_i++   FETCH a_cur INTO :ywm[li_i], :zdlx[li_i] ;   loop   close a_cur;   //创建B表和主键(Primary Key)   ls_sql=create table b+(+ywm[1]+ +zdlx[1]+ not null,   +constr

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档