选择显示字体大小

浅谈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,"&
  +"constraint pk_b primary key ("+ywm[1]+"))"
  execute immediate:ls_sql;
  //增加b表的列
  for li_i=2 to li_count
  ls_sql="alter table b add "+ywm[li_i]+" "+zdlx[li_i]
  execute immediate:ls_sql;
  end for
  2、"动态创建数据窗口对象"按钮对应的代码是:
  string syntax,sqlselect,errmsg,ls_col1,ls_col2,ls_name,ls_b;
  //动态创建数据窗口对象datawindow
  ls_b="b"
  sqlselect="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;


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons