用PB开发报表系统
PB自定义报表
一
一
一
或打 印 的数据 列 ,并 能按 选 中的 次序 重新排 序 的 P 自定 义报 表 。 B
P B,D t n o aa dw,随意 指 定 ,数 据 列 , 自定 义报 表 Wi
P B是进行数 据库软件 开发较 常用 的工 具 ,其 获得多 项专
利技术 的 D t no aa dw控件 能让开发 者很方 便地 向用户显 示或 Wi
中新建表 t p ( _ C 具体定义如图 2 所示 )。
在 O B D C数 据 源 管 理 器 中 新 建 连 接 S l e e q S r r中 P _ p r v B r ot e
数据 库 的系 统 D N,取 名 为 P _ pr。 S B r ot e
维普资讯
四 、新 建 功 能 窗 口
新 建 一 个 Widw n o ,取 名 为 w c 。在 其 Tt _p ie属 性 中 输 入 : l 产 品 管 理 , Wi o ye属 性 选 择 : rsos ! , 添 加 一 个 n wT p d epne D t n o 件 和 三 个 C m ad ut a Widw控 a o m n B t n控 件 ( 观 及 各 控 件 的 o 外 名 称 如 图 4所示 ) ,并 进 行 如 下操 作 。
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
_
实用第一 智慧密集
is l Io e(0t e f qc a, c d hn
mesg bx Sa eo ( 错误- 连接失败 请尝试使用其他的数据 强 id pi ! it s n、 | o g 鼍I — l
pb报表制作powerbuilder报表制作教程pb报表编制教程步骤
pb报表制作power build er报表制作教程pb报表编制教程步骤在通常的管理信息系统开发过程中,总是有没完没了的报表需要制作,调试报表花费的时间也是最多而且乏味,还常常不能满足客户的要求。
如果能够让用户自己调整报表的格式和内容,然后将它保存下来,程序下次启动时若能自动调用保存了的报表格式那就方便多了。
实现原理PowerB uilde r中有一种以PSR为后缀的特殊的保存报表的文件格式(本文简称PS R 文件),数据窗口可以直接读取P SR文件生成报表,而程序通过生成PSR文件,就可以实现动态报表格式的保存。
首先,通过设置数据窗口对象(dataob ject)中的文本、列等的Res izeab le和mo veabl e属性为1来实现对象位置的拖动控制,通过数据窗口的Modi fy函数实现对象值的更改(包括增加和删除)。
其次要保存报表格式。
在一个应用中,数据窗口对象的名称总是惟一的,将每一个数据窗口对象转化成PSR文件存于数据库表中。
在窗口打开时,程序先校验报表格式是否存在。
如果存在,将报表格式读出来放在一个临时文件当中,然后设置数据窗口(datawi ndow)的数据对象(dataob ject)为这个报表文件,并提取数据;如果不存在,直接提取数据即可。
实现过程1. 建立一个数据库表用以保存报表格式文件,各个字段定义如下:2. 建立一个窗口w_tem p。
定义实例变量如下:string is_dwt ype,is_dwo bject//保存报表中对象的类型及名称3. 在窗口的Op en事件中加入如下代码, 校验报表格式是否存在,如果存在,读取定义好的报表格式到数据窗口。
blob emp_pi clong ll_han dlestring ls_dwo bject,ls_rep ortfi le,ls_pat hls_dwo bject = dw_pri nt.dataob ject//判断是否存在该数据窗口的报表格式select count(*) into:ll_cou nt from dyn_re portwheredwobje ct=:ls_dwo bject;if ll_cou nt>0 then//读取报表格式文件到大文本变量select blobmemo into:emp_pi c from dyn_re portwheredwobje ct=:ls_dwo bject;//创建PSR临时文件并保存到硬盘ls_rep ortfi le =‘\temp7089.psr’ll_han dle = FileOp en(is_rep ortfi le,Stream Mode!,write!,LockWr ite!,Replac e!) FileWr ite(ll_han dle,emp_pi c)FileCl ose(ll_han dle)dw_pri nt.dataob ject= ls_rep ortfi ledw_pri nt.settra nsobj ect(sqlca)elseDw_pri nt.settra nsobj ect(sqlca)End ifDw_pri nt.retrie ve()4. 保存报表格式,这可以通过C b_sav erepo rt按钮的click ed事件实现。
PowerBI技巧之综合实战案例——简单的中国式报表
DAX 综合实战案例——简单的中国式报表Hello ,小伙伴们大家好,又见面了,今天介绍一个DAX综合实战案例——简单的中国式报表。
平时处理数据比较多的小伙伴估计经常要和中国式报表打交道,接触Power Pivot和Power BI Desktop的小伙伴估计想把中国式报表自动化,来减少手工繁琐的重复劳动。
你的心情我非常理解,可是中国式报表比较复杂和令人头疼的问题是它会把不同维度,不同粒度,不同类别的字段数据拼在一起呈现。
EXCEL凭借其自身的灵活性很好的解决了这个问题,但是,无法做到自动化。
如果你处理的日报、周报、月报是中国式报表,估计要每天重复劳动。
而Power Pivot可以把报表模板固定,每次只要刷新数据源即可,实现了半自动化。
但是,透视表无法将不同粒度的数据放在一起(其实可以~~),很难实现中国式报表的样式,除非把各粒度下的每个度量都写一遍,这也很繁琐,不是很好的解决方案。
借助IT开发也麻烦,沟通上的持久战,能自主解决最好。
一个比较好的解决方案是用DAX这一杀手级武器帮你搞定中国式报表。
告别重复劳动,解放生产力!这回讲一个比较常见的中国式报表样例:表头有各月的,全年的,去年的,及今年与去年,去年累计的比较,各维度下又分为预算、达成、达成率,如果一个个度量写下去会是一条不归路...这回通过Power BI Desktop的矩阵来呈现中国式报表,Power Pivot是类似的,都是靠DAX度量实现的。
由于实现过程讲解起来太长,这次先说结果,然后慢慢讲实现过程。
废话不多说,请看以下截图,由于图表太长了,分两段截取:从图中可以看出,不同粒度、类别的数据也能放到一起,矩阵当中可以实现中国式报表。
这一效果主要是靠DAX度量实现的,涉及的知识点如下:1.构建表头。
2.SWITCH,EDATE,FORMAT函数应用。
3.TREATAS构建虚拟关系。
4.时间智能函数。
5.按列排序。
6.Desktop格式设置。
PB中使用FORMULA ONE入门介绍
PB中使用FORMULA ONE入门介绍2002-09-03 10:12作者:出处:责任编辑:在使用POWERBUILDER编程中,往往会遇到处理复杂表格的情况,这些表格数量很大,表格结构复杂,如用一般的FREEFORM风格的数据窗口来实现,则报表编程工作会占相当大的时间及精力,一旦报表格式略有改变,则程序的维护工作会很繁琐。
其实VISUAL COMPONENTS的FORMULA ONE就是一个与POWERBUILDER结合非常紧密的报表工具,我们可以从POWERBUILDER进入FORMULA ONE,还可以在POWERBUILDER下直接使用FORMULA ONE提供的各种函数,因为FORMULA ONE的文件小,与数据库的存取操作速度较快,所以建议使用它来制作报表。
下面详细介绍它的使用方法:一、安装及使用FORMULA ONEformula one在本站有下载,注意6.0版本安装过程中要输入序列号,否则使用时会告警。
安装完毕后,运行vcf1.exe可看到如上的程序环境,其文件后缀名为vts,它兼容中文,具备类似EXCEL的功能:如格式编排、制作表格线、移动和复制单元格、单元格的计算、画简单框图等等。
另外,FORMULA ONE中还具有上百种函数,可以在VISUAL C++、VISUAL BASIC、和POWERBUILDER中引用。
对此不再详细说明。
二、在POWERBUILDER窗口中加入一个OLE控件POWERBUILDER支持WINDOWS具备的对象连接与嵌入功能(即OLE功能),我们可以直接在窗口上放置OLE 2.0的控件,然后将WINDOWS支持的OLE对象连接到OLE 2.0控件中,这样就能在POWERBUILDER应用中利用OLE服务器的命令和函数完成对OLE对象的操作工作。
在POWERBUILDER的窗口中点中OLE图标:会出现“插入对象”对话框,选择insert control 标签项(如下图),在对象列表中选择Vci Formula One Workbook,按确定键后,选好插入位置点击鼠标,即加入了一个名为ole_1的OLE对象,在其上用鼠标右键选中OCX Properties项,在Show标签下可将Row Heading和Column Heading项取消选中,将Tabs的值由Bottom改为Off(如下图),加入的OLE对象就是一个没有行头、列头及标签的空白表格。
PB数据窗口绝对技巧
PB数据窗口绝对技巧PB数据窗口绝对技巧是指通过使用PowerBuilder开发环境的数据窗口对象实现高效数据处理的技巧。
数据窗口是PowerBuilder中最重要和最常用的对象之一,它可以用于显示和操作数据库中的数据。
下面将介绍一些PB数据窗口的绝对技巧。
1.使用绑定数据窗口:绑定数据窗口是将数据窗口与数据库表绑定在一起,这样可以方便地进行数据的读取、修改和保存操作。
使用绑定数据窗口可以避免手动编写SQL语句或存储过程,大大提高了开发效率。
2.优化数据窗口的性能:数据窗口的性能优化是开发过程中非常重要的一环。
可以通过以下方法来提高数据窗口的性能:-只选择需要的列:只选择需要的列可以减少网络传输的数据量,提高数据检索的速度。
-使用约束和过滤器:可以在数据窗口中使用约束和过滤器来限制返回结果集的大小,进一步提高性能。
-使用预检索:可以在打开数据窗口之前使用预检索功能,先将数据加载到缓存中,减少后续操作对数据库的访问次数。
3.自定义数据窗口的样式:可以通过数据窗口的属性和事件来自定义数据窗口的样式。
例如,可以设置列的显示格式、颜色和字体等属性,还可以通过事件来实现数据窗口的验证和计算逻辑。
4.使用数据窗口的分组功能:数据窗口的分组功能可以将数据按照指定的列进行分组,并对每个分组进行汇总计算。
这样可以方便地进行数据的统计和报表生成。
5.使用数据窗口的嵌套功能:数据窗口可以嵌套在其他数据窗口中,形成复杂的数据结构。
通过使用数据窗口的嵌套功能,可以实现多层次的数据展示和操作,提高用户体验和数据处理的灵活性。
6.使用数据窗口的插入和更新语句:数据窗口可以使用自动生成的插入和更新SQL语句来实现数据的插入和修改操作。
这样可以避免手动编写大量的SQL语句,简化开发过程。
7.使用数据窗口的事务处理:数据窗口的事务处理功能可以保证一系列的操作要么全部成功,要么全部失败。
可以通过使用数据窗口的事务处理功能来实现数据的批量插入和更新,提高数据处理的效率和数据的一致性。
如何使用PB实现动态报表?
如何使⽤PB实现动态报表?在通常的管理信息系统开发过程中,总是有没完没了的报表需要制作,报表花费的时间也是最多⽽且乏味,还常常不能满⾜客户的要求。
如果能够让⽤户⾃⼰调整报表的格式和内容,然后将它保存下来,程序下次若能⾃动调⽤保存了的报表格式那就⽅便多了。
⼀、实现原理 PowerBuilder中有⼀种以PSR为后缀的特殊的保存报表的⽂件格式(本⽂简称PSR⽂件),可以直接读取PSR⽂件⽣成报表,⽽程序通过⽣成PSR⽂件,就可以实现动态报表格式的保存。
⾸先,通过设置数据窗⼝对象(dataobject)中的⽂本、列等的Resizeable和moveable属性为1来实现对象位置的拖动控制,通过数据窗⼝的Modify函数实现对象值的更改(包括增加和删除)。
其次要保存报表格式。
在⼀个应⽤中,数据窗⼝对象的名称总是惟⼀的,将每⼀个数据窗⼝对象转化成PSR⽂件存于数据库表中。
在窗⼝打开时,程序先校验报表格式是否存在。
如果存在,将报表格式读出来放在⼀个当中,然后设置数据窗⼝(datawindow)的数据对象(dataobject)为这个报表⽂件,并提取数据; 如果不存在,直接提取数据即可。
⼆、实现过程 1. 建⽴⼀个数据库表⽤以保存报表格式⽂件,各个字段定义如下: 2. 建⽴⼀个窗⼝w_temp。
定义实例变量如下: string is_dwtype,is_dwobject //保存报表中对象的类型及名称 3. 在窗⼝的Open事件中加⼊如下代码, 校验报表格式是否存在,如果存在,读取定义好的报表格式到数据窗⼝。
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>0 then //读取报表格式⽂件到⼤⽂本变量 selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject; //创建PSR临时⽂件并保存到硬盘 ls_reportfile =‘\temp7089.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() 4. 保存报表格式,这可以通过Cb_savereport按钮的clicked事件实现。
PB操作Excel详解
run("notpad.exe") ////pb 运行记事本run("calc.exe") ////pb 运行计算器记住:当我们用PB导出数据到EXCEL时,不管是用Saveas 还是clipboard 它输出的数据是定义了字段类型的列的数据,也就是说,不管列是可见还是不可见,只要该列定义了列属性,在查询时主缓冲区中该列有数据,则就会导出出来~用方法得到列名或其他属性也是一样的~及时隐藏了也可以得到当中间的某列给隐藏时,下次打开后它会显示在末尾的位置,但是用Saveas 输出数据时,不管它是否隐藏,是否改变了位置,它仍可输出数据而且位置还是不变的~也就是说没有改变数据窗口对象的源,数据窗口对象上显示的列位置只会影响我们在程序界面上看到的位置,而不会影响它在后台存储的实际位置。
但是这样会改变界面显示的位置,记住,没有改变源如何用PB程序在excel 画表格边框线,如何改变文字大小1. 创建Excel 对象eole=CREATEOBJECT′(Excel.application ′)2. 添加新工作簿eole.Workbooks.add3. 设置第 3 个工作表为激活工作表eole.Worksheets( ″sheet3 ″).Activate4.打开指定工作簿eole.Workbooks.Open( ″c:\temp\ll.xls ″)5.显示Excel 窗口eole.visible=.t.6. 更改Excel 标题栏eole.Caption= ″VFP应用程序调用Microsoft Excel ″7. 给单元格赋值eole.cells(1,4).value=XM(XM 为数据库字段名)8.设置指定列的宽度( 单位:字符个数)eole.ActiveSheet.Columns(1).ColumnWidth=59.设置指定行的高度( 单位:磅)eole.ActiveSheet.Rows(1).RowHeight=1/0.035( 设定行高为 1 厘米,1 磅=0.035 厘米)10.在第18 行之前插入分页符eole.Worksheets( ″Sheet1 ″).Rows(18).PageBreak=111.在第 4 列之前删除分页符eole.ActiveSheet.Columns(4).PageBreak=012.指定边框线宽度(Borders 参数如下)ole.ActiveSheet.Range( ″b3:d3 ″).Borders(2).Weight=313.设置四个边框线条的类型eole.ActiveSheet.Range( ″b3:d3 ″).Borders(2).LineStyle=1( 其中Borders 参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/ ;LineStyle 值:1 与7-细实、2-细虚、4-点虚、9-双细实线)14. 设置页眉eole.ActiveSheet.PageSetup.CenterHeader= ″报表1″15. 设置页脚eole.ActiveSheet.PageSetup.CenterFooter= ″第&P 页″16.设置页眉到顶端边距为 2 厘米eole.ActiveSheet.PageSetup.HeaderMargin=2/0.03517.设置页脚到底边距为 3 厘米eole.ActiveSheet.PageSetup.FooterMargin=3/0.03518.设置顶边距为 2 厘米eole.ActiveSheet.PageSetup.TopMargin=2/0.03519.设置底边距为 4 厘米eole.ActiveSheet.PageSetup.BottomMargin=4/0.03520.设置左边距为 2 厘米veole.ActiveSheet.PageSetup.LeftMargin=2/0.03521.设置右边距为 2 厘米eole.ActiveSheet.PageSetup.RightMargin=2/0.03522.设置页面水平居中eole.ActiveSheet.PageSetup.CenterHorizontally=.t.23.设置页面垂直居中eole.ActiveSheet.PageSetup.CenterVertically=.t.24.设置页面纸张大小(1 -窄行8 5 11 39 -宽行14 11) eole.ActiveSheet.PageSetup.PaperSize=125.打印单元格网线eole.ActiveSheet.PageSetup.PrintGridlines=.t.26.拷贝整个工作表edRange.Copy27. 拷贝指定区域eole.ActiveSheet.Range( ″A1:E2″).Copy28.粘贴eole.WorkSheet( ″Sheet2 ″).Range( ″A1″).PasteSpecial29.在第2 行之前插入一行eole.ActiveSheet.Rows(2).Insert30.在第2 列之前插入一列eole.ActiveSheet.Columns(2).Insert31.设置字体eole.ActiveSheet.Cells(2,1)= ″黑体″32.设置字体大小eole.ActiveSheet.Cells(1,1).Font.Size=2533.设置字体为斜体eole.ActiveSheet.Cells(1,1).Font.Italic=.t.34.设置整列字体为粗体eole.ActiveSheet.Columns(1).Font.Bold=.t.35.清除单元格公式eole.ActiveSheet.Cells(1,4).ClearContents36.打印预览工作表eole.ActiveSheet.PrintPreview37.打印输出工作表eole.ActiveSheet.PrintOut38.工作表另为eole.ActiveWorkbook.SaveAs( ″c:\temp\22.xls ″)39.放弃存盘eole.ActiveWorkbook.saved=.t.40.关闭工作簿eole.Workbooks.close41.退出Exceleole.quit先把标题放到剪贴板上,再PASTE()到EXCEL中,代码如下:::clipboard(ls_value)ao_object.range(ls_col+string(1)+":"+ls_col+string(1)).select()ao_object.activesheet.Paste()/*************************************************************下面的函数f_excel_hb ,可以实现“将工作簿filename_s 中的工作表sheetname_s 以新的工作表名称sheetname_t ,复制到工作簿filename_t 的最后”1. public function boolean f_excel_hb (string filename_s, string filename_t, string sheetname_s, string sheetname_t);2. //==========================================================3. // 合并两个工作簿中的某个工作表4. //==========================================================5. // 作者:yyoinge 2011-10-12 18:006. //==========================================================7. // 将工作簿filename_s 中的工作表sheetname_s 以新的8. // 工作表名称sheetname_t ,复制到工作簿filename_t 的最后9. //==========================================================10. if not fileexists(filename_s) then11. messagebox( '' , ' 工作簿【' + filename_s + ' 】(源)不存在' )12. return false13. end if14. if not fileexists(filename_t) then15. messagebox( '' , ' 工作簿【' + filename_t + ' 】(目标)不存在' )16. return false17. end if18. long ll_val19. // 声明ole 对象20. oleobject ole_object_s21. // 创建ole 对象22. ole_object_s=create oleobject23. // 连接到excel24. ll_val = ole_object_s.connecttonewobject( "excel.application" )25. if ll_val <> 0 then26. messagebox( '' , 'ole 无法连接Excel!' )27. goto error28. end if29. // 打开源和目标工作簿30. ole_object_s.workbooks.open(filename_s)31. ole_object_s.workbooks.open(filename_t)32. string ls_t33. ls_t = filename_t34. filename_s = of_splitpath(filename_s, 2)35. filename_t = of_splitpath(filename_t, 2)36. // 隐藏excel37. ole_object_s.visible = false38. ole_object_s.displayalerts = false39. int n,t40. int li41. boolean isexists= false42. oleobject lworksheet43. // 判断源工作簿中的工作表是否存在44. try45. lworksheet = ole_object_s.Workbooks(filename_s).sheets(sheetname_s)46. isexists = true47. catch ( oleruntimeerror er)48. isexists = false49. end try50. if isexists= false then51. messagebox( '' , ' 工作簿【' + filename_s + ' 】中工作表不存在工作表[' + sheetname_s + ']' )52. goto error53. end if54. // 当目标工作簿中存在sheet 名为sheetname_t 的工作表时,为sheetname_t 增加后缀(1) ,然后再重复进行判断,直到表名不存在55. isexists = true56. do while isexists57. try58. lworksheet = ole_object_s.Workbooks(filename_t).sheets(sheetname_t)59. isexists = true60. sheetname_t += '(1)'61. catch ( oleruntimeerror er1)62. isexists = false63. end try64. loop65. // 进行工作表合并(移到目标工作簿的最后)66. //int li67. setnull(li)68. ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets( long (ole_object_s.workbooks(filename_t).Sheets.count)))69. // 重命名工作表70. ole_object_s.workbooks(filename_t).sheets( long (ole_object_s.workbooks(filename_t).Sheets.count)).name = sheetname_t71. // 保存目标工作簿72. isexists = true73. //ole_object_s.visible = true74. //ole_object_s.displayalerts = true75. //messagebox('', '')76. try77. ole_object_s.workbooks(filename_t).save()78. catch ( oleruntimeerror er2)79. messagebox( ' 提示' , ' 无法保存工作簿【' + filename_t + ' 】' )80. isexists = false81. end try82. if not isexists then goto error83. // 关闭工作簿84. ole_object_s.workbooks(filename_s).close85. ole_object_s.workbooks(filename_t).close86. // 退出excel87. ole_object_s.workbooks.close88. ole_object_s.Application.quit();89. // 断开连接90. ole_object_s.disconnectobject();91. // 注销ole 对象92. destroy ole_object_s;93. return true94. error:95. ole_object_s.workbooks(filename_s).close96. ole_object_s.workbooks(filename_t).close97. ole_object_s.workbooks.close98. ole_object_s.Application.quit();99. ole_object_s.disconnectobject();100. destroy ole_object_s;101. return false102.103.104. end function/**********************************************************//* 函数名称:uf_dwsaveas_excel功能:将数据窗口数据导出EXCEL文件,并将EXCEL文件默认英文标题替换成中文。
PowerBuilder数据窗口编程技巧十则
PowerBuilder取得巨大成就的原因就是有Datawindow对象,DataWindow是具有功能强大和灵活多变的特点,本人用PowerBuilder开发过一段时间后,总结出一些技巧,以供广大的PB开发者借鉴使用。
一.如何创建一个报表,如下形式Quantity Running Total5,000 5,0002,500 7,5003,000 10,50012,000 22,500对于Running Total列,我们可使用计算列:CumulativeSum(Quantity for all),即可达到逐渐递增求和的功能。
二.数据窗口的数据送缓冲区之前确认的四个步骤判断数据类型是否正确。
如不正确则触发ItemError事件。
判断数据是否符合有效性规则。
如不符合有效性规则,同样触发It emError事件。
判断是否有数据被改动。
判断数据是否通过ItemChanged事件,如果数据和ItemChanged相斥,将触发ItemError事件。
三.如何在DataWindow中用数据类型为Datetime的列为条件进行查找1.当要查找的日期条件是一常数时使用如下表达式:2.当要查找的日期条件是一个变量时使用如下的表达式:3.当要查找的日期条件是一个DateTime数据类型时使用如下表达式:四.设置数据窗口Boolean型属性的三种方法PowerBuilder提供了三种方法设置数据窗口的布尔型属性,分别是True/False, 1/0, ' Yes'/'No'。
例如:PowerBuilder在处理上以字符串的形式保存属性,而不考虑属性值是布尔型、长整型或是字符型。
为了进一步理解,可以导出一个数据窗口并查看它的原码,可以发现即使是列的颜色属性它也是使用带双引号的数字来表达。
五.如何在DataWindow中快速删除多行在开发过程中可能经常有要进行多行删除的操作,一般都使用循环语句进行操作:一个快速的删除方法是把要删除的行从主缓冲区中移到删除缓冲区中。
PB平台下动态数据报表的实现
/
、\
整 个 运 行 过 程 , 口被 打 开 时 , 可 选 戳 窗 “
控件 1 \ I l ‘ 呈
一- 据 口 ~l 窗 — 一 — 数 I件 控4
行
表 ” 口显 示 所 有 表 名 及 其 中文 名 字 , 窗 当单 。据窗1 数 2 1 I 击 表 名 , “ 选 字段 ” 口显 示 该 表 的字 段 在 可 窗 控 l 件1 及对 应 的中文 名 字 . “ 选 字 段 ” 口可 实 在 可 窗
现 多选 , 定 的字 段 显 示 在“ 询 条件 ” 口 选 查 窗 中, 置条 件 后 , 击 “ 设 单 查询 ” 钮 , 示满 足 按 显 条件 的所 有记 录. 口运 行 如 图 2 窗 .
/
/
’~ 件1 , 需
be l
性去掉
、 I j 数据窗1 2 1
控件 3
s tr n o jc ( w eta s be td
d w
—
t be s la a l , qc )
—
c l mn s tr n o jc (q c ) ou . eta s b e t s la
t b e r tiv ( ) a l . e re e
d w
—
收 稿 日期 :0 60 — 1 2 0—30
Vo . No 2 15 . J n 2 0 u . 06
P B平台下 动态 数据 报表 的实现
宋建松
( 治学院 计算机系 , 西 长治 061 ) 长 山 4 0 1
[ 要 ] 利 用 P we Bule 摘 o r i r本 身 的 两 个 系 统 表 “ b a t l 和 “ b a c l及 数 据 窗 口 对 象 的 动 d p c tb ” p c to ”
PB中使用FORMULA ONE入门介绍
PB中使用FORMULA ONE入门介绍2002-09-03 10:12作者:出处:责任编辑:在使用POWERBUILDER编程中,往往会遇到处理复杂表格的情况,这些表格数量很大,表格结构复杂,如用一般的FREEFORM风格的数据窗口来实现,则报表编程工作会占相当大的时间及精力,一旦报表格式略有改变,则程序的维护工作会很繁琐。
其实VISUAL COMPONENTS的FORMULA ONE就是一个与POWERBUILDER结合非常紧密的报表工具,我们可以从POWERBUILDER进入FORMULA ONE,还可以在POWERBUILDER下直接使用FORMULA ONE提供的各种函数,因为FORMULA ONE的文件小,与数据库的存取操作速度较快,所以建议使用它来制作报表。
下面详细介绍它的使用方法:一、安装及使用FORMULA ONEformula one在本站有下载,注意6.0版本安装过程中要输入序列号,否则使用时会告警。
安装完毕后,运行vcf1.exe可看到如上的程序环境,其文件后缀名为vts,它兼容中文,具备类似EXCEL的功能:如格式编排、制作表格线、移动和复制单元格、单元格的计算、画简单框图等等。
另外,FORMULA ONE中还具有上百种函数,可以在VISUAL C++、VISUAL BASIC、和POWERBUILDER中引用。
对此不再详细说明。
二、在POWERBUILDER窗口中加入一个OLE控件POWERBUILDER支持WINDOWS具备的对象连接与嵌入功能(即OLE功能),我们可以直接在窗口上放置OLE 2.0的控件,然后将WINDOWS支持的OLE对象连接到OLE 2.0控件中,这样就能在POWERBUILDER应用中利用OLE服务器的命令和函数完成对OLE对象的操作工作。
在POWERBUILDER的窗口中点中OLE图标:会出现“插入对象”对话框,选择insert control 标签项(如下图),在对象列表中选择Vci Formula One Workbook,按确定键后,选好插入位置点击鼠标,即加入了一个名为ole_1的OLE对象,在其上用鼠标右键选中OCX Properties项,在Show标签下可将Row Heading和Column Heading项取消选中,将Tabs的值由Bottom改为Off(如下图),加入的OLE对象就是一个没有行头、列头及标签的空白表格。
PB与Excel结合在图书馆统计报表系统中的应用
20 07年 7 月 第 7期
J l.0 7 uy 2 0 No .7
P B与 E cl xe 结合 在 图 书馆 统 计报 表 系 统 中 的应用
杨 应全
( 重庆 科技 学院 ,重庆 404 ) 002
[ 摘 要] 本文介绍 了 Pwru d 的 O E 术的特 点,通 过 O ̄ 对象 实现 P e u d 与 E c 间数据 共享 , oe i e B lr L 技 I o r ie w B lr xl e
在 图书馆 统计报表 系统 中应用并取得 了较好的效果。
[ 关键词] Pw rudr 数据 窗 口;E c ;O E 象 o e ie; Bl xe l L对
[ rc] rl ae ir ue h hr tii o L b c t ho g fP A at Ii pprn o csteca c rt fO E oj te n l yo B.Ui n L b t 1s td a esc e c o t gO E Oj H c e
元格 中。
其次是将数据窗 口检索到的数据 ,填充到 E cl x e 表格单 图
更为方便 ,因为只要把 数据 窗 口控件作 为参数 传递给 函数
即可 。以下函数代 码解 释 了如 何把 P B报表 中的数据 转到
x e 中去 。 E cl
∥函数名 :t xe fc el _ e ∥参 数传递 :d _a wno , awdt idw 指定 的数据 窗 口 a
报表 ,但其制作复杂统计报 表 的功 能还是不强 ,难 以满 足
中国式报表的要求 ,在打 印输 出时为 了打印 出格 式特殊 的 统计报表就需要专门编写 相应 的程 序来实现 ,而且 需要反 复调整才能输 出较好的打 印效果 。还有 不足是显示 风格为 网格 ( r )的数据 窗 口,打 印时在 数据 行 上会 出现 双横 Gi d 线 ,操作 H ae 带上 文本框 也会受 到很大的 限制 ;表 现风 edr 格不是 网格 的数据 窗 口,不能方便 的动态改 变字段显示 栏 的宽度 ,如果报表 的数据项很多 ,且 数据值 的位数较多 时,
运用PB与Excel自动实现医院统计报表
板 编 写 可 自动 生成 报 表 的程 序 。结 果 : 选取 一段 统 计 时 间 范 围 , 序 自动 计 算 出科 室 统 计指 标 值 , 准确 、 程 并 快速 生成 复 杂 的报 表 。结 论 : 够提 高统 计 人 员的 工作 效 率和 报 表 的 准 确 性 、 轻 工 作 强 度 、 低 办公 成 本 。 能 减 降 [ 键 词】 P E cl统 计 ; D 关 B; xe; D E [ 中国 图 书 资料 分 类 号] T 39 【 献标 识 码 】 A [ 章 编 号] 10 — 8 82 1 )6 0 4 — 2 P1 文 文 0 3 8 6 (0 0 0 — 0 3 0
Usng o i fPB nd Ex e t m a i n t a i e H o pia a si a po t a c lAu o to o Re lz s t lSt ttc lRe r s
D N i T N u - u H i -i L N u —e E G Qa , A GY e h a U J n l, O G H afi n , a z
1 slsT i po rm o l ac lt h ia e ut i emso iee t tt t a n e e n as ei e r iayp r d t ut hs rga c ud c luaetef l sl n tr fdf rn ai i lid x si p cf dabt r ei , . e n r s i s sc i r o a d b i o lx rp r rpdy a d a c rtl.C  ̄ u in T i rga d v lp d b B c n i rv h tt t a n ul c mpe e ot a il n c u aey o d go hs po rm e eo e y P a mpo e te s i i l a sc
在pb中使用fastreport
在pb中使用fastreport在PowerBuilder中使用FastReport是一种常见的做法,因为FastReport是一个功能强大的报表工具,可以与PowerBuilder集成,以便创建丰富多样的报表。
下面我将从安装、集成和使用等方面来回答你的问题。
首先,要在PowerBuilder中使用FastReport,你需要确保已经安装了FastReport。
安装FastReport后,你需要在PowerBuilder中进行集成。
在PowerBuilder中,你可以通过OLE 对象或ActiveX控件的方式来集成FastReport。
你需要创建一个OLE对象或ActiveX控件来引用FastReport并使用其功能。
一旦集成了FastReport,你就可以在PowerBuilder中使用FastReport来创建报表。
你可以通过PowerBuilder的脚本来调用FastReport的功能,比如创建报表模板、绑定数据、设计报表样式等。
FastReport提供了丰富的API和功能,可以满足各种报表设计和生成的需求。
另外,你还可以通过FastReport提供的设计器工具来设计报表模板,然后在PowerBuilder中调用这些模板来生成报表。
FastReport的设计器工具提供了直观易用的界面,可以帮助你快速设计出漂亮且功能丰富的报表模板。
总的来说,在PowerBuilder中使用FastReport可以帮助你轻松地创建各种复杂的报表,并且通过PowerBuilder的脚本来控制报表的生成和展示。
这样可以大大提高报表开发的效率和灵活性,让你能够更好地满足用户的需求。
希望这些信息能够帮助你更好地理解在PowerBuilder中使用FastReport的方法和优势。
如果你还有其他问题,欢迎继续提问。
PB全面控制Excel
PB全⾯控制ExcelPB下全⾯控制Excel红⾊部分未验证Excel对象控制创建Excel对象 OLEObjectExcelServerExcelServer=CreateOLEObject 连接ExcelExcelServer.ConnectToObject("","Excel.Application")//如果Excel还没有打开,则新建。
ExcelServer.ConnectToNewObject("Excel.Application")返回值Integer,0正常,负值为错误码断开连接Excel ExcelServer.DisconnectObject() 打开指定⼯作簿 ExcelServer.WorkBooks.Open("c:\temp\ll.xls") 添加新⼯作簿ExcelServer.WorkBooks.Add 关闭⼯作簿 ExcelServer.WorkBooks.Close 添加新的⼯作表ExcelServer.Sheets.Add 激活⼯作表“sheet3”ExcelServer.ActiveWorkBook.Sheets("sheet3").Select ⼯作表改名="课程表" 显⽰Excel窗⼝ExcelServer.Application.Visible=True 更改Excel标题栏 ExcelServer.Caption="PB应⽤程序调⽤MicrosoftExcel" ⼯作表另为 ExcelServer.ActiveWorkBook.SaveAs("c:\temp\22.xls") 放弃存盘ExcelServer.ActiveWorkBook.Saved=True 退出Excel ExcelServer.quit 单元格控制给单元格赋值 ExcelServer.Cells(1,4).Value=XM(XM为数据库字段名) 在第2⾏之前插⼊⼀⾏ExcelServer.ActiveSheet.Rows(2).Insert 在第2列之前插⼊⼀列ExcelServer.ActiveSheet.Columns(2).Insert 设置指定列的宽度(单位:英⽂字符个数) ExcelServer.ActiveSheet.Columns(1).ColumnWidth=5 设置指定⾏的⾼度(单位:磅)(设定⾏⾼为1厘⽶,1磅=0.035厘⽶) ExcelServer.ActiveSheet.Rows(1).RowHeight=1/0.035 指定边框线宽度(Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;)ExcelServer.ActiveSheet.Range("b3:d3").Borders(2).Weight=3 a到i列⾃动调整列宽ExcelServer.ActiveSheet.Columns(“a:i”).AutoFit 设置四个边框线条的类型(LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)ExcelServer.ActiveSheet.Range("b3:d3").Borders(2).LineStyle=1 合并单元格ExcelServer.ActiveSheet.Range("A1:F1”).MergeCells=True 拷贝整个⼯作表edRange.Copy 拷贝指定区域ExcelServer.ActiveSheet.Range("A1:E2").Copy 粘贴ExcelServer.WorkSheet("Sheet2").Range("A1").PasteSpecial 设置字体ExcelServer.ActiveSheet.Cells(2,1)="⿊体" 设置字体⼤⼩ExcelServer.ActiveSheet.Cells(1,1).Font.Size=25 设置字体为斜体ExcelServer.ActiveSheet.Cells(1,1).Font.Italic=True 设置整列字体为粗体ExcelServer.ActiveSheet.Columns(1).Font.Bold=True 设置整列⽔平居中ExcelServer.ActiveSheet.Columns(1).HorizontalAlignment=3 设置整⾏字体颜⾊ExcelServer.ActiveSheet.Rows(1).Font.ColorIndex=4 设置整⾏底⾊ExcelServer.ActiveSheet.Rows(2).Interior.ColorIndex=5 设置整⾏单元格中的⽂本⾃动换⾏ExcelServer.ActiveSheet.Row(1).WrapText=True 清除单元格公式ExcelServer.ActiveSheet.Cells(1,4).ClearContents 打印相关设置页眉ExcelServer.ActiveSheet.PageSetup.CenterHeader="报表1" 设置页脚ExcelServer.ActiveSheet.PageSetup.CenterFooter="第&P页" 设置页眉到顶端边距为2厘⽶ExcelServer.ActiveSheet.PageSetup.HeaderMargin=2/0.035 设置页脚到底边距为3厘⽶ExcelServer.ActiveSheet.PageSetup.FooterMargin=3/0.035 设置顶边距为2厘⽶ExcelServer.ActiveSheet.PageSetup.TopMargin=2/0.035 设置底边距为4厘⽶ExcelServer.ActiveSheet.PageSetup.BottomMargin=4/0.035 设置左边距为2厘⽶ExcelServer.ActiveSheet.PageSetup.LeftMargin=2/0.035 设置右边距为2厘⽶ExcelServer.ActiveSheet.PageSetup.RightMargin=2/0.035 设置页⾯⽔平居中ExcelServer.ActiveSheet.PageSetup.CenterHorizontally=True 设置页⾯垂直居中ExcelServer.ActiveSheet.PageSetup.CenterVertically=True 设置页⾯纸张⼤⼩(1-窄⾏851139-宽⾏1411) ExcelServer.ActiveSheet.PageSetup.PaperSize=1 在第18⾏之前插⼊分页符ExcelServer.Worksheets("Sheet1").Rows(18).PageBreak=1 在第4列之前删除分页符ExcelServer.ActiveSheet.Columns(4).PageBreak=0 打印单元格⽹线ExcelServer.ActiveSheet.PageSetup.PrintGridlines=True 打印预览⼯作表ExcelServer.ActiveSheet.PrintPreview 打印输出⼯作表 ExcelServer.ActiveSheet.PrintOut。
pb进销存源码
pb进销存源码
(原创版)
目录
1.PB 进销存源码的概念与意义
2.PB 进销存源码的功能与特点
3.PB 进销存源码的应用领域与优势
4.如何获取和使用 PB 进销存源码
正文
【提纲】
1.PB 进销存源码的概念与意义
PB 进销存源码是指用于实现进销存管理系统的编程代码,它可以帮助企业有效管理采购、销售和库存等环节,提高企业的运作效率。
进销存源码对于企业的信息化建设和管理水平的提升具有重要意义。
2.PB 进销存源码的功能与特点
PB 进销存源码具有以下功能:采购管理、销售管理、库存管理、报表统计等。
特点包括:操作简便、功能齐全、安全可靠、可扩展性强等。
这些特点使得 PB 进销存源码成为企业进行进销存管理的得力助手。
3.PB 进销存源码的应用领域与优势
PB 进销存源码广泛应用于各类企业,如贸易公司、生产制造企业等。
其优势在于:降低库存成本、提高资金周转率、提升企业管理水平、助力企业转型升级等。
通过使用 PB 进销存源码,企业可以实现信息化管理,提高市场竞争力。
4.如何获取和使用 PB 进销存源码
企业可以通过购买相关软件、招聘程序员开发或者寻求外部技术支持
等途径获取 PB 进销存源码。
在使用过程中,企业需要进行源码的安装、配置、培训和维护等工作,以确保源码能够正常运行并满足企业的实际需求。
总之,PB 进销存源码对于企业的进销存管理具有重要意义,它具有操作简便、功能齐全、安全可靠等优点,广泛应用于各类企业。
PB9.0动态报表开发
PB9.0动态报表开发
周作建;陈新泉
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2005(000)011
【摘要】本文着重介绍在PowerBuilder中动态开发报表的一种实现思想及相关函数的说明(通过增减表记录而动态的创建报表),并通过实例给出详细设计步骤.【总页数】3页(P49-51)
【作者】周作建;陈新泉
【作者单位】无
【正文语种】中文
【中图分类】TP3
【相关文献】
1.用PB9.0开发图书管理系统 [J], 张立富;杨微
2.在PB9.0和Oracle 9i中实现多媒体数据操作的方法 [J], 文锋;姚力文;段隆振;林振荣
3.基于PB9.0的旱情资料管理系统设计与实现 [J], 王凤瑞
4.基于PB9.0的旱情资料管理系统设计与实现 [J], 王凤瑞
5.精处理混床运行在线报表开发及应用 [J], 杨艳伟;黄罡星;田文华;何敏强;张建华;汪檩
因版权原因,仅展示原文概要,查看原文内容请购买。
利用PB7.0的数据窗口制作数据库应用程序的报表
利用PB7.0的数据窗口制作数据库应用程序的报表
姚元顺
【期刊名称】《智能计算机与应用》
【年(卷),期】2003(000)004
【摘要】讨论了利用PB7.0的数据窗口制作数据库应用程序报表的方法,并以SQL SERVER数据库开发实例加以说明.
【总页数】2页(P40-41)
【作者】姚元顺
【作者单位】哈尔滨市公路客运总站
【正文语种】中文
【中图分类】TP3
【相关文献】
1.使用Delphi+VBA开发数据库应用程序的报表系统 [J], 杜俭强
2.利用数据窗口实现报表的生成 [J], 张蓉
3.用Delphi开发数据库应用程序系列讲座之三开发自己的数据报表应用程序 [J], 张仁平;李强
4.利用数据窗口开发交叉式统计报表的一种方法 [J], 马桂芳;郭剑毅;余正涛;赵大勇;车文刚
5.用PB7.0和OLE开发AutoCAD图形信息数据库应用程序 [J], 张静秋;申群太因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
lw_sheet = parentwindow.GetActiveSheet ()
if IsValid (lw_sheet) then
lw_sheet.triggerevent('ue_createobject',0,obj_string)
end if
该函数取得当前打开的sheet窗口lw_sheet,然后调用该窗口下的ue_createobject自定义事件。
ii_mousey = unitstopixels(ii_vscroll_offset,yunitstopixels!) + ypos
ue_mousemove: (自定义事件,Evend ID = pbm_dwnmousemove)(鼠标移动)
//动态创建框选的矩形框
if NOT ib_rectselect then return
用PB开发报表系统
在建设某公司内部信息网的过程中,涉及到大量的DBF文件直接转换为HTML文件的应用,其他的文件格式(Excel,Access,以及大型数据库的查询)也有这方面的要求,由此用PB实现了基于ODBC查询的PSR文件生成工具。
此生成器的原理是:
1、通过取出表的结构,
2、生成查询的SQL语法,
5、在dw_report的clicked事件中,写入以下语法:
if NOT ib_creating_object then return // instance变量,记录是否处于创建状态
m_main.m_objects.toolbarItemdown = false //恢复ToolbarItem状态
下加入相应键值:
键值名
值
含义
system
Sybase SQL Anywhere 5.0
ODBC源名及分类
做好如上手脚后,在程序中即可直接连接了。
Registryset()
Registryget()
通过Registryset()函数,改写注册表主键及相关键值:
HKEY_CURRENT_USER oftware\ODBC\ODBC.INI\[ODBC源名称]
HKEY_CURRENT_USER oftware\ODBC\ODBC.INI\ODBC Data Sources
删除对象只需用如下语法:
dw_report.modify('destroy uc_text_001')
如何实现象PB开发环境下的创建对象的方式呢?
1、建立菜单(将bar的Toolbar的Object type设为MenuCascade方式,Item项为各可创建对象),
2、各菜单Item的Clicked Event中写入:
增加选中对象列表(数组)
显示选中标记
框选:
记录左键按下时的位置(pixels),同时考虑Scrollhorizontal事件产生的位移量(unit)
ib_rect_select = True //框选开始
ii_mousex = unitstopixels(ii_hscroll_offset,xunitstopixels!) + xpos
int li_height,li_width,x2,y2,x1,y1
x1 = ii_mousex
y1 = ii_mousey
x2 = unitstopixels(ii_hscroll,xunitstopixels!) + xpos
y2 = unitstopixels(ii_vscroll,yunitstopixels!) + ypos
[ODBC源名称]即要创建或修改的ODBC source,如
HKEY_CURRENT_USER oftware\ODBC\ODBC.INI ystem
该主键下有若干键值记录了该连接的参数,如Sybase SQL anyway 5.0的典型设置:
键值名
值
含义
Autostop
Yes
程序调用结束后自动终止连接
li_height = y2 - y1
li_width = x2 - x1
x1 = pixelstounits(x1,xpixelstounits!)
y1 = pixelstounits(y1,ypixelstounits!)
hh = pixelstounits(hh,ypixelstounits!)
单选:容易实现,在datawindow的Clicked事件中用GetObjectAtPointer()函数即可取得点取的对象,然后在该对象四周画rectangle标记即可(清除其他已选对象选中标记);
多选:在Clicked事件中判断是否有CTRL按下
if KeyDown(keycontrol!) then …
if isnull(is_objectstring) then return //意外判断
ib_creatingobject = false //停止创建
choose case is_objectstring
……
[具体创建语法]
2、选择对象
产生Windows风格的选择形式主要包括:单选,CTRL+单选,框选
'brush.hatch="7" brush.color="553648127" pen.style="2" pen.width="5" '+&
'pen.color="1090519039" background.mode="2" background.color="255" )'
dw_pre.setredraw(false)
ib_rectselect = false
……//处理选择对象
通过以上三个事件的协同工作,就可实现多对象的框选。
3、自动连接ODBC
自动连接ODBC是指不需要用户自己定义ODBC连接参数,通过程序自动实现连接,一方面简化了用户的操作,另一方面,使批量定制报表成为可能。
自动连接ODBC的实现是通过写注册表来实现的,主要用到的函数有两个:
DatabaseFile
C:\Program Files\DBF自动报表ystem.DB
数据库文件
DatabaseName
system
连接名称
Description
自动生成ODBC
描述
Driver
C:\Program Files\DBF自动报表\WOD50T.DLL
驱动程序语法解释
PWS
SQL
用户口令
在实现过程中,使用了数据窗函数Modify()的各种语法来实现对数据窗的修饰,如加入线条,加入文本、改变格式、颜色等。可修饰的内容如下图:
该工具主要有以下特点:
1、自动化
对某些部门而言,需要处理的数据是动态变化的,如某销售公司,每天处理十几报表,报表的形式基本稳定,因此只需将更新后的数据拷贝到指定的位置,或在形成SQL语法时加入一定的条件,即可实现自动化的报表处理。处理时,将需要的报表循环,自动设置ODBC连接参数(用写注册表的方法),自动连接好数据库,打开报表对应的数据窗,检索记录,然后另存为预定的PSR文件即可。
m_main.m_objects.toolbaritemdown = false
ib_creatingObject = false
return
end if
ib_creatingobject = True //等待dw_report的click事件来触发
is_objectstring = passedstring //告知当前触发对象
3、SyntaxFromSQL()函数生成datawindow语法,
4、create()函数生成数据窗
5、将生成的数据窗进行修饰,包括增加对象、删除对象、修饰对象、布置对象等操作,进行数据窗的美化工作。
6、将生成的数据窗用SaveAs()函数另寸为PSR文件。
7、在HTML页中使用插件方式或直接连接方式显示该PSR文件。
4、在主窗口下,自定义ue_createobject事件,该事件主要响应如下:
string PassedString
PassedString = String(Message.LongParm, "address") //取出创建类型
if isnull(passedstring) or passedstring = 'STOP' then
//鼠标左键抬起,如果处于ib_rectselect状态,则结束选择状态
if NOT ib_rectselect then return
dw_pre.setredraw(false)
dw_pre.modify('destroy uc_rect_select')
dw_pre.setredraw(true)
【技术要点参考】
1、创建数据窗子对象
通过数据窗的Modify()函数实现,语法:
dw_report.modify('create text(name=uc_text_001 x="10" y="20" width="300" ....')
通过对具体对象(static text,picture,rectangle,line,compute等)的属性赋值(注意括号的使用与匹配),如x,y,width,height,color,font,background.color,background.mode,expression,format等,即可实现对象的创建。创建对象时特别注意是加入moveable=1 resizeable=1语法,实际上是将对象设为可移动,可变大小,这对于对象的调整是比较重要的。