java报表工具FineReport的SQL编辑框的语法简介

感谢大家捧场,这里继续分享关于SQL编辑框的一些语法心得总结,因为数据集定义的面板,也是FineReport报表中最常用的模块之一。

1.我理解的执行过程。

这里其实是生成一个字符串,FineReport将这个字符串通过设置的数据连接传递到报表中执行。在这个过程中报表应该是先把报表规则的东西,替换成大家都认得的字符串后,对应的数据库执行完,会反馈值,有可能返回报错信息,也有可能返回数据集。这个报错信息应该是对应的数据库给的。所以说同样的sql语句,不同的数据库用不同的sql语法来执行有可能是不同的结果。比如select ‘sdf‘在access和sqlserver正常显示,在oracle就抛错。用select version()或者show status或者show tables能在mysql的数据集定义里正常执行,其他则不行。

sql中的and和or要和公式区别开,有人可能在公式里面把&&用成and。还有公式里面的或||在oracle中是字符串的连接符。

2.sql中调用公式

报表通过公式和参数实现与sql语句的交互。

公式放在框架${}中。于是${"select* from t1"}其实就等价于select *from t1。

数据集中用公式的难点在于拼接起来比较繁琐。

我想很多人接触到的第一个例子应该是帮助文档上参数为空返回全部的sql语句:SELECT *FROM 订单 where 1=1${if(len(area) == 0,"","and 货主地区 = ‘" + area + "‘")} ${if(len(province) ==0,"","and 货主省份 = ‘" + province + "‘")}

下面举个调用FR中format的例子:

select${"‘"+format(p1,"yyyy-MM-dd")+"‘"} from aa

如果漏掉format函数前后的单引号,就会得到错误的结果。其实有的时候可以通过一些方法简化处理的,比如再声明一个变量p2,引用这个变量的定义是format(p1,"yyyy-MM-dd"),这时候上面的sql就变成了select ‘${p2}‘ from aa 【当然如果没有加引号的话那p2就被解析为一个字段名了,这是动态字段的实现方法了】

对于存储过程,数据集定义这地方其实是支持call和exec的调用方法的。

3.sql中调用sql函数

前面说到,sql语句其实是字符串。其实是可以从数据库调用字符串作为一个sql语句进行操作的。这个要用到sql函数了,说例子:

=sql("FRDemo",sql("FRDemo","selecttesttext from test where id=2",1,1),1,1)

test这个表里面的第二条数据的testtext字段就是字符串 select top 1 地区 from 销量

可以把这个字符串用在sql公式中作为sql语句执行

数据集定义那边这么写是可以的 ${sql("FRDemo","select testtext from test where id =2",1,1)}

时间: 2024-10-11 09:52:25

java报表工具FineReport的SQL编辑框的语法简介的相关文章

web报表工具FineReport的SQL编辑框的语法简介

感谢大家捧场,这里继续分享关于SQL编辑框的一些语法心得总结,因为数据集定义的面板,也是FineReport报表中最常用的模块之一. 1.我理解的执行过程. 这里其实是生成一个字符串,FineReport将这个字符串通过设置的数据连接传递到报表中执行.在这个过程中报表应该是先把报表规则的东西,替换成大家都认得的字符串后,对应的数据库执行完,会反馈值,有可能返回报错信息,也有可能返回数据集.这个报错信息应该是对应的数据库给的.所以说同样的sql语句,不同的数据库用不同的sql语法来执行有可能是不同

java报表工具FineReport的公式编辑框的语法简介

FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式,虽然那个编辑框非常不像. 简单的说下自己感觉的公式要注意的几个地方: 1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)). 2.switch语句也是,具体函数我不说了. 3.对于判断用单等号和双等号都行. 4.对于

web报表工具FineReport的公式编辑框的语法简介

FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式,虽然那个编辑框非常不像. 简单的说下自己感觉的公式要注意的几个地方: 1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)). 2.switch语句也是,具体函数我不说了. 3.对于判断用单等号和双等号都行. 4.对于

web报表工具FineReport的JS编辑框和URL地址栏语法简介

JS编辑框: 1.FineReport的js. 作为一款BS产品,browser端的JavaScript是必不可少的. FineReport中的js是已经调用了finereport.js的. 大家知道,预览报表时,报表servlet会将cpt模板转为html,在这个html的head头部中会引入FineReport的js,这个finereport.js中包含了许多内置的function以及一些公有的属性,不管在模板中还是其他网页中,只要引入了finereport.js,就能够通过FR.xxx的形

java报表工具finereport的公式使用心得总结

FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式,虽然那个编辑框非常不像. 简单的说下自己感觉的公式要注意的几个地方: 1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)). 2.switch语句也是,具体函数我不说了. 3.对于判断用单等号和双等号都行. 4.对于

java报表工具FineReport常用函数的用法总结(文本和日期函数)

FineReport是比较常用的java报表开发工具,本文总结了常用函数中的文本和日期函数 文本函数 CHAR CHAR(number):根据指定数字返回对应的字符.CHAR函数可将计算机其他类型的数字代码转换为字符. Number:用于指定字符的数字,介于1Number:用于指定字符的数字,介于165535之间(包括1和65535). 示例: CHAR(88)等于"X". CHAR(45)等于"-". CODE CODE(text):计算文本串中第一个字符的数字代

java报表工具FineReport常用函数的用法总结(数学和三角函数)

ABS ABS(number):返回指定数字的绝对值.绝对值是指没有正负符号的数值. Number:需要求出绝对值的任意实数. 示例: ABS(-1.5)等于1.5. ABS(0)等于0. ABS(2.5)等于2.5. ACOS ACOS(number):返回指定数值的反余弦值.反余弦值为一个角度,返回角度以弧度形式表示. Number:需要返回角度的余弦值. 备注: 函数的参数必须在-1和1之间,包括-1和1. 返回的角度值在0和Pi之间. 如果要把返回的角度用度数来表示,用180/PI()乘

java报表工具FineReport常见的数据集报错错误代码和解释

在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释,如果有说的不准确的地方,也请各位小伙伴纠正一下. NS-war-remote=错误代码\:1117 压缩部署不支持远程设计 NS_LayerReport_MultiDs=错误代码\:1101 行式引擎不支持多数据源展示 NS_LayerReport_RowCol=错误代码\:1102 行式引擎不支

Java报表工具FineReport导出EXCEL的四种API

在实际的应用中会经常需要将数据导出成excel,导出的方式除原样导出还有分页导出.分页分sheet导出和大数据量导出.对于excel 2003版,由于限制了每个sheet的最大行数和列数,大数据量导出时会默认时分多个sheet,而excel2007不会出现这样的问题.这些导出方式在JAVA程序中分别有不同的接口来实现:   1.原样导出 原样导出就是不预览直接导出excel 其程序接口代码如下:  outputStream = new FileOutputStream(new File("E:\