知识大全 PB中动态DataWindow的技术应用

Posted

篇首语:学问勤中得,富裕俭中来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PB中动态DataWindow的技术应用相关的知识,希望对你有一定的参考价值。

PB中动态DataWindow的技术应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在PowerBuilder的应用程序开发过程中 对数据库中数据进行操作的对象是数据窗口对象(DataWindow) 利用数据窗口对象 我们可以十分方便地完成对数据库中已经存在的表中数据进行检索 查询 插入 删除和更新 但是 在实际问题中 我们常常遇到数据库中的一些表是用户在程序运行期间动态生成的 若要对这样表中的数据进行操作 就要运用动态数据窗口对象 值得提到的一点是 在动态数据窗口对象生成时 其标题区(Header Band)中的文本不能直接显示成汉字 这的确是一点遗憾 不过这个问题可以通过映射的方法得到解决

  一 问题的提出

  设有如下两张表

  A表中的记录是用户可以在程序运行期间进行自由增加 修改 删除和更新的 B表中的属性(即 字段)由A表中的记录决定并动态创建 而且 能够方便地对B表中的数据提供汉化的操作界面 当然 将B表创建为下表

  也是可以的 但是 在动态生成数据窗口对象时 其标题区(Header Band)中的文本不会显示成汉字 而是一些乱码 反而不利于问题的解决

  二 问题的解决

   动态创建B表的解决

  我们要动态创建B表 就要构建动态SQL语句 何谓动态SQL语句?数据库应用程序通常进行确定的工作 因此在编写和编译时 就可以确定完整的SQL语句 但当需要使用PowerBuilder不支持的嵌入SQL语句(如DDL语句) 或者在编译时不知道语句的具体格式或参数 则在运行时构成SQL语句 这类语句被称为动态SQL语句

  动态SQL语句的格式

  EXECUTE IMMEDIATE SQL statement [Using Transation Object];

  参数说明

  SQL statement 包含一条有SQL语句的字符串

  Transation Object 事务对象

   动态数据窗口对象创建及标题区(Header Band)中文本汉化的解决

  ( )在程序运行时 我们可以调用Create函数动态生成数据窗口对象 格式如下

  DataWindowControl Create(Syntax Errorbuffer)

  参数说明

  DataWindowControl 将在其中创建数据窗口对象的数据窗口控件名

  Syntax 数据窗口对象源代码

  Errorbuffer 用于保存错误信息的字符串

  ( )由于标题区(Header Band)中文本框的名称是对应细目区(Detail Band)中相应列的名称加上 _t 构成的 而细目区(Detail Band)中列的名称又是相应表的属性的名称 因此 我们能够使用游标(Cursor)取出A表中的ywm和zwm的值 然后使用映射的方式替换标题区(Header Band)中文本框的文本(Text)属性 从而使标题区(Header Band)中文本框的文本显示为相应的汉字

  三 一个简单的例子

  在PowerBuilder 和MS SQL Server 的环境下 使用一个简单的例子实现上述的观点 限于篇幅 只列出主要界面及关键程序

   动态创建B表 按钮对应的代码是

  int li_i= 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=

  ls_temp=trim(zdlx[li_i])

  choose case ls_temp

  case

  ls_temp= char( )

  case

  ls_temp= numeric( )

  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[ ]+ +zdlx[ ]+ not null &

  + constraint pk_b primary key ( +ywm[ ]+ ))

  execute immediate:ls_sql;

  //增加B表的列

  for li_i= to li_count

  ls_sql= alter table b add +ywm[li_i]+ +zdlx[li_i]

  execute immediate:ls_sql;

  end for

   动态创建数据窗口对象 按钮对应的代码是

  string syntax sqlselect errmsg ls_col ls_col ls_name ls_b;

  //动态创建数据窗口对象DataWindow

  ls_b= b

  sqlselect= select * from +ls_b;

  syntax=sqlca syntaxfromsql(sqlselect style(type=grid) errmsg)

  dw_ 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_col :ls_col ;

  do while sqlca sqlcode=

  ls_name=ls_col + _ + t + + text + = + +ls_col +

  dw_ modify(ls_name)

  FETCH v_cur INTO :ls_col :ls_col ;

  loop

  close v_cur;

  dw_ settransobject(sqlca)

  dw_ retrieve()

  四 结束语

cha138/Article/program/PB/201311/24646

相关参考

知识大全 在PB中动态修改SQL语句[1]

在PB中动态修改SQL语句[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 PB动态报表的实现

PB动态报表的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  实现原理  PowerBuil

知识大全 利用PB动态创建数据窗口

利用PB动态创建数据窗口  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  利用PowerBuild

知识大全 利用PB实现动态系统用户登录

利用PB实现动态系统用户登录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在多用户的大型数据库

知识大全 PB中实现数据窗口动态排序的三种方法[2]

PB中实现数据窗口动态排序的三种方法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  str

知识大全 PB中实现数据窗口动态排序的三种方法[1]

PB中实现数据窗口动态排序的三种方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Po

知识大全 DataWindow的数据缓冲区

DataWindow的数据缓冲区  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinzh

知识大全 PB用户权限管理[2]

PB用户权限管理[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  动态菜单的实现可以分为以下

知识大全 在PB中应用AutoCAD图形数据库

在PB中应用AutoCAD图形数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PowerB

知识大全 使用PB限制应用程序只运行一次

使用PB限制应用程序只运行一次  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  位操作系统中可以用