PB中如何得到Crosstab中的列名
- 格式:docx
- 大小:17.00 KB
- 文档页数:2
如何将PB 的交叉报表转换成EXCEL 形式,用的办法是写一个通用的转换函数。
主函数部分:(还用到了 PFC 的字串处理的一个函数和在本对象中的一个取值 函数)//=========================================================== =========矚慫润厲钐瘗睞枥庑赖賃軔。
// [P UBLIC] Fu nction uf_data2excel 在 u_data2word in herited from n onv isualobject 聞創沟燴鐺險爱氇谴净祸測。
//- --------------------------------------------- 残骛楼諍锩瀨濟溆塹籟婭骤。
//说明:将数据倒入excel 中,支持计算列及显示格式,要求在题头的计算列要写 tag 值// -------------------------------------------- // 参数 1:[value] datawindow adw //说明:数据窗口// -------------------------------------------- //返回:(INTEGER ) 成功返回1,不成功返回0 // -------------------------------------------- // 作者:cwl 日期:2002.03.18 〃==============================================厦礴恳蹒骈時盡继價骚卺癩。
〃变更日志:020515加入对交叉表倒出的支持(主要是修改了保存题头部分)con sta nt in teger pp LayoutBla nk = OLEObject ole_object ole_object = CREATE OLEObjectin teger li_ret,li_crosstab=O long ll_col nu m,ll_row num stri ng ls_valuestri ng ls_objects,ls_obj,ls_objs[],ls_objtag[] long ll_p os,ll_le n,ll_num = 0 //题头区 long ll_head numstri ng ls_head[],ls_headtag[] //合计区long ll_su mnu m,i=1,start po s=1,e ndp os,li_ posstri ng ls_sum[],ls_sumtag[],ls_bi nd,toke n[],list,ls_te mp,l s_crosstabcol茕桢广鳓鯡选 块网羈泪镀齐。
pb数据窗口控件函数canundo、categorycount、categorynameCanUndo()功能:检测最近的编辑操作能否被取消。
语法:dwcontrol.CanUndo()返回值:如果最近一次操作被取消,该函数返回true,否则返回false。
如果dwcontrol为null,则CanUndo()函数返回Null。
CategoryCount()功能:返回数据控件指定统计图的数据类别数。
语法:dwcontrol.CategoryCount(graphcontrol)参数:graphcontrol:string类型,指定放置在数据窗口对象中的统计图对象名,要得到该统计图的数据类别个数。
返回值:integer。
函数执行成功时返回1,出现错误时返回-1。
如果任何参数的值为null,则Categorycount()函数返回null。
试例:integer:li_countli_count=dwcontrol.categorycount("gr_revenues")CategoryName()功能:返回数据窗口控件指定统计图数据类的名称。
语法:dwcontrol.categoryname(graphcontrol,categorynumber) 参数:graphcontrol:数据窗口控件中统计图对象的名称,用字符串表示。
categorynumber:得到其名称的数据类的编号。
返回值:string。
函数执行成功时,返回数据窗口中统计图对象指定类别编号的类名;执行失败时,返回空字符串(“”),如果任何参数的值为null,则categoryname()函数返回null。
用法:统计图中数据类的编号从1开始连续编号到categorycount()函数返回最大的编号。
当删除统计图中某个类时,余下的类重新编号,以保持编号的连续性。
pb1.RGB函数计算公式: 颜色值= (65536 * Blue) + (256 * Green) + (Red)2.控件可拖动: send(handle(this),274,61458,0)3.如何用程序控制下拉子数据窗口的下拉和收起用modify或者直接用dw_1.object.col1.dddw.showlist = true4.检索参数有些不需要传入则传%.5.如何屏蔽鼠标滚轮触发在控件的other事件写 if message.number = 522 then return 16.得到数据窗口的语法: string ls_dwsyntax ls_dwsyntax=dw_1.describe("datawindow.syntax" )7.得到数据窗口中各列及标题: long ll_count,i string ls_value,ls_colname ll_colnum = Long(dw_1 .object.datawindow.column.count) for i = 1 to ll_colnum //得到标题头的名字 ls_colname = dw_1.descri be(’#’ + string(i) + ".name") + "_t" ls_ value = dw_1.describe(ls_colname + ".text") next8.在程序中动态设置初始值: ex:dw_contro.object.columnName.initial = ’xxxx’9.如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行起先对你要显示唯一值的列进行排序: ""city A,然后增加如下过滤字符串:" city < > city [-1] or GetRow () = 1"10.如何改变列的字体颜色,提醒用户此列已做修改在列的Color属性中,输入如下表达式IF (column_name < >column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0) )。
PowerBuilder数据窗口缓冲区与状态详解Powerbuilder(pb)的datawindow(数据窗口)的各个缓冲区和状态是pb数据窗口的非常重要的,对这些概念的理解,将有助于我们认识pb数据窗口的优势。
基本概念数据窗口的三个缓冲区:Primary!Delete!Filter!Getitemstatus(row,列名或者列号,缓冲区)当要取整个行的状态时,列名或者列号用0表示数据窗口中数据项状态Notmodified! 从数据retrieve出来后没有改变过Datamodified! 数据retrieve出来后有过改变New! 数据窗口增加了一列但没有录入过数据,该列的状态就是new!Newmodified! 数据窗口增加了一列,同时改列被录入了数据,该列的状态就是newmodified!retrieve出来后,结果如下:所有的行和数据项状态都是notmodified用geitemstatus(行号,列名,primary!)取每一数据项状态用getitemstatus(行号,0,primary!)去行状态001,002,ddd三个格子所在的数据项状态仍旧是notmodifiedAAA(原是Ccc)所在格子的数据项状态是datamodified第一行(001,AAA)的行状态是datamodified第二行(001,ddd)的行状态时notmodified后,如下:2点。
第三行状态就是new!请用getitemstatus(3,0,primary!)取第三行状态第三行的每一项将变为datamodified!开发中实例:表1(因为是举例,请不要考虑数据库设置中的冗余概念,如表2中的姓名没必要等)需求一、删除表1中的数据的同时,把表2的数据也删除,必须删除,不考虑约束条件。
如把表1中001,002删除了,需要把表2中所有001,002的记录删除,(【删除】和【保存】是两个按钮或菜单,就是说【删除】只是删除了前台的内容,不【保存】数据库中数据是没有被删除的,数据库需要【保存】执行的时候才真正执行删除),怎么做?1、可以使用触发器;2、可以在删除之前把表1记录下来,【保存】时对比表1,看那些数据缺少了;3、……..DeletedCount ( )Getitemstring(row,列名,delete!,true)(为什么用true,不用false呢?,true是从数据库取出来的默认值,false是当前值,如果删之前用户修改过编号,但是没有保存,用false就会有问题)需求二、把表1中编号001改为了A01,002改为001,003改为B05,004,005不变(没有任何规律的),要求表二的编号也这么改过来。
Pb数据窗口1.Pb数据窗口介绍(结合实例进行讲解):数据窗口控件数据窗口对象数据窗口对象分为:常用的数据窗口类型:Composite 复合报表数据窗口Crosstab 交叉报表数据窗口Freeform 自由模式数据窗口Graph 图形报表数据窗口Grid 网格数据窗口Group 分组数据窗口n-up 多列显示数据窗口分别举例说明各个数据窗口:杏林妙手中的体检报告中保护上述数据窗口类型。
2.数据窗口数据源类型介绍:Quick select、sql select 、query、external、stored procedure 分别为:通过单表查询,通过多表查询,通过查询对象,通过自定义的字段,通过存储过程。
3.数据窗口控件常用函数介绍:Setredraw(boolean) :设置是否自动刷新报表,true 自动刷新,false不自动刷新。
Describe(string):获取数据窗口指定对象的属性,string为数据窗口表达式例如:“t_1.text“等Modify(string):设置数据窗口指定对象的属性,和describe配合使用,string为数据窗口表达式例如“t_1.text=’123’“描述查找相关设置的方法。
Getitemstring(int,string)、Getitemstring(int,int)Setitem (int,string,string)、Setitemstring(int,int,string)获取数据窗口指定行的字符串列的值,参数:行号,列名(或列值)设置数据窗口指定行的字符串列的值,参数:行号,列名(或列值),设置值(还有获取其他数据类型的类似函数不做赘述!,还可以通过object.列名[行号] 来获取和设置指定行列的值)Deleterow(int)删除行指定行的操作,和循环配合使用的注意事项。
Insertrow(0)插入行,参数0表示在最后一行插入Rowcount()当前数据窗口的行数。
pb中getrow函数
pb中的getrow函数是一个非常实用的函数,它可以用来获取表格中指定行的数据。
在使用该函数时,我们需要指定表格的名称和行号,函数会返回该行的所有数据。
在使用getrow函数时,需要注意以下几点:
1. 表格名称需要使用双引号括起来,例如:'table1'。
2. 行号从1开始,而不是0。
3. 如果指定的行号不存在,函数会返回空值。
4. 如果需要获取多行数据,可以使用循环语句来实现。
下面是一个示例代码,用于获取表格'table1'中第3行的数据: ```
datawindow ldw
integer li_row
string ls_data
ldw = this.DataWindow
li_row = 3
ls_data = ldw.GetRow('table1', li_row)
MessageBox('Row Data', ls_data)
```
在执行该代码时,会弹出一个消息框,显示第3行的数据。
如果需要获取多行数据,可以将代码放入循环语句中,依次获取每一行的数据。
总之,pb中的getrow函数是一个非常实用的函数,可以帮助我们快速获取表格中的数据,提高开发效率。
用iReport制作交叉表(CrossTabs) 立方开源商业智能一个CrossTabs是一种在设计的时候既不确定行数和也不确定列数的一种表格,在运行环境下它会像下面显示的不同年份的一个销售报表一样。
CrossTabs在jasperresports中从1.1.0版本时开始提供,同时iReport也从1.1.0开始支持CrossTabs。
Jasperreports的CrossTabs工具允许对行和列的数据进行分组、汇总和自定义每一个cell里的内容。
填充CrossTab的数据可以来自主报表里的dataset或来自subDataset。
使用iReport里提供的向导我们可以简单快速的创建功能强大的交叉报表组件。
一个CrossTabs本质上是一个表格,行和列的数量取决于填充这个表格的数据。
行和列也可以在groups里做聚合操作。
对于每一个行或列的group我们都可以得到一个细节信息和一个可选的行列数据的汇总。
16.1 交叉表向导 (Crosstab wizard)为了说明怎么让一个crosstab工作起来,我们将使用向导创建一个crosstab,当我们在工具条里选择crosstab元素并将其添加到报表中时crosstab的向导会自动启动。
还是以DoradoSample里提供的hsql数据里的employee报为例,我们使用包含下面查询语句的空报表开始:Select * from employee我们把crosstab放在报表的底部:summary band图16.1在第一步里我们需要选择一个dataset来填充crosstab,我们这里使用主报表里提供的dataset,点击下一步继续。
图16.2在第二步里我们需要定义至少一个行分组.我们这里选择对所有记录使用DEPT_ID进行分组。
这样就意味着crosstab的每一行将会采用一个明确的部门编号,这样JasperReports将会使用部门编号对数据集里的数据进行重新整理计算。
Composite 复合报表型的.就是可以由几个DW组合成的Crosstab 交叉报表型. 这个很少用.Freeform 自由风格,就是里面的列可以自已改变的. 常用Graph 统计图,你知道的Grid 网格,类似EXCEL的最常用Group 分组的.有分组小计要用的那种常用Label 标签的就是一个大格子一个大格子排列显示的那种N-Up 分栏显示的.这个少用.Tabular 列表的,这个列表不是太好用.这个也少用★SetTransObject语法:dwcontrol.SetTransObject ( transaction )功能:给数据窗口或者datastore控件dwcontrol设置事务对象transaction,缺省事务对象是SQLCA。
返回值:成功设置事务对象则返回1,执行过程中发生了错误则返回-1,有任意参数为Null时返回Null。
★Retrieve语法:dwcontrol.Retrieve ( {, argument, argument . . . } )功能:使用数据窗口控件的当前事务对象检索数据库中的数据。
如果数据窗口控件对应的数据窗口对象定义了检索参数,则应该在该函数中指定检索参数,参数的个数和数据窗口对象的检索变量个数相等,对应的数据类型相兼容。
返回值:返回数据窗口控件主缓存区(PrimaryBuffer)中的记录数,如果检索数据时发生错误则返回-1,如果任意参数为Null则返回Null*该函数的参数和数据窗口对象定义的参数的顺序要相同,类型要兼容。
个数不能少于数据窗口对象定义的参数,即可以等于和多于数据窗口对象定义的参数,多的参数忽略。
★DeleteRow语法:dwcontrol.DeleteRow ( row )功能:删除数据窗口dwcontrol中的第row行数据,如果row为0则表示删除当前行的数据。
返回值:执行成功则返回1,执行错误则返回-1,如果任意参数为Null则返回Null。
PB中如何得到Crosstab中的列名
Crosstab是数据窗口中一种用于统计、分析数据的显示风格,其含义为Cross Tabulation,即横向制表。
它可以将检索到的数据分类或分组,进行累计求和或求平均值等运算,编制统计表格。
---- 但是,开发者在使用Crosstab数据窗口时会碰到一个问题:如果开发者想对其中的列内容进行处理时,不能用通用的方法得到Crosstab中的列名,使该操作无法运行。
这是因为:Crosstab数据窗口中行列定义不同于其它的数据窗口,而且其列数是变化的。
因此要得到Crosstab中的列名必须采用其它办法。
---- 下面以一个统计各工资段作者人数,按男女性别分别统计的Crosstab数据窗口静态风格为例探讨得到Crosstab中的列名。
---- 1、选择显示风格,定义数据源后,选择表”auths”中的列”author_code”、”salary”和”sex”;用鼠标拖动Source Data列表框中的“sex”列到Columns列表框中,使“sex”列成为数据窗口的纵向统计列;用鼠标拖动Source Data列表框中的“salary”列到Rows列表框中,使“salary”列成为数据窗口的横向统计列,将salary改为int(salary/100)*100;用鼠标拖动Source Data列表框中的“author_code”列到列表框中,使“count(author_code for Crosstab)”列成为数据窗口的统计值,此时“CrossTab Definition”对话框显示如下:(图略)
---- 2、单击OK按钮,数据窗口显示如下:(图略)
---- 3、Crosstab数据窗口中的列名
---- Crosstab显示风格有静态和动态。
如采用静态风格,则在“CrossTab Definition”对话框中取消选中“Rebuild columns at runtime”复选框。
数据窗口的列名在Detail栏中,有一定规律可循:
---- 第一栏的列名分两种情况:一、“CrossTab Definition”对话框中的所选的Rows的列名为表中的字段,如Rows=salary则第一栏的列名为”salary”;二、如“CrossTab Definition”对话框中的所选的Rows的列名为计算表达式,如int(salary/100)*100,则第一栏的列名均为”row_column”。
---- 其余各栏依次为所选Value的列名的排列,如Value为author_Code,则各栏依次”author_Code”,”author_code_1”, “author_code_2”,……栏的数目根据所选的Columns 所能产生的数目而定,如Columns=sex,则只有两栏”author_Code”,”author_code_1”;
---- 最后一列的列名为“grand_count_”+所选Value名,如在此例中为”grand_count_author_code”。
如采用动态风格,则在“CrossTab Definition”对话框中选中“Rebuild columns at runtime”复选框。
数据窗口的列名在Detail栏中:(图略)第一栏和最后一列的列名情况类似静态风格所述,也就不雷同了。
中间各栏的列名情况与静态风格有所不
同,依次为所选rows列名的排列,如rows为”salary”,在此例中各栏依次为”salary”,”salary_1”;。