在数据查询系统中,我们常常会遇到精准查询和模糊查询。我们知道,对于关系数据库,使用精准查询可以直接在 sql 里面使用“where 字段 = 参数值”来过滤对应的数据,而要实现模糊查询,我们使用的就是 like 的形式。那么,在报表里面该如何使用 like 方式实现模糊查询来过滤数据呢?
下面,我们结合润乾报表自带的 hsql 数据库中的客户表,来做一个模糊查询的示例。
例如:在下拉框中通过模糊查询显示所有姓名里面带有“王”字的联系人,当用户选择后进行精准查询。并且结果列表在第一次展现全部数据。如下图所示:
这是一种常见而且体验不错的报表需求,我们该如何实现呢?
操作非常简单的哦,下面我们一起来动手操作一下吧 ~
第一步:连接数据源
先连接我们自带的 demo 数据库,别忘了先启动示例数据库哦 ~
第二步:新建数据集
1)Sql 语法为:SELECT * FROM 客户 WHERE 客户. 联系人姓名 like ? or ? is null(因为我们想第一次查询前在结果列表中展现全部数据,所以我们需要写上 or ? is null ,也就是参数为空的时候查询全部数据。)
2)设置数据集的参数。格式为 ”%”+ 参数名称 +”%”。 (注意:我们对同一个字段“联系人姓名”写了两个问号,所以需要写两个相同的参数。)
如下图所示:
第三步:设计报表并在报表—参数增加跟数据集名称相同的参数:
第四步:保存报表,并将报表名称设置为 test.rpx
第五步:建立参数模板
1) 新建数据集,只取出来客户表中的联系人姓名字段即可。
2) 为 B1 单元格设置单元格编辑风格和 web 变量名称
第六步:保存参数模板,并设置报表名称为 test_arg.rpx
(注意:参数模板的名称要跟主报表的名称一致,并且加上 _arg 。然后将参数模板保存在和主报表相同的目录下面)
第七步:启动 tomcat,发布报表。
展现效果为:
试验一下,我们在单元格输入一个“王”字,可以看到,下拉框中会对应显示所有姓名中包含“王”的联系人。
直接点击查询展现效果为:
或者是输入“王”之后,选择下拉清单里面的任何一个联系人,点击查询即可过滤数据。
以上就是我们在报表中模糊查询的使用方法,有没有很简单?有需求的小伙伴们赶紧试试看吧 ~~
嘘 ~~ 最后告诉大家一个小秘密,由于数据库驱动的问题,如果要查询的联系人姓名字段中有 null 数据,在第一次查询全部数据时可能会查不到全部的数据,也就是为空的数据无法显示。这时,我们需要将模糊查询的数据集的参数改为如下格式:(第二个参数不用百分号拼接的方式去写,其他不需要改动)。