AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > PowerBuilder

PB动态报表的实现

51自学网 2015-09-27 http://www.51zixue.net

 

  4. 保存报表格式,这可以通过Cb_savereport按钮的clicked事件实现。
  string ls_filename
  long ll_count
  blob Emp_id_pic
  ls_filename =“temp70201.psr”
  //保存报表格式到硬盘临时文件
  dw_print.saveas(ls_filename,PSReport! ,false)
  sqlca.autocommit = true
  select count(*) into :ll_count from dyn_report where dwobject =:is_dwobject;
  if ll_count =0 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.autocommit = false
  
  5. 动态报表的实现。通过数据窗口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=‘”+“1’”)
  this.modify(ls_dwoname+“.moveable=”+“1”)
  case “LINE”
  //直线对象不能通过设置Resizeable和moveable属性进行调整,必须通过其他途径
  is_dwobject = ls_dwoname
  case “RECTANGLE”,“ELLIPSE”,“GRAPH”,“BITMAP”
  is_dwobject = ls_dwoname
  this.modify(ls_dwoname+“.Resizeable=‘”+“1’”)
  this.modify(ls_dwoname+“.moveable=‘”+“1’”)
  case “COLUMN”,“COMPUTE”
  is_dwobject = ls_dwoname
  this.modify(ls_dwoname+“.Resizeable=‘”+“1’”)
  this.modify(ls_dwoname+“.moveable=‘”+“1’”)
  end choose
  
  最后再通过modify()函数就可以实现基本的动态报表操作,这一类的文章较多,PB中也有大量的例子可直接使用,在此不再赘述。
  
  6. 在cb_exit按钮的clicked()事件中加入:close(parent)。
  
  7. 在应用的open事件中加入: open(w_temp)。然后保存并运行,全部工作到此结束!

  本程序在PB7.0、Oracle 8.05下调试通过。

 
 

上一篇:用PB生成GUID解决主键重复  下一篇:在pb中用语音读金额