润乾报表实用案例解析

更新时间:2023-04-28 08:40:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司润乾报表4.0实用案例解析

北京润乾信息系统技术有限公司

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

目录

第1章常规报表 (4)

1.1 简单报表 (4)

1.1.1 网格式(列表式)报表 (4)

1.1.2 网格式+合计报表 (13)

1.1.3 带图片的网格式报表 (19)

1.1.4 自由格式的报表 (23)

1.1.5 带图片的自由格式报表 (27)

1.2 汇总报表 (33)

1.2.1 分组报表 (33)

1.2.2 多层分组汇总报表 (41)

1.2.3 多层分组条件汇总报表 (47)

1.2.4 交叉报表 (54)

1.2.5 多层交叉报表 (60)

1.2.6 多层交叉汇总报表 (63)

1.3 参数报表 (67)

1.3.1 带参数的报表 (67)

1.3.2 参数模板 (71)

1.3.3 带数组参数的报表 (73)

1.3.4 带宏的报表 (80)

1.4 多区域的报表 (91)

1.4.1 有头标题、报表头、尾标题的报表 (91)

1.4.2 有页眉页脚的报表 (98)

1.4.3 在页眉页脚显示页码 (100)

1.4.4 在头标题显示页码 (103)

1.5 主子报表 (105)

1.5.1 嵌入式主子报表 (105)

1.5.2 引入式主子表 (113)

1.6 图形报表 (115)

1.6.1 柱型图(及其他同一模型的图形) (115)

1.6.2 时序状态图 (125)

1.6.3 时间走势图 (127)

1.6.4 双轴柱线图 (130)

1.6.5 雷达图 (134)

1.6.6 甘特图 (135)

1.6.7 仪表盘 (139)

1.6.8 分组统计图 (142)

1.6.9 交叉统计图 (145)

1.7 填报报表 (148)

1.7.1 网格式填报 (148)

1.7.2 交叉式填报 (151)

1.7.3 分组式填报 (154)

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

1.7.4 自由格式填报 (156)

1.7.5 下拉日历 (160)

1.7.6 下拉列表 (161)

1.7.7 图片上传 (162)

1.7.8 下拉树 (165)

1.7.9 多个下拉列的关联 (168)

1.7.10 自动计算 (170)

1.7.11 合法性检查 (173)

第2章非线性报表 (176)

2.1 多源分片 (176)

2.1.1 多片横向扩展报表 (176)

2.1.2 多片纵向扩展报表 (177)

2.1.3 单表式主子报表 (178)

2.2 不规则分组 (179)

2.2.1 按段分组报表 (179)

2.2.2 不完全分组的例子 (184)

2.2.3 重复分组的例子 (185)

2.3 动态跨行组运算 (186)

2.3.1 占比报表 (186)

2.3.2 累计运算报表 (188)

2.3.3 同期比报表 (190)

2.3.4 排名报表 (191)

2.3.5 动态序号 (192)

2.3.6 动态多级序号 (193)

2.3.7 多层分组动态连续序号 (194)

2.4 多源填报 (195)

2.4.1 主子表填报 (195)

2.4.2 多个主子表填报 (199)

2.4.3 多源分片填报 (201)

第3章交互/查询/分析 (203)

3.1.1 通用查询 (203)

3.1.2 超链接的例子 (204)

3.1.3 钻取的例子 (205)

3.1.4 点列标题排序 (206)

3.1.5 旋转的例子 (207)

3.1.6 切片的例子 (208)

第4章联系方法: (213)

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司第1章常规报表

1.1 简单报表

1.1.1网格式(列表式)报表

报表特点描述:

网格式报表又称作列表式报表,其特点就是简单的把一个二维视图罗列出来,可能会加上标题、表头等等

报表样式举例:

样例1:

这张报表的特点是简单罗列了员工信息,并且加上了字段的标题

样例2:

这张报表的特点是不仅仅罗列了员工信息,还增加了漂亮的报表标题和表头,表头还采用了漂亮的双线

案例解析1:

实现如下图所示的报表

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

注意点:日期的格式为yyyy-MM-dd

物理表结构为:

create

"CONTRACT"(

---合同表

table

"CONTRACTNO" CHAR(20), ---合同号

"SIGNDATE" TIMESTAMP, ---签署时间

"CUSTOMERID" CHAR(10), ---客户ID

"TRANSPORTDATE" TIMESTAMP, ---到港时间

"TRANSPORT" CHAR(10), ---港口

"TRANSPORTMETHOD" CHAR(1), ---运输方案

"AMOUNT" DECIMAL(16,2), ---金额

"SALESMAN" CHAR(10), ---卖方

"PAYMENT" CHAR(1), ---应付金额

"FINISHED" CHAR(1), ---是否完成

"PAYAMOUNT" DECIMAL(16,2) ---共付金额

);

建表SQL:contract.sql

第一步:打开设计器,连接数据源

● 大部分时候,报表的数据来自数据库,因此做报表的第一步就是连接数据源

● 连上数据源后编辑报表,编辑数据集时编辑框能够列出数据库中的表名、字段名等供选

择,方便编辑

操作如下:点击 系统/数据源 菜单,弹出窗口如下图所示:

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

如果有已编辑好的数据源,则选择相应的数据源,点击连接按钮

如果没有已编辑好的数据源,则点击新建按钮,增加一个数据源,数据源的编辑界面如下:

我们选择关系型数据库,点击确定,然后进入下面的页面:

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

编辑时,先录入数据源名称,然后选择数据库类型和数据编码,之后才可以选择驱动和

url,更加详细的说明请参考《润乾报表用户手册》

第二步:新建报表

●新建报表的注意事项:新建报表的窗口中存在普通报表和填报或参数表单两个选项,

如果是汇总类型的报表,一般选择普通报表,如果需要填写的或者作为参数模板使用的,

选择填报或参数表单。

第三步:定义数据集

数据集SQL:

SELECT CONTRACT.CONTRACTNO,CONTRACT.SIGNDATE,CONTRACT.AMOUNT FROM CONTRACT

● 数据集是一个二维的视图,是报表的数据来源。数据集可以通过数据库的sql查询获得,

也可以来自其他异构的数据文件。报表运算引擎不关心数据集的数据来自哪里,始终基

于数据集的数据来运算报表。

● 因此,制作报表的第一步:定义数据集

第四步:定义表达式

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司1,在 A2单元格中输入: =ds1.Select(CONTRACTNO)

该表达式从数据源ds1中选取CONTRACTNO字段列的所有值, 不排序

2,在B2单元格中输入:=ds1.SIGNDATE

将B2单元格的显示格式设为:yyyy-MM-dd

3,在C2单元格中输入:=ds1.AMOUNT

●select函数说明

函数说明:

从数据集的当前行集中选取符合条件的记录

语法:

datasetName.select( {, desc_exp{, filter_exp{, sort_exp{,rootGroupExp}}}} ) datasetName.select( , , )//适用于不需排序或数据集中已排好序

参数说明:

select_exp:要选择的字段列名/列号,,也可以是表达式。

列号用#n表示,例如#0代表第0列,#1代表第1列,依此类推desc_exp: 指定数据排序的顺序,true表示降序排列,false表示升序排列。

filter_exp: 数据过滤表达式,如果全部选出,则此参数省略,仅用“,”占位。

sort_exp: 数据排序表达式。当此项为空时先检查desc_exp是否为空,如果为

空,则不排序,否则使用select_exp排序。

rootGroupExp 是否root数据集表达式

返回值:

一组数据的集合,数据类型由select_exp的运算结果决定

函数示例:

例1:ds1.select( name )

从数据源ds1中选取name字段列的所有值, 不排序

例2:ds1.select( #2, true )

从数据源ds1中选取第二个字段列的所有值并降序排列

例3:ds1.select( name,false,sex=='1')

从数据源ds1中选取性别为男性的name字段列的值并升序排列

例4:ds1.select( name, true, sex=='1', id )

从数据源ds1中选取性别为男性的name字段列的值并按id字段降序排列

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

● 显示格式:报表运算出来的数据,往往需要按照一定的格式进行展现,例如金额

1234.5678希望显示成¥1,234.56,日期2005/12/25希望显示成2005-12-25,百分比0.2345希望显示成23.5%等等

● 虽然对数据的显示格式有一定的要求,但是单元格里真实的数据不能改变,照样能够被

其他单元格引用,例如1234.5678

虽然显示成1,234.56,但是其他单元格引用时,引用的是1234.5678而不是1,234.56,否则会导致误差

● 显示格式的设置方法:

选中需要设置显示格式的单元格(可以批量选择),双击属性列表中的 显示格式,如下图所示:

双击后,弹出显示格式编辑对话框,如下图所示: 鼠标双击

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

选择相关的显示格式,也可手工敲入,点击确定,显示格式设置完成。

第五步:美化外观

将第1行行类型设为报表头,如图:

●报表头的作用:行类型属性中,包括分页页眉、头标题、报表头、分组表头、数据区等等,其中报表头的作用是:报表分页时能够每页重复;同时当报表数据很多时,预览后能够固定表头,表体拖动,方便阅读

第六步:保存预览

● 润乾报表模板保存时,和excel一样,一个模板就是一个文件,由用户自己管理。

● 保存的报表模板不含数据,只有表达式和属性定义。

● 使用时,打开模板,连接数据源,点击预览按钮或工具栏即可浏览运算后的结果

报表

● 预览后的结果报表也可以保存,此时保存的是报表格式和数据,不含表达式

案例解析2:

我们现在需要实现如下图所示的报表:

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

物理表结构为:

"CONTRACT"( ---合同表

table

create

"CONTRACTNO" CHAR(20), ---合同号

"SIGNDATE" TIMESTAMP, ---签署时间

"CUSTOMERID" CHAR(10), ---客户ID

"TRANSPORTDATE" TIMESTAMP, ---到港时间

"TRANSPORT" CHAR(10), ---港口

"TRANSPORTMETHOD" CHAR(1), ---运输方案

"AMOUNT" DECIMAL(16,2), ---金额

"SALESMAN" CHAR(10), ---卖方

"PAYMENT" CHAR(1), ---应付金额

"FINISHED" CHAR(1), ---是否完成

"PAYAMOUNT" DECIMAL(16,2) ---共付金额

);

建表SQL:contract.sql

第一步:打开设计器,连接数据源

第二步:新建报表

新建普通报表

第三步:定义数据集

数据集SQL:

SELECT CONTRACT.CONTRACTNO,CONTRACT.SIGNDATE,CONTRACT.AMOUNT FROM CONTRACT

第四步:定义表达式

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

1,在 A3单元格中输入: =ds1.Select(CONTRACTNO)

该表达式从数据源ds1中选取CONTRACTNO字段列的所有值, 不排序。

Select函数的说明

2,在B3单元格中输入:=ds1.SIGNDATE

对于签署时间我们只需要显示年月日,不需要小时分等,所以设置单元格显示格式将B3单元格的显示格式设为:yyyy-MM-dd

显示格式的说明

3,在C3单元格中输入:=ds1.AMOUNT

由于数据都是金额,且数值较大,应设置统一的显示格式。

将C3单元格的显示格式设为:¥#.#

同时,可对选中的格式串进行编辑,如不想显示¥,可将其删除。

显示格式仅仅用来对单元格的数据值进行格式化,例如:单元格的数据值如果是12345,显示格式是"#,##0.00",那么该单元格就显示成"12,345.00"

第五步:美化外观

将第1行行类型设为头标题,合并单元格A1,B1,C1。将字号选大,粗体

将第2行行类型设为报表头

● 头标题的作用:头标题和报表头在某些方面类似,都可以实现分页重复,都可以实现预

览时冻结,表体滚动,但是当报表横向扩展时,头标题适用定位拉伸的规则,而报表头适用单元格的扩展规则

● 定位拉伸规则:头标题的每一行均允许一个单元格设置“分页时伸缩”属性,数据区横

向扩展时,该单元格会被横向拉大;其右边的单元格向右挪动,始终保持相对右边的位置;其他单元格保持不变

● 如果没有单元格设置了“分页时伸缩”属性,会把该行最后一个单元格拉大;如果同一

行有多个单元格同时设置了该属性,只会拉大最右边的那个单元格

● 因此,为了保持头标题的标题居中,最好的办法是整行合并

第六步:保存预览

1.练习:实现如下图所示的报表:

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

注意:奇偶行背景色的交替变化和时间的显示格式。

物理表结构为:

"CONTRACT"( ---合同表

table

create

"CONTRACTNO" CHAR(20), ---合同号

"SIGNDATE" TIMESTAMP, ---签署时间

"CUSTOMERID" CHAR(10), ---客户ID

"TRANSPORTDATE" TIMESTAMP, ---到港时间

"TRANSPORT" CHAR(10), ---港口

"TRANSPORTMETHOD" CHAR(1), ---运输方案

"AMOUNT" DECIMAL(16,2), ---金额

"SALESMAN" CHAR(10), ---卖方

"PAYMENT" CHAR(1), ---应付金额

"FINISHED" CHAR(1), ---是否完成

"PAYAMOUNT" DECIMAL(16,2) ---共付金额

);

建表SQL:contract.sql

参见:1.1.1练习.raq

1.1.2网格式+合计报表

报表特点描述:

网格式报表又称作列表式报表,其特点就是简单的把一个二维视图罗列出来,可能会加上标题、表头等等。网格式报表如果存在数值型字段,往往会要求进行合计运算,或者是求平均、计数等等,此时需要在简单网格式的基础上增加一些计算列。

报表样式举例:

样例1:

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

这张报表的特点是在简单网格式报表的基础上,增加了平均值的计算,而且该平均值的计算放在报表的下方

样例2:

这张报表的特点是在简单网格式报表的基础上,增加了合计值计算,而且该合计值的计算放在报表的上方

案例解析1:

设计一个汇总运算在报表上方的例子,其中一些单元格可以设计成带数据格式的,例如金额显示成¥#,330.00,日期显示成yyyy-MM-dd,等,并说明显示格式如何设置

物理表结构为:

table

"CONTRACT"( ---合同表

create

"CONTRACTNO" CHAR(20), ---合同号

"SIGNDATE" TIMESTAMP, ---签署时间

"CUSTOMERID" CHAR(10), ---客户ID

"TRANSPORTDATE" TIMESTAMP, ---到港时间

"TRANSPORT" CHAR(10), ---港口

"TRANSPORTMETHOD" CHAR(1), ---运输方案

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司 "AMOUNT" DECIMAL(16,2), ---金额

"SALESMAN" CHAR(10), ---卖方

"PAYMENT" CHAR(1), ---应付金额

"FINISHED" CHAR(1), ---是否完成

"PAYAMOUNT" DECIMAL(16,2) ---共付金额

);

建表SQL:contract.sql

第一步:打开设计器,连接数据源

第二步:新建报表

新建普通报表

第三步:定义数据集

数据集SQL:

SELECT CONTRACT.CONTRACTNO,CONTRACT.SIGNDATE,CONTRACT.AMOUNT FROM CONTRACT

第四步:定义表达式

1,在 A3单元格中输入: =ds1.Select(CONTRACTNO)

该表达式从数据源ds1中选取CONTRACTNO字段列的所有值, 不排序

select函数说明

2,在B3单元格中输入:=ds1.SIGNDATE

将B3单元格的显示格式设为:yyyy-MM-dd 显示格式说明

3,在C3单元格中输入:=ds1.AMOUNT

将C3单元格的显示格式设为:¥#.# 显示格式说明

4,在C1单元格中输入:=sum(C3{})

将C1单元格的显示格式设为:¥#.# 显示格式说明

●缺省的汇总表达式:sum(C3{})是对C3扩展出的所有单元格的值求和,sum 函数括号中的

条件表达式是C3{},即C3 单元格扩展出的所有单元格。同理,如果需要对C3扩展出的所有

单元格求平均,其表达式为avg(C3{})

第五步:美化外观

将第1行、第2行的行类型都设为报表头,边框设为虚线。

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

● 美化外观:主要包括字体、字号、对齐方式、缩进、边框样式、行高列宽、文字颜色、

背景色等,这些属性中,除了边框不能通过表达式控制,其他属性都可以通过表达式控制

● 通过表达式控制缩进,可以实现扩展出来的不同行有不同的缩进效果;通过表达式控制

背景色,可以实现不同行有不同的背景色,例如单行红色双行蓝色等;通过表达式控制文字颜色,可以实现数据预警,例如超过一定数值的单元格显示成红色

● 如果对单元格的大小有严格限制,例如套打的情况,可以把单元格的尺寸调整属性设为

“缩小字体填充”;如果仅仅对列宽有限制,对行高没有限制,那么可以把单元格“自动折行”属性打勾

● 图片、统计图、条形码等单元格的缩进属性必须设为0,否则会被压缩变形

第六步:保存预览

1、案例解析2:

设计一个汇总运算在报表下方的例子,其中一些单元格可以设计成带显示值的,显示值可以从数据集中取,也可以是枚举型的,例如产品编码,根据产品码表的信息显示成对应的中文;性别0,1根据枚举显示成男、女,要详细说明这两者如何设置

物理表结构为:

"CONTRACT"( ---合同表

create

table

"CONTRACTNO" CHAR(20), ---合同号

"SIGNDATE" TIMESTAMP, ---签署时间

"CUSTOMERID" CHAR(10), ---客户ID

"TRANSPORTDATE" TIMESTAMP, ---到港时间

"TRANSPORT" CHAR(10), ---港口

"TRANSPORTMETHOD" CHAR(1), ---运输方案

"AMOUNT" DECIMAL(16,2), ---金额

"SALESMAN" CHAR(10), ---卖方

"PAYMENT" CHAR(1), ---应付金额

"FINISHED" CHAR(1), ---是否完成

"PAYAMOUNT" DECIMAL(16,2) ---共付金额

);

create table "CUSTOMER"(

"CUSTOMER_ID" CHAR(10), ---客户ID

"CUSTOMER_NAME" CHAR(20), ---客户名称

"TEL"

---电话

CHAR(10),

"FAX" CHAR(10), ---传真

"ADDRESS" CHAR(255), ---地址

"PROVINCE" CHAR(10), ---省份

CHAR(10), ---城市

"CITY"

"PC" CHAR(10),

---备注

CHAR(255),

"MEMO"

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司"CUSTOMERTYPE" CHAR(1) ---客户类型

);

建表SQL:contract.sql, customer.sql

第一步:打开设计器,连接数据源

第二步:新建报表

新建普通报表

第三步:定义数据集

数据集SQL:

ds1

SELECT

CONTRACT.CONTRACTNO,CONTRACT.SIGNDATE,CONTRACT.AMOUNT,CONTRACT. CUSTOMERID FROM CONTRACT

ds2

SELECT CUSTOMER.CUSTOMER_ID,CUSTOMER.CUSTOMER_NAME FROM CUSTOMER

第四步:定义表达式

1,在 A2单元格中输入: =ds1.Select(CONTRACTNO)

该表达式从数据源ds1中选取CONTRACTNO字段列的所有值, 不排序

select函数说明

2,B2单元格中输入:= ds1.CUSTOMERID

设B2单元格的显示值表达式:ds2.select1(CUSTOMER_NAME,CUSTOMER_ID==value()) 显示值说明

● Select1函数说明

函数说明:

从数据集当前行集中按顺序检索到符合过滤条件的第一条记录,返回其selectExp

语法:

datasetName.select1(selectExp{,filterExp{,rootGroupExp}})

参数说明:

selectExp 选出字段或表达式

filterExp 过滤条件

rootGroupExp 是否root数据集表达式

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司返回值:

数据类型不定,由selectExp的运算结果决定

特别说明:

当对数据集运用过滤条件后确定只剩一条记录时,虽然select和select1

的运算结果一样,但是select1运算效率高,因为他只要找到符合条件的记录,

就不继续检索了,而select要检索完所有的记录才返回。

示例:

例1:ds1.select1(name)

返回数据集ds1中第一条记录的name字段值

例2:ds1.select1(name,score>90)

从数据集ds1中检索出成绩大于90的记录,返回第一条记录的name字段值在以后的例子中,我们会经常在定义显示值时用到select1()函数。

3,在C2单元格中输入:=ds1.SIGNDATE

将C2单元格的显示格式设为:yyyy-MM-dd 显示格式说明

4,在D2单元格中输入:=ds1.AMOUNT

将D2单元格的显示格式设为:¥#.# 显示格式说明

5,在D3单元格中输入:=sum(C3{}) 汇总表达式说明

将D3单元格的显示格式设为:¥#.# 显示格式说明

第五步:美化外观

将第1行、第2行的行类型设为报表头,边框设为虚线。

美化外观

第六步:保存预览

2.练习:

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司实现如上图所示报表,另外金额汇总在下方如案例2

注意:客户类型显示值的设置使用枚举的方式

物理表结构为:

"CONTRACT"( ---合同表

table

create

"CONTRACTNO" CHAR(20), ---合同号

"SIGNDATE" TIMESTAMP, ---签署时间

"CUSTOMERID" CHAR(10), ---客户ID

"TRANSPORTDATE" TIMESTAMP, ---到港时间

"TRANSPORT" CHAR(10), ---港口

"TRANSPORTMETHOD" CHAR(1), ---运输方案

"AMOUNT" DECIMAL(16,2), ---金额

"SALESMAN" CHAR(10), ---卖方

"PAYMENT" CHAR(1), ---应付金额

"FINISHED" CHAR(1), ---是否完成

"PAYAMOUNT" DECIMAL(16,2) ---共付金额

);

create table "CUSTOMER"(

"CUSTOMER_ID" CHAR(10), ---客户ID

"CUSTOMER_NAME" CHAR(20), ---客户名称

---电话

CHAR(10),

"TEL"

"FAX" CHAR(10), ---传真

"ADDRESS" CHAR(255), ---地址

"PROVINCE" CHAR(10), ---省份

"CITY" CHAR(10), ---城市

"PC" CHAR(10),

"MEMO"

---备注

CHAR(255),

"CUSTOMERTYPE" CHAR(1) ---客户类型

);

---客户类型表

"CUSTOMERTYPE"(

create

table

CHAR(1), ---类型编码

"TYPEID"

CHAR(10) ---类型名称

"TYPENAME"

);

建表SQL:contract.sql,customer.sql,customertype.sql

参见:1.1.2练习.raq

1.1.3带图片的网格式报表

报表特点描述:

该报表的特点首先是个网格式报表,其次有一个字段是图片类型,该字段在数据库中是blob或者image之类的,在报表中展现就是个图片

报表样式举例:

样例1:

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

这张报表的特点首先是个网格式的报表,把记录简单罗列出来,其次有一个字段是图片类型,可以把图片字段展现出来

案例解析1:

设计一个可以展现图片的网格式报表,其中图片来自数据库的blob字段

物理表结构为:

create table "EMPLOYEE"( ---员工表

"EMPID" CHAR(10), ---员工ID

"EMPNAME" CHAR(10), ---姓名

"DEPT" CHAR(10), ---部门

"JOB" CHAR(1), ---岗位

"BIRTHDAY" TIMESTAMP, ---生日

"SEX" CHAR(10), ---性别

"DEGREE" CHAR(10), ---学位

"SPECIALTY" CHAR(30), ---专业

"TITLE" CHAR(10), ---职称

"MOBILE" CHAR(10), ---手机

"BP" CHAR(10), ---呼机

"TEL" CHAR(10), ---电话

"ADDRESS" CHAR(100), ---通讯地址

"INTIME" TIMESTAMP, ---开始时间

"EXPIRETIME" TIMESTAMP, ---到期时间

创新技术推动应用进步

ec77245d312b3169a451a4a6

北京润乾信息系统技术有限公司

"PHOTO" LONGV ARBINARY ---照片

);

建表SQL:employee.sql

第一步:打开设计器,连接数据源

第二步:新建报表

新建普通报表

第三步:定义数据集

数据集SQL:

SELECT EMPLOYEE.EMPID,EMPLOYEE.EMPNAME,EMPLOYEE.PHOTO FROM EMPLOYEE

第四步:定义表达式

1,在 A2单元格中输入: =ds1.Select(EMPID)

扩展方向:纵向扩展

该表达式从数据源ds1中选取EMPID字段列的所有值, 不排序

select函数说明

2,在B2单元格中输入: =ds1.EMPNAME

扩展方向:不可扩展

3,在C2单元格中输入: = ds1.PHOTO

扩展方向:不可扩展

将C2单元格的数据类型设为图片字段

● 单元格数据类型:单元格数据类型有普通文本、图片文件、图片字段、统计图、子报表……

等等,其中图片文件和图片字段在本质上是一样的,区别在于:图片文件单元格的图片来自文件,而图片字段单元格的图片来自数据库

● 当单元格的数据类型是图片字段时,其表达式必须是返回一个图片格式的byte[]数组,

例如访问数据集图片字段的表达式ds1.photo或者ds1.select1(photo),也可以是query(“select photo from ……”),其中的sql返回数据库的一个blob字段,也可以是自定义函数,该函数返回一个图片格式的byte[]数组等等。

● 当单元格的数据类型是图片文件时,单元格的数据值必须是一个图片文件的文件名,该

文件名在设计器中相对于系统/选项中的应用资源路径,在web上相对于应用的根目

本文来源:https://www.bwwdw.com/article/ee7q.html

Top