KearneyKang 发表于 2018-7-10 11:53:53

参数报表多值传参或多行传参


在进行报表设计时,经常会用到参数报表这时就会遇到一个参数传递的问题,当参数值为多值的时候,由于ODBC数据源不支持多值参数的传递,这样就会出现查询结果不存在的情况。今天我就来给大家提供一种思路来解决这个问题,那就是通过动态拼接SQL 语句的方法绕过ODBC不支持多值传参的问题。 该方法的核心就是把传入的参数用Split函数进行一个分割,具体操作是通过一个脚本代码,然后把传入的多值参数进行一个分割。然后再进行SQL语句的查询。 多值传参 具体操作步骤: 1、新建一张RDL报表,然后添加一个参数,参数值选择为多值或者多行。2、添加数据源和数据集 数据集中查询语句的写法,通过用Code.ArrayToString()函数调用脚本:="select* from Test2 WHERE 业务编号 In ('" + Join(Split(Code.ArrayToString( Parameters!P1.Value ),","), "', '") + "')" 3、脚本的编写,给每个参数值后加一个逗号,便于用Split()函数分割:FunctionArrayToString(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 Function4、运行结果: 多行传参 操作步骤: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、       运行结果:

markolzc 发表于 2018-11-23 12:17:43

本帖最后由 markolzc 于 2018-11-23 12:23 编辑

页: [1]
查看完整版本: 参数报表多值传参或多行传参