找回密码
 立即注册

QQ登录

只需一步,快速开始

KearneyKang 讲师达人认证 悬赏达人认证

超级版主

199

主题

6505

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
10806

圣诞拼拼乐微信认证勋章讲师达人悬赏达人元老葡萄

KearneyKang 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-7-10 11:53  /   查看:5815  /  回复:1

在进行报表设计时,经常会用到参数报表这时就会遇到一个参数传递的问题,当参数值为多值的时候,由于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 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、       运行结果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

1 个回复

倒序浏览
markolzc
注册会员   /  发表于:2018-11-23 12:17:43
沙发

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部