PB动态报表格式自由定义的实现
pb报表自定义自定义
医舟软件报表自定义操作指南
1.pb的安装
建议使用pb6。
安装使用默认值。
以下为启动项
2.数据库连接
A. 点击上图圈圈处
B. 点new, Name处创建一个实例,server如果是本机库为空,@157表明连接是ip为157尾数的服务器。
Id和密码根据帐套填写,然后apply.
3.新建实例
A.点击第一个红色图标,然后点file-new,指向报表源pbl文件,创建报
表实例。
点保存。
B.点击实例的右键,properties
点击libraries,browse,指向报表源文件,全选,打开。
点ok。
C.打开报表
在医舟软件中可以通过报表设置找到合适的接近的报表框架,在框架基础上微调会轻松很多。
同时记住报表名
4.报表修改
以上界面进行报表的拖动和调整。
Sql可以调用yizhou的其他主表结构。
Text窗口可以直接修改显示文字,name中为医舟表字段。
5.文件打包
A. 关掉所有窗口后点第三个project.
b.点new,application
C. 勾选改过的pbl文件,executable name选择实例名,点击红圈内执行提交。
以上蓝色光标处就是打包后的报表文件,后缀为pbd(源文件为pbl).
6.文件覆盖
将该文件覆盖到医舟目录.
点是。
7.如果其他电脑也要使用该报表,点击注册信息-上载程序,其他电脑重新登录时会自动下
载。
8.。
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事件实现。
pb自定义事件详细
pbm_emlinefromchar 返回被选文本的行号。
pbm_emlineindex 返回编辑器控件中被选行第一个字符在编辑串中的位置。
pbm_emlinelength 返回编辑器控件中被选行中的字符数。
pbm_emlinescroll 水平或垂直卷滚编辑器控件。
pbm_dwscrolllinehome 卷滚到当前行的行首(水平方向)。
数据窗口通知消息(前缀:pbm_dwn)
pbm_dwnbacktabout 即将通过Shift+Tab组合键离开该控件。
pbm_dwnchanging 控件即将被改变。
pbm_dwndropdown 下拉式列表框的下拉部分即将可见。
pbm_dwnprocessenter 回车键被按下。
pbm_dwnrowchange 数据窗口中聚焦从一行转向另一行。
pbm_dwntabdownout 用户在数据窗口最后一行按了下箭头键。
pbm_dwntabout 用户在数据窗口的最后一行/列中按了tab键。
pbm_dwntabupout 用户在数据窗口第一行中按了上箭头键。
列表框通知消息(前缀:pbm_en)
pbm_emreplacesel 从剪贴板或从键盘上用新文本替换被选文本。
pbm_emsethandle 设置编辑器控件的句柄指向内存中的一个缓冲区。
pbm_emsetmodify 设置编辑器控件的modified标志。
pbm_emsetpasswordchar 设置用户输入任何文本时显示的字符,在输入密码时的显示。
pbm_ememptyundobuffer 清空由Windows管理的取消操作的缓冲区。
PB中窗体动态效果的实现
PB中窗体动态效果的实现---------------------------------// 实现关闭窗体时的动态效果// -------------------------------// 函数名:gf_closequery// 参数说明:// window window类型,调用窗口的名字// closetype integer类型,窗口关闭方式,value = 0~10 // -------------------------------// 申明局部变量int li_x ,li_y,li_width,li_height,li_ceny,li_cenx,li_xminusy,li_wminush Integer li_gd// 取出当前窗口的坐标值、大小值li_x = window.xli_y = window.yli_width = window.widthli_height = window.height// 设置窗体关闭前的动画效果// 关键是看哪个值发生了变化——x、y、h、wCHOOSE CASE closetypeCASE 0 // closetype = 0,从下到上逐渐消失for li_gd = li_height to 0 step -1window.height = li_gdwindow.show()nextCASE 1 // closetype = 1,从上到下逐渐消失for li_gd = li_y to li_height+li_y step 1window.y = li_gdwindow.height = li_height+li_y - li_gdwindow.show()nextCASE 2 // closetype = 2,从右到左逐渐消失for li_gd = li_width to 0 step -1window.width = li_gdnextCASE 3 // closetype = 3,从左到右逐渐消失for li_gd = li_x to li_x+li_width step 1window.x = li_gdwindow.width = li_x+li_width - li_gdwindow.show()nextcase 4 // closetype = 4,从上下向中间挤压逐渐消失li_ceny = li_y+li_height/2for li_gd = li_y to li_ceny step 1window.y = li_gdwindow.height = li_height - 2*(li_gd - li_y)nextcase 5 // closetype = 5,从左右向中间挤压逐渐消失li_cenx = li_x+li_width / 2for li_gd = li_x to li_cenx step 1window.x = li_gdwindow.width = li_width - 2*(li_gd - li_x)nextcase 6 // closetype = 6,从左上->右下for li_gd = li_y to li_height+li_y step 1window.y = li_gdwindow.height = li_height+li_y - li_gdif window.x < li_x + li_width thenwindow.x = li_x + (li_gd - li_y)elsewindow.x = li_x + li_widthend ifif window.width > 0 thenwindow.width = li_x+li_width - window.xelsewindow.width = 0end ifnextwindow.x = li_x + li_widthwindow.y = li_height+li_ywindow.width = 0window.height = 0window.show()case 7 // closetype = 7,从右下->左上for li_gd = li_height to 0 step -1window.height = li_gdif window.width > 0 thenwindow.width = li_width - (li_height - li_gd)elsewindow.width = 0end ifnextwindow.x = li_xwindow.y = li_ywindow.width = 0window.height = 0window.show()case 8 // closetype = 8,从右上->左下for li_gd = li_y to li_height+li_y step 1 window.y = li_gdwindow.height = li_height+li_y - li_gdif window.width > 0 thenwindow.width = li_width - (li_gd - li_y) elsewindow.width = 0end ifnextwindow.x = li_xwindow.y = li_height+li_ywindow.width = 0window.height = 0window.show()case 9 // closetype = 9,从左下->右上for li_gd = li_x to li_x+li_width step 1 window.x = li_gdwindow.width = li_width +li_x -li_gdif window.height > 0 thenwindow.height = li_height -(li_gd - li_x) elsewindow.height = 0end ifnextwindow.x = li_x+li_widthwindow.y = li_ywindow.width = 0window.height = 0window.show()case 10 // closetype = 10,从四面到中间li_ceny = li_y+li_height/2li_cenx = li_x+li_width / 2for li_gd = li_y to li_ceny step 1window.y = li_gdwindow.height = li_height - 2*(li_gd - li_y) if window.x < li_x + li_cenx thenwindow.x = li_x + (li_gd - li_y)elsewindow.x = li_x + li_cenxend ifif window.width > 0 thenwindow.width = li_width - 2*(li_gd - li_y)elsewindow.width = 0end ifnextwindow.x = li_cenxwindow.y = li_cenywindow.width = 0window.height = 0window.show()case elsewindow.show()window.width = li_widthwindow.height = li_heightwindow.x = li_xwindow.y = li_yEND CHOOSEreturn 0************************// 调用该函数在窗体的closequery 事件中gf_closequery (w_main,mod(integer(string(now(),"ss")),11))。
PB的小技巧
PB的小技巧1.如何使DataWindow中的数据只能追加新记录而不能修改。
利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")2. 允许从空的非字符字段跳离string ss = this.dwDescribe(this.GetColumnName()+".coltype")//s = this.dwDescribe("#"+String(this.GetColumn())+".coltype")CHOOSE CASE sCASE "number"IF Trim(this.GetText()) = "" THENint null_numSetNull(null_num)this.SetItem(this.GetRow(),this.GetColumn(),null_num)this.SetActionCode(3)END IFCASE "date"IF Trim(this.GetText()) = "" THENdate null_dateSetNull(null_date)this.SetItem(this.GetRow(),this.GetColumn(),null_date)this.SetActionCode(3)END IFCASE "time"IF Trim(this.GetText()) = "" THENtime null_timeSetNull(null_time)this.SetItem(this.GetRow(),this.GetColumn(),null_time)this.SetActionCode(3)END IFCASE "datetime"IF Trim(this.GetText()) = "" THENdate null_datetimeSetNull(null_datetime)this.SetItem(this.GetRow(),this.GetColumn(),null_datetime)this.SetActionCode(3)END IFEND CHOOSE3. 当我们为Datawindow的每一行显示行号时可以简单的放一个表达式为GetRow() -- 计算列。
问:如何能够在PB运行中得到任意表的结构
减肥药哪种好:www.hogoo8.com1、问:如何能够在PB运行中得到任意表的结构?如域名,属性等。
谢谢!答:直接访问DBMS的系统表或系统视图。
以ORACLE为例.SYS.ALL_TAB_COLUMNS等视图中包含你要的信息。
2、PB + Sybase SQL Anywhere C/S配置问:本人用PB的SQL Anywhere 5,在局域网选一台pc用Network server安装,选另一pc用Network client安装。
在服务器上创建数据库及一表后,在客户端配置ODBC 时,在database file 选Network方式,系统不认!在服务器端启动数据库后,在客户端点击DB Profile-ODBC- 选Database server-connect 后,系统显示:SQLSTATE=08001[sybase][ODBC]unable to connect to database server:unable to start database engine.请问高手,我该如何解决?非常感谢!答:请教高手?Sorry,其实我只是PB菜鸟。
记得大概半个多月前我在这儿发过一个贴子,里面谈及我的C/S配置,可适没人回应。
我的做法如下:(1)环境:NT4.0+sql anywhere5.5+PB6.5(2)服务器以server方式安装sql anywhere,用dbsrv50启动数据库服务(3)客户机以client方式安装sql anywhere,新建odbc数据源(名称与下面ini 文件内的配置一致,数据库为服务器上的数据库,选择network方式)(4)客户机安装PB开发之应用软件,包括:exe文件,pbd动态链接库,dll支持库,一个ini用户配置文件(内有[database]配置)(5)在客户机桌面上建立程序之快捷方式,点击图标,数十秒后程序成功启动。
其实我也不清楚这是否算是一个合理的C/S应用,Kokuc在电脑报上发表的文章相信你也看过,相当有用,可作参考。
PB制作报表操作手册V1.0
PB制作手麻统计报表操作手册V1.01.原理跟制作文书单非常类似;但是有所区别,请谨记;2.PB制作手麻统计报表,需要制作2个DATAWINDOW,也即是制作2个单子;其中一个的表现形式采用原有的FREEFORM,另外一个的表现形式为GRID,分别制作2张单子,使用自定义查询参数进行联结;3.手麻统计报表的组成部分有4部分:详细会有截图进行阅览;a)左侧树形菜单列表;b)右侧上方查询条件;c)中间部分为固定交互按钮;d)主体下方为报表的实际数据展现区域;4.具体的操作步骤如下:设置数据库连接,跟文书单一样,不做解释;制作查询条件DATAWINDOW,新建一个PBL,然后点击【NEW】新建一个DATAWINDOW,在DATAWINDOW选项里面选择FREEFORM,点击确定,选择【SQL SELECT】,点击【NEXT】点击【CHANCEL】,点击【design】下拉菜单里面的【CONVERT TO SYNTAX】,转入到代码编辑模式,进行SQL代码的编写,见截图:截图里面的的模式下是SQL代码,AS后面的是查询条件,这个是根据用户要求来做查询条件,截图只是放入一个开始时间和结束时间;这个里面的begintime,endtime作为查询条件,进而跟第二个DATAWINDOW里面的参数进行联结;点击【RETURN】按钮,返回到界面模式,修改参数的名字,字段属性需要进行一定的修改,点击一个字段,选择右侧属性选项卡里面的【EDIT】,在【styletype】下拉选择【EditMask】风格,在MASK里面调整时间格式为:yyyy/mm/dd即可,在下方勾选一个日历操作选项【Drop-Down Calendar】,每做一步点击保存,保存名字自己自定义,调整好属性后,点击【Retrieve】,进行界面效果预览,如下图所示可以设置一系列的聚焦提示效果,提示文字以及聚焦显示手型图案,例如保存完之后,第一个DATAWINDOW已经完成;接下来制作第二个DATAWINDOW。
PB数据窗口技巧大全
PB数据窗口技巧大全PB数据窗口是PowerBuilder语言中的一种常用控件,用于显示和操作数据。
在实际项目开发中,掌握一些PB数据窗口的技巧能够提高开发效率和用户体验。
下面是一些常用的PB数据窗口技巧的详细介绍,包括动态数据源、处理数据更新、格式化数据、控制数据窗口行为等方面。
1. 动态数据源:PB数据窗口支持通过修改SQL语句和参数实现动态查询。
可以通过修改dw_1.sqlsyntax和dw_1.settransobject等属性实现动态数据源切换或过滤。
2. 处理数据更新:PB数据窗口提供了一些方法来处理数据的插入、更新和删除。
可以使用dw_1.insertrow、dw_1.updaterow和dw_1.deleterow等方法来实现数据的增删改操作。
3. 格式化数据:PB数据窗口提供了一些格式化数据的方法,可以通过修改数据窗口列的format属性来实现对数据的格式化。
例如,可以使用dw_1.modify表示列的format属性来自定义数据的显示格式。
4. 排序和过滤数据:PB数据窗口提供了排序和过滤数据的功能。
可以通过修改dw_1.setsort和dw_1.setfilter等方法实现对数据的排序和过滤。
5. 控制数据窗口行为:PB数据窗口提供了一些属性和方法来控制数据窗口的显示效果。
例如,可以使用dw_1.retrieve来重新检索数据,使用dw_1.setitemstatus来设置数据窗口的状态等。
6.多表连接查询:PB数据窗口支持多表连接查询,可以通过在SQL 语句中使用连接符号和条件来实现多表连接查询的功能。
7.数据窗口插入计算列:PB数据窗口支持插入计算列,可以通过在SQL语句中使用函数和表达式来插入计算列实现对数据的计算和处理。
8.数据窗口多级分组:PB数据窗口支持多级分组,可以通过在数据窗口中设置分组列和聚合函数来实现数据的分组和统计。
9.数据窗口嵌套:PB数据窗口支持嵌套,可以在一个数据窗口中插入另一个数据窗口,实现数据的嵌套显示和处理。
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程序设计》第9章用户自定义事件
返回本节 录
9.4 触发用户事件
Static和Dynamic选项只能选择一个,缺省时为 Static。Static表示编译时指定事件必须存在,系统 要进行返回值类型检查;Dynamic表示编译时指定事 件可以不存在,系统把返回值类型检查推迟到应用 程序运行时进行。 Event是关键字,表示后面的Event Name是个事 件名而不是函数。Para list是事件的参数,有多个 参数时参数之间用逗号分隔。 如果用户事件定义了参数,只能使用上述格式触 发事件,而不能使用函数TriggerEvent()或 PostEvent()。
返回章目录
9.1用户自定义事件在应用中的作用
在下列情况下经常使用用户事件: (1)解决对象与窗口之间的通信问题。用 户事件可以通过参数进行信息传递。 (2)响应特殊操作。这些操作没有相应的 PowerBuilder预定义事件 (3)支持用户通过多种多样的方式完成同 一个功能
返回本节 录
返回本节 录
9.5 用户自定义事件应用实例
为了测试,我们在表中添加几条记录如图9ˉ12 所示
返回本节 录
9.5 用户自定义事件应用实例
运行程序:单击“显示记录”按钮,结果如图 9ˉ13所示
9.1用户自定义事件在应用中的作用
用户事件在许多地方与用户定义函数十分相似,用 户事件运用的灵活程度很大程度上反映出应用程序 的灵活性和适用性。PowerBuilder开始将事件和函 数同化,统称为方法。事件也可以带输入参数,并 有返回值。有时形式上难以区分事件和函数。不过, 函数一般是由用户调用,在编程时就已决定,而事 件除了可以由用户触发外,还可以由系统触发。大 多数的事件,都是由系统触发的。因此,事件比函 数更为灵活,应用范围更广
PB数据窗口动态编程技术word资料9页
PB数据窗口动态编程技术1 引言PowerBuilder(简称PB)是一个图形化的应用程序开发环境。
使用PB可以很容易地开发和数据库打交道的商业化应用软件。
PB开发的应用软件由窗口构成,窗口中不仅可以包含按钮、下拉列表框及单选按钮等标准的Windows控件,还可以有PB提供的特殊的控件。
这些特殊控件可以使应用软件更容易使用,使应用软件的开发效率更高。
数据窗口控件就是PB提供的一个集成度很高的控件,使用该控件可以很方便地从数据库中提取数据。
PB提供了可视化的数据窗口设计和编程模式,但是,可视化设计界面设计的数据窗口在程序运行过程中是固定不变的。
很多时候,我们需要依据程序运行的情况及用户的选择对数据窗口进行动态调整,使数据窗口以不同的形式呈现数据,这就需要在程序运行过程中对数据窗口进行动态设置。
2 建立数据窗口控件和数据窗口PB的可视化编程环境仍然是PB程序设计的基础,我们在PB可视化设计阶段建立了一个数据窗口控件DWmain,该数据窗口控件包含一个Grid 类型的数据窗口DWdata,数据窗口控件DWmain实现数据窗口DWdata与用户的人机交互,用户通过操作数据窗口控件DWmain对数据窗口DWdata的数据进行检索、新增、删除和修改等操作。
可视化部分设计的原则是,固定不变的内容就在可视化部分设计,需要动态调整的内容则在程序中完成。
数据窗口对象DWdata的数据源是数据库表h_hy,h_hy的结构如下:表1 数据库表结构定义[列名\&类型\&长度\&小数位\&Ph\&Char\&20\&\&Rq\&DateTime\&8\&\&Csn\&Decimal\&9\&5\&Cpb\&Decimal\&9\&5\&Cas\&Decimal\&9\&5\&Cfe\&Decimal\&9\&5\&] 唯一索引:Ph数据窗口对象DWdata的SQL语句定义如下:SELECT ph ,rq,csn,cpb,cas,cfe FROM h_hy ;3 在程序中对数据窗口进行动态编程的技术1)禁止对rq进行修改要禁止用户对rq列进行修改,可以将rq列的TabSequence属性值设置为0。
PB动态报表格式自由定义的实现
PB动态报表格式自由定义的实现一、实现原理:PB中的报表其实就相当于是数据窗口。
第一步,动态报表的实现。
通过设置数据窗口对象(dataobject)中文本、列等的Resizeable 和moveable属性为1来实现对象位置的拖动控制,通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)。
第二步,报表格式的保存。
在一个应用当中,数据窗口对象的名称总是唯一的,将每一个数据窗口对象转化成PSR文件存于数据库表中。
在窗口打开时,程序先校验报表格式是否存在。
如果存在,先将报表格式读取出来放在一个临时文件当中,然后设置数据窗口(datawindow)的数据对象(dataobject)为这个报表文件,然后提取数据;如果不存在,直接提取数据即可。
二、实现过程:1、建立一个数据库表用以保存报表格式文件。
表名:dyn_reportDwobject Varchar2(20) 数据窗口对象名称Primary keyRptitle Varchar2(80) 报表的标题名称Memo Long raw 报表格式2、建立一个窗口w_temp。
定义实例变量如下:string is_dwtype,is_dwobject //保存报表中对象的类型及名称控件名称控件含义Dw_print 数据窗口对象Cb_exit 退出按钮Cb_savereport 报表格式保存按钮3、在窗口的OPEN事件中加入如下代码, 校验报表格式是否存在,如果存在读取定义好的报表格式到数据窗口。
blob emp_piclong ll_handlestring ls_dwobject,ls_reportfile,ls_pathls_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_reportfiledw_print.settransobject(sqlca)elseDw_print.settransobject(sqlca)End ifDw_print.retrieve()4、报表格式的保存。
PB自定义事件
pb中用户自定义事件内容Event ID 含义 内容浅析 单选或多选按钮消息前缀:pbm_bm pbm_bmgetcheck 单选按钮或多选按钮是否被选 pbm_bmgetstate 按钮是否加亮 pbm_bmsetcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然 pbm_bmsetstate 加亮或不加亮按钮 pbm_bmchange 改变按钮的风格,例如,改为单选按钮或组合框 单选或多选按钮通知消息前缀:pbm_bn pbm_bnclicked 按钮控件被点中 pbm_bndisable 使按钮控件无效 pbm_bndoubleclicked 按钮控件被双点 pbm_bndragdrop 一个对象被放到按钮控件 pbm_bndragenter 一个对象被拖到按钮控件 pbm_bndragleave 一个对象被拖离按钮控件 pbm_bndragover 一个对象被拖经按钮控件 pbm_bnhilite 按钮控件被加亮 pbm_bnpaint 按钮控件被绘制 pbm_bnsetfocus 按钮控件获得聚焦 pbm_bnunhilite 按钮控件不被加亮 通用对话框消息前缀:pbm_cb pbm_cbaddstring 将字符串加到通用对话框 pbm_cbdeletestring 从通用对话框删除一个字符串 pbm_cbdir 加一个目录列表到通用对话框 pbm_cbfindstring 搜索以一组字符开头的字符串 pbm_cbfindstringexact 搜索与所提供的字符完全匹配的字符串 pbm_cbgetcount 列表框中的项数 pbm_cbgetcursel 当前被选项的数目 pbm_cbgetdroppedcontrolset 列表框在屏幕上的坐标位置 pbm_cbgeteditsel 编辑器控件中被选字符的范围 pbm_cbgetextendedui 缺省或扩展的用户界面 pbm_cbgetitemdata 重画的列表框中的4字节(32位)项 pbm_cbgetitemheight 列表框中某一项的高度 pbm_cbgetlbtext 列表框中的文本 pbm_cbgetlbtextlen 列表框中文本的长度 pbm_cbinsertstring 向列表框中增加新的字符串或4字节项 pbm_cblimittext 限制能被输入到列表框中的字符数 pbm_cbresetcontent 删除列表框中所有元素 pbm_cbselectstring 搜索匹配的字符串并显示 pbm_cbsetcursel 在列表框中选择并显示一项 pbm_cbseteditsel 在列表框的编辑区域中选择一块文本 pbm_cbsetextendedui 设置缺省或扩展的用户界面 pbm_cbsetitemdata 在列表框中设定4字节(32位)项 pbm_cbsetitemheight 设置列表框中项的高度 pbm_cbshowdropdown 转换(显示或隐藏)列表框中拖放区域 通用对话框通知消息前缀:pbm_cbn pbm_cbndblclk 用户在列表中某一项上双点 pbm_cbndragdrop 一个对象被放到通用对话框控件上 pbm_cbndragenter 一个对象被拖到通用对话框控件上 pbm_cbndragleave 一个对象被拖离通用对话框控件 pbm_cbndragover 一个对象被拖经通用对话框控件 pbm_cbndropdown 列表框的下放区域即将被显示 pbm_cbneditchange 编辑器控件中的文本发生变化 pbm_cbneditupdate 列表框编辑器控件中的文本即将被改变 pbm_cbnerrspace 列表框满,不能再向其中加入项 pbm_cbnkillfocus 通用列表框失去聚焦 pbm_cbnselchange 列表框中被选文本被改变 pbm_cbnselendcancel 用户按下了"取消"按钮 pbm_cbnselendok 用户按下了"确认"按钮 pbm_cbnsetfocus 通用对话控件拥有聚焦 数据窗口消息前缀:pbm_dw pbm_dwclosedropdown 关闭下拉式数据窗口 pbm_dwscrollend 在数据窗口中卷滚到最后一行 pbm_dwscrollhome 在数据窗口中卷滚到第一行 pbm_dwscrolllineend 卷滚到当前行的行尾(水平方向) pbm_dwscrolllinehome 卷滚到当前行的行首(水平方向) 数据窗口通知消息前缀:pbm_dwn pbm_dwnbacktabout 即将通过Shift+Tab组合键离开该控件 pbm_dwnchanging 控件即将被改变 pbm_dwndropdown 下拉式列表框的下拉部分即将可见 pbm_dwngraphcreate 即将创建图形 pbm_dwnitemchangefocus 数据窗口控件中当前项的聚焦改变 pbm_dwnitemvalidationerror 对当前项的修改引起了一个合法性检查错误 pbm_dwnkey 有键被按下使用KeyDown()处理键盘值 pbm_dwnlbuttondown 鼠标左键被按下 pbm_dwnlbuttonup 鼠标左键被松开 pbm_dwnmbuttonclk 鼠标中键点击 pbm_dwnmbuttondbclk 鼠标中键双击 pbm_dwnmousemove 鼠标移动 pbm_dwnprintmarginchange 打印边界被改变 pbm_dwnprocessenter 回车键被按下 pbm_dwnrowchange 数据窗口中聚焦从一行转向另一行 pbm_dwntabdownout 用户在数据窗口最后一行按了下箭头键 pbm_dwntabout 用户在数据窗口的最后一行/列中按了tab键 pbm_dwntabupout 用户在数据窗口第一行中按了上箭头键 动态数据交换(DDE)消息前缀:pbm_dde pbm_ddeddeack 收到一个DDE消息 pbm_ddeddeinitiate 开始一个DDE会话 pbm_ddeddeterminate 终止一个DDE会话 编辑器控件消息前缀:pbm_em pbm_emcanundo 编辑器控件是否能撤消上一次修改 pbm_ememptyundobuffer 清空由Windows管理的取消操作的缓冲区 pbm_emfmtlines 在多行编辑器控件的行尾增加或删除回车换行 pbm_emgetfirstvisibleline 返回编辑器控件中可见的第一行的行号 pbm_emgethandle 获得编辑器控件使用的内存句柄 pbm_emgetline 从编辑器控件中复制一行到内存中的一个缓冲区 pbm_emgetlinecount 返回多行编辑器控件的行数 pbm_emgetmodify 文本是否被用户修改 pbm_emgetrect 返回控件的长方形域 pbm_emgetsel 返回被选文本的起始位置 pbm_emlimittext 限制用户键入的文本长度 pbm_emlinefromchar 返回被选文本的行号 pbm_emlineindex 返回编辑器控件中被选行第一个字符在编辑串中的位置 pbm_emlinelength 返回编辑器控件中被选行中的字符数 pbm_emlinescroll 水平或垂直卷滚编辑器控件 pbm_emreplacesel 从剪贴板或从键盘上用新文本替换被选文本 pbm_emsethandle 设置编辑器控件的句柄指向内存中的一个缓冲区 pbm_emsetmodify 设置编辑器控件的modified标志 pbm_emsetpasswordchar 设置用户输入任何文本时显示的字符,在输入密码时的显示 pbm_emsetrect 设置/重置编辑器控件所在的长方形区域,编辑器控件中的文本被重画 pbm_emsetrectnp 除了不重画文本,大致与setrect相同 pbm_emsetsel 选择字符 pbm_emsettabstops 在多行编辑器控件中设置tabstops pbm_emsetwordbreak 设置新的词拆分函数 pbm_emsetwordbreakproc 设置新的词拆分过程 pbm_emundo 撤消最近的编辑操作 编辑控件通知消息前缀:pbm_en pbm_enchange 编辑器控件中的文本发生改变 pbm_enerrspace 编辑器控件内存缓冲区溢出 pbm_enhscroll 用户点中上水平卷滚条 pbm_enmaxtext 用户试图输入比允许更多的文本 pbm_enupdate 编辑器控件即将显示用户的修改 pbm_envscroll 用户点中了垂直卷滚条 列表框消息(前缀:pbm_lb) pbm_lbaddstring 向列表框控件中增加一项或一个字符串 pbm_lbdeletestring 从列表框中删除一项或一个字符串 pbm_lbdir 用目录列表填充列表框 pbm_lbfindstring 在列表框中搜索与所给字符串部分匹配的第一项 pbm_lbfindstringexact 在列表框中搜索与所给字符串精确匹配的第一项 pbm_lbgetcaretindex 在列表框中搜索拥有聚焦的项 pbm_lbgetcount 确定列表框中的项数 pbm_lbgetcursel 确定所选项是第几项 pbm_lbgethorizontalextent 获得列表框的宽度计算水平卷滚 pbm_lbgetitemheight 确定列表框控件中项的高度 pbm_lbgetitemrect 确定列表框的尺寸 pbm_lbgetsel 获得列表框中当前所选的项 pbm_lbgetselcount 在多选列表框中获得所选项的数目 pbm_lbgetselitems 用列表框中表框各自的项号填充一个给定的整数数组 pbm_lbgettext 获得列表框中当前所选项的文本 pbm_lbgettextlen 获得列表框中当前所选项的文本中的字符数 pbm_lbgettopindex 确定列表框中可见的最上面一项的项号 pbm_lbinsertstring 向列表框中加入一个新字符串 pbm_lbresetcontent 重置(消除)列表框中的内容 pbm_lbselectstring 搜索并加亮与所给字符匹配的字符串 pbm_lbselitemrange 选择/取消列表框中某一范围中的项 pbm_lbsetcaretindex 设置列表框中的某一项拥有聚焦 pbm_lbsetcolumnwidth 设置列表框中列的宽度 pbm_lbsetcursel 在列表框中选择并加亮一项;如果需要,卷滚到列表框 pbm_lbsethorizontaltext 设置列表框中被水平卷滚的单元数 pbm_lbsetitemdata 设置与列表框相关的32位/4字节值 pbm_lbsetitemheight 设置列表框中项的高度 pbm_lbsetsel 在列表框中选择一个字符串 pbm_lbsettabstops 设置列表框控件中tabstops的位置 pbm_lbsettopindex 卷滚列表框使特定的项成为可见的最上面一项 列表框通知消息前缀:pbm_en pbm_endblclk 用户在列表框控件中的某一项上双击 pbm_enerrspace 用户试图超越可在列表框中输入字符的最大限制 pbm_enselcancel 当前选取文本被取消 pbm_enselchange 用户在列表框中选择或取消了一项 窗口消息前缀:pbm_ pbm_activateapp 被激活的窗口属于另外一个应用 pbm_askcbformatname 要求剪贴板中的内容被复制到一个使用自定义格式的文本缓冲区中 pbm_char 传送键盘上按下的键 pbm_chartoitem 通过转换键盘来的字符,帮助列表框定位其中的项 pbm_childactivate 一个子窗口被移动或激活 pbm_clear 用户要删除当前编辑器控件中的内容 pbm_command 用户选择了一个菜单项控件,或使用了加速键 pbm_compacting 系统内存资源不足;当Windows占用了多于1/8的CPU时间紧缩内存时,产生这条消息 pbm_compareitem 当新的一项被加入列表框或组合框时产生此消息,Window用这条消息进行项之间的比较 pbm_ctlcolor 一个控件即将被画出,可在此时改变控件的颜色 pbm_deadchar 用户选择了一种非英语字符集或其它特殊字符集,这将改变下面将要输入的字符 pbm_deleteitem 从列表框或通用对话框中移去一项 pbm_destroyclipboard 剪贴板内容被清除 pbm_devmodechanged WIN.INI中的一个设备名被修改 pbm_drawclipboard 剪贴板内容发生改变 pbm_drawitem 列表框或通用对话框的一项内容被改变 pbm_dropfiles 当鼠标左键在一个注册为拖放文件接受器的应用上释放时,发出该消息 pbm_erasebkgnd 窗口的客户区需要重画 pbm_fontchange 应用可用的字体数改变 pbm_getdlgcode 通知消息,说明当前使用哪种类型的键盘 pbm_getfont 获取当前激活的字体 pbm_getminmaxinto Windows正在检查最小化或最大化窗口的尺寸 pbm_gettext 从一个控件(如按钮或编辑器控件)中复制文本到一个内存缓冲区 pbm_gettextlength 用来确定一个控件中的字符数 pbm_hscrollclipboard 剪贴板的水平卷滚条被使用 pbm_iconerasebkgnd 一个最小化窗口需要重化背景 pbm_initdialog 一个对话框即将被显示 pbm_initmenu 一个菜单即将被显示 pbm_initmenupopup 一个弹出式窗口即将被显示 pbm_keydown 键盘上的一个键被按下 pbm_keyup 键盘上的一个键被释放 pbm_mdiactive 一个MDI子窗口(表单)被激活 pbm_mdicascade 以重叠的形式重排所有的表单 pbm_mdicreate 创建一个表单 pbm_mdidestroy 从MDI框架中移去一个表单 pbm_mdigetactive 获得当前活动的MDI表单的句柄 pbm_mdiiconrange 在一个MDI框架中重排最小化表单的图标 pbm_mdimaximize 最大化一个MDI子表单 pbm_mdinext 激活下一个MDI表单(紧接着活动表单的表单) pbm_mdirestore 把MDI表单恢复到它原来的大小 pbm_mdisetmenu 将一个菜单与一个MDI表单联系起来 pbm_mdifitle 平铺所有的MDI表单 pbm_measureitem 这个消息被送给即将创建的内有按钮或其它控件的窗口 pbm_menuchar 用户使用了一个快捷键,但系统不支持该快捷键 pbm_menuselect 用户选择了一个菜单项 pbm_mouseactivate 用户在一个非活动窗口中点击了鼠标 pbm_mousemove 用户移动了鼠标 pbm_ncactivate 窗口的非客户区即将被激活 pbm_nccalcsize 窗口的尺寸需要重新计算 pbm_nccreate 窗口即将创建它的非客户区 pbm_ncdestroy 窗口的非共享区被析构 pbm_nchittest 每次非客户区被移动时都发送该消息 pbm_nclbuttondblclk 用户在非客户区双点了鼠标左键 pbm_ncpaint 非客户需要画出 pbm_nextdlgctl 在对话框中将聚焦转给另一个控件 pbm_paint 窗口的客户区需要被画出 pbm_paintclipboard 剪贴板应用有剪贴操作,剪贴板查看器需重画 pbm_palettechanged 系统调色板被改变 pbm_paletteischanging 系统调色板即将被改变 pbm_parentnotify 通知父窗口一个子窗口即将被创建 pbm_querydragicon 用户要拖一个最小化窗口 pbm_queryendsession 通知消息,说明窗口即将被关闭 pbm_querynewpalette 应用即将收到输入聚焦,应该执行必要的颜色调整 pbm_queryopen 一个最小化窗口即将被恢复 pbm_quit 应用处理的最后一个消息 pbm_renderallformats 通知一个剪贴板格式的拥有者,应用将失去所有的格式 pbm_renderformats 通知消息,说明放在剪贴板中的数据应该用一种特殊格式传送 pbm_setcursor 通知消息,说明鼠标指针在一个窗口中移动 pbm_setfont 用来在对话框中改变字体 pbm_setredraw 在加一个新项之前发送给列表框或通用对话框 pbm_settext 用来改变窗口的标题或文本 pbm_sizeclipboard 剪贴板查看器应用改变尺寸 pbm_spoolerstatus 一个打印管理器任务被添加或删除 pbm_syschar <ALT>键和其它某键同时被按下 pbm_syscolorchange 一种或多种系统颜色被改变 pbm_syscommand 用户选择了一个系统菜单命令 pbm_sysdeadchar 通知消息说明一种非英语字符集被选定 pbm_syskeydown 用户按下某键的同时按下了<ALT>键 pbm_syskeyup 用户释放了<ALT>组合键 pbm_timechange 系统时钟被修改 pbm_undo 从undo缓冲区复制文本到编辑器控件 pbm_vkeytoitem 当一个列表框拥有聚焦时,用户按下了一个键 pbm_vscroll 用户点击了垂直卷滚条 pbm_vscrollclipboard 剪贴板查看器的垂直卷滚条被点击 pbm_windowposchanged 窗口位置发生改变 pbm_windowposchanging 窗口位置即将发生改变 pbm_wininichange WIN.INI文件被修改 。
在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的方法和优势。
如果你还有其他问题,欢迎继续提问。
power bi 条件格式自定义规则
Power BI 是微软公司推出的一款商业智能工具,它能够通过数据分析和可视化帮助用户更好地理解企业运营状况。
Power BI 的条件格式自定义规则是该工具中一个非常重要的功能,它能够帮助用户根据特定的条件对数据进行格式化,从而更直观地展现数据之间的关系和变化。
一、什么是条件格式自定义规则?条件格式自定义规则是指用户可以根据自己的需求,自定义数据的呈现方式。
用户可以根据数据的大小、颜色、图标等属性来设置条件格式,使得数据在展现时更加直观、清晰。
这样一来,用户便可以更方便地从大量数据中找到关键信息,做出相应的决策。
二、如何使用条件格式自定义规则?1. 选择要进行条件格式设置的数据,然后在Power BI 中打开“格式”选项卡。
2. 在“格式”选项卡中,选择“条件格式规则”选项,然后点击“新建规则”按钮。
3. 在弹出的对话框中,用户可以根据自己的需求选择数据的格式化方式,比如设置数据的背景色、字体颜色、数据条等。
4. 在设置格式化方式后,用户还可以设置相应的条件,比如当数据大于或小于某个数值时,应用什么样的格式。
5. 点击“确定”按钮,即可完成条件格式自定义规则的设置。
三、条件格式自定义规则的应用场景1. 数据的关键指标呈现:用户可以根据关键的业务指标设置条件格式,比如销售额超过一定数值时,数据呈现红色,以便在数据分析中更容易识别出这些关键指标。
2. 数据的趋势分析:用户可以利用条件格式自定义规则来设置数据的趋势显示,比如当数据呈现上升趋势时,使用箭头图标进行标识,帮助用户更容易地分析数据的变化趋势。
3. 数据的异常情况标识:用户可以通过条件格式自定义规则来标识数据中的异常情况,比如当某个指标超出正常范围时,自动标识为异常,从而引起用户的重视。
四、条件格式自定义规则的优势1. 提高数据可视化效果:通过条件格式自定义规则,用户可以将数据以更加直观清晰的方式呈现出来,提高数据的可视化效果。
2. 降低数据的解读难度:利用条件格式自定义规则,用户可以更容易地从海量数据中找到关键信息,降低数据的解读难度。
PowerBuilder中实现动态报表的制作
PowerBuilder中实现动态报表的制作
叶炜
【期刊名称】《电子与电脑》
【年(卷),期】2000(007)001
【摘要】PowerBuilder是PowerSoft公司推出的专门用来设计客户机/服务器应用程序的一种开发工具,它所提供的数据窗口控件是其最关键的部分。
在应用程序中动态变化最大的成份是数据,根据正在使用应用程序的用户和使用时间,数据的显示和显示格式均应该相应地发生动态变化。
利用动态数据窗口技术,可在运行时改变用户所看到的数据以及显示格式。
本文将阐述如何通过动态数据窗口技术来实现外事信息管理系统中的动态报表制作希望能够对PowerBuilder编程人员在数据窗口的使用上有所帮助。
【总页数】3页(P138-140)
【作者】叶炜
【作者单位】河北省邯市峰峰矿务局六0七厂;河北省邯市峰峰矿务局六0七厂【正文语种】中文
【中图分类】D802
【相关文献】
1.PowerBuilder中复杂动态报表的实现方法 [J], 吕林霞
2.PowerBuilder与EXCEL结合制作动态报表 [J], 徐黎
3.基于PowerBuilder设计实现通用动态报表系统 [J], 孙玉荣
4.提取有效字段实现动态报表的制作--VFP下学生成绩报表的制作 [J], 武晋民
5.PowerBuilder下动态报表技术的实现 [J], 李文继
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PB动态报表格式自由定义的实现
在通常的Server/Client方式MIS开发中,总是有没完没了的报表需要制作,调试报表花费的时间也是最多而且乏味,还常常不能满足客户的要求。
要是能够让用户自己调整报表的格式和内容,然后将它保存下来,程序下次启动时它自动调用保存了的报表格式那有多好。
本人通过如下方法最终实现了用的要求。
PB(PowerBuilder)有一种以PSR结尾的特殊的保存报表的文件格式(本文简称作PSR文件)。
根据数据窗口可以直接读取PSR文件生成报表的原理,程序通过生成PSR文件,实现动态报表格式的保存。
一、实现原理:
PB中的报表其实就相当于是数据窗口。
第一步,动态报表的实现。
通过设置数据窗口对象(dataobject)中文本、列等的Resizeable和moveable 属性为1来实现对象位置的拖动控制,通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)。
第二步,报表格式的保存。
在一个应用当中,数据窗口对象的名称总是唯一的,将每一个数据窗口对象转化成PSR文件存于数据库表中。
在窗口打开时,程序先校验报表格式是否存在。
如果存在,先将报表格式读取出来放在一个临时文件当中,然后设置数据窗口(datawindow)的数据对象(dataobject)为这个报表文件,然后提取数据;如果不存在,直接提取数据即可。
二、实现过程:
1、建立一个数据库表用以保存报表格式文件。
2、建立一个窗口w_temp。
定义实例变量如下:
string is_dwtype,is_dwobject //保存报表中对象的类型及名称。