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

Posted

篇首语:鸟欲高飞先振翅,人求上进先读书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PB动态报表的实现相关的知识,希望对你有一定的参考价值。

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

  实现原理

  PowerBuilder中有一种以PSR为后缀的特殊的保存报表的文件格式(本文简称PSR文件) 数据窗口可以直接读取PSR文件生成报表 而程序通过生成PSR文件 就可以实现动态报表格式的保存

  首先 通过设置数据窗口对象(dataobject)中的文本 列等的Resizeable和moveable属性为 来实现对象位置的拖动控制 通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)

  其次要保存报表格式 在一个应用中 数据窗口对象的名称总是惟一的 将每一个数据窗口对象转化成PSR文件存于数据库表中 在窗口打开时 程序先校验报表格式是否存在 如果存在 将报表格式读出来放在一个临时文件当中 然后设置数据窗口(datawindow)的数据对象(dataobject)为这个报表文件 并提取数据 如果不存在 直接提取数据即可

  实现过程

   建立一个数据库表用以保存报表格式文件

   建立一个窗口w_temp 定义实例变量如下

  string is_dwtype is_dwobject

  //保存报表中对象的类型及名称

   在窗口的Open事件中加入如下代码 校验报表格式是否存在 如果存在 读取定义好的报表格式到数据窗口

  blob emp_pic

  long ll_handle

  string ls_dwobject ls_reportfile ls_path

  ls_dwobject = dw_print dataobject

  //判断是否存在该数据窗口的报表格式

  select count(*) into:ll_count from dyn_report where dwobject =:ls_dwobject;

  if ll_count> then

  //读取报表格式文件到大文本变量

  selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject;

  //创建PSR临时文件并保存到硬盘

  ls_reportfile = \\temp psr

  ll_handle = FileOpen(is_reportfile StreamMode! write! LockWrite! Replace!)

  FileWrite(ll_handle emp_pic)

  FileClose(ll_handle)

  dw_print dataobject = ls_reportfile

  dw_print settransobject(sqlca)

  else

  Dw_print settransobject(sqlca)

  End if

  Dw_print retrieve()

   保存报表格式 这可以通过Cb_savereport按钮的clicked事件实现

  string ls_filename

  long ll_count

  blob Emp_id_pic

  ls_filename = temp psr

  //保存报表格式到硬盘临时文件

  dw_print saveas(ls_filename PSReport! false)

  sqlca automit = true

  select count(*) into :ll_count from dyn_report where dwobject =:is_dwobject;

  if ll_count = then

  insert into dyn_report(dwobject rptitle)

  values( is_dwobject :ls_filename :ls_path)

  end if

  //从硬盘临时文件读取数据保存到数据库表中

  emp_id_pic = of_readbmpfile(ls_filename)

  //该函数将二进制文件内容读到大文本对象中

  UPDATEBLOB dyn_report SET memo = :Emp_id_pic where dwobject = :is_dwobject;

  //更新数据库

  sqlca automit = false

   动态报表的实现 通过数据窗口dw_print的clicked事件捕获数据窗口中的对象 并将对象名存放在实例变量is_dwobject中 为下一步修改报表做准备

  string ls_type ls_dwoname

  //得到对象类型和名称

  ls_type = trim(upper(dwo type))

  ls_dwoname = trim(dwo name)

  is_dwtype = ls_type

  choose case ls_type

  case TEXT CommandButton GROUPBOX

  is_dwobject = ls_dwoname

  //设置为可以拖动和改变大小

  this modify(ls_dwoname+ Resizeable= + )

  this modify(ls_dwoname+ moveable= + )

  case LINE

  //直线对象不能通过设置Resizeable和moveable属性进行调整 必须通过其他途径

  is_dwobject = ls_dwoname

  case RECTANGLE ELLIPSE GRAPH BITMAP

  is_dwobject = ls_dwoname

  this modify(ls_dwoname+ Resizeable= + )

  this modify(ls_dwoname+ moveable= + )

  case COLUMN PUTE

  is_dwobject = ls_dwoname

  this modify(ls_dwoname+ Resizeable= + )

  this modify(ls_dwoname+ moveable= + )

  end choose

  最后再通过modify()函数就可以实现基本的动态报表操作 这一类的文章较多 PB中也有大量的例子可直接使用 在此不再赘述

   在cb_exit按钮的clicked()事件中加入 close(parent)

   在应用的open事件中加入 open(w_temp) 然后保存并运行 全部工作到此结束!

  本程序在PB Oracle 下调试通过

       编辑推荐

       ASP NET开发培训视频教程

cha138/Article/program/PB/201311/24637

相关参考

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

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

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

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

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

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

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

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

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

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

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

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

知识大全 水晶报表动态加载图片

  首先创建水晶报表rpt文件方法还是采用xsd数据集的方式简便容易操作记得将数据集中的相关字段设为你想要在报表中呈现的字段比如说在内容左边加入一个图片就将相应的图片字段拖放过去能不能直接在水晶报表上

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

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

知识大全 在PB中实现串口编程

在PB中实现串口编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  要在PB中实现串口编程可以使

知识大全 Win32 API 与PB编程[1]

Win32API与PB编程[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如何使PB窗口总