在进行报表设计时,经常会用到参数报表这时就会遇到一个参数传递的问题,当参数值为多值的时候,由于ODBC数据源不支持多值参数的传递,这样就会出现查询结果不存在的情况。今天我就来给大家提供一种思路来解决这个问题,那就是通过动态拼接SQL 语句的方法绕过ODBC不支持多值传参的问题。
该方法的核心就是把传入的参数用Split函数进行一个分割,具体操作是通过一个脚本代码,然后把传入的多值参数进行一个分割。然后再进行SQL语句的查询。
多值传参
具体操作步骤:
1、 新建一张RDL报表,然后添加一个参数,参数值选择为多值或者多行。
2、 添加数据源和数据集
数据集中查询语句的写法,通过用Code.ArrayToString()函数调用脚本:
="select \* from Test2 WHERE 业务编号 In ('" +
Join(Split(Code.ArrayToString( Parameters!P1.Value ), ","), "', '") + "')"
3、 脚本的编写,给每个参数值后加一个逗号,便于用Split()函数分割:
Function ArrayToString(list As Object()) As String
Dim re = ""
For Each item As String In list
If item Is Nothing Then
Continue For
End If
If re <> "" Then
re += ","
End If
re += item
Next
Return re
End Function
4、 运行结果:
多行传参
操作步骤:
1、 第一步同上,然后参数值选择多行。
2、 参数传递:
从Excel中拷贝出来的多个单元格内容之间,除了ASCII码10(换行)之外,还有ASCII码13(回车),因此需要把这个13去掉。所以参数的表达式的写法应该如下:
=Split(Replace([\@hawblist], chr(13),""),chr(10))
3、 数据集中SQL语句的写法如下:
其实主要思想就是通过Replace函数和Split函数进行一个参数的转换,然后进行SQL语句的编写来实现参数的传递。
="select \* from Test2 WHERE 业务编号 In ('" + Join(Split(Replace(
Parameters!P1.Value, chr(13),""),chr(10)), "', '") + "')"
4、 运行结果: