参数化数据集查询语句

发布时间:2017/04/29 00:04 发布者:lenka.guo

返回博客中心

如上篇博客中所讲述的,数据源连接字符串可通过增加报表参数,从而进行动态改变,连接到不同的数据库当中去,今天我们主要来学习在ActiveReports中参数化数据集查询语句,同样的原理,用报表参数来接收外界的输入进而影响实际生成的数据。

 

1. 先定义好一个静态的数据集。如:


select * from Table1

2.  修改数据集的查询语句,使之成为一个使用参数的表达式,如:


="select * from " &  Parameters!tableName.Value

Oracle数据库注意:
库名和表名之间的小圆点,必须放在参数中,不能放在表达式的常数部分:
="select * from " &  Parameters!P1.Value & "JOBS" 这样可以
="select * from " &  Parameters!P1.Value & ".JOBS" 这样不行,提示table不存在。

SQL Server数据源,可能报表设计器不允许保存这样的动态查询语句,可用记事本打开rdlx文件,将<Query>部分的内容改为下面的形式:
<Query>
    <CommandText>="select * from " &amp;  Parameters!tableName.Value</CommandText>
    <DataSourceName>DataSource1</DataSourceName>
</Query>
然后再用设计器打开,即可预览效果。

注意:
SQL语句中完整的Table名构成是:服务器名.数据库名.对象所有者.对象 。
比如 SrvSql1.ErpDb.dbo.SalesOrders ,如果其中一部分要参数化,最好是参数的默认值为空字符串时,还能保证整个SQL语句是正确的。
比如说, Parameters!DBServer.Value & ".Table1 这个语句片段中,Table1是表名,前面直接冠以服务器名是不行的,缺少数据库名和dbo,
可改成 Parameters!DBServer.Value & "数据库名.dbo.Table1 这个样子。
注意双引号后的小圆点(.Table1这个字符串的第一个字符),最好放在参数值中,
这样,即使参数值为空串,表达式结果中,不会出来 from .数据库名.dbo.表名 这样的非法表名,
不带点的 from 数据库名.dbo.表名 应该就是合法的SQL。

还有一个,使用 服务器名. 这个前缀的前提是,数据源当前连接的数据库服务器中,
应该已经定义有LinkedServer,这个是SQL Server的要求。
对于Oracle,也是类似,应该需要事先使用 Create DbLink语句创建好服务器之间的数据库链接。
比如说,数据源当前连接到 SvrSql1,参数化的SQL语句中需要查询 SvrSql2里面的数据库表,
那么必须事先使用SQL Server管理工具,在SvrSql1上使用sp_addlinkedserver创建好指向SvrSql2的服务器链接。

 

模板示例:

了解ActiveReports产品更多特性:

/developer/activereports

下载产品体验产品功能:

/download/?pid=16


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网