KearneyKang 发表于 2020-12-10 11:17:22

如何实现动态SQL

ActiveReports支持数据库直连,可以在可视化数据查询窗口,根据自己的需求写查询语句,并根据自己的需求进行数据的过滤。在使用参数报表进行数据过滤的时候,有这样的业务场景,就是当参数值为空或者不存在的时候,不进行数据过滤。当参数有输入的值时候,根据参数输入值进行过滤。
具体步骤如下:
(本次讲解是使用SQLserver数据库进行的详细操作步骤的讲解,其他数据库可以根据该操作进行一个对应的参考)
1、进行数据源数据集的绑定
2、添加报表参数(因为你的参数可能存在空值,那么你的参数就勾选允许空值)


3、进行SQL语句的修改
="Select*from产品where 1=1 " & IIF(Parameters!供应商ID.Value= "", "", " and 供应商ID='" &Parameters!供应商ID.Value &"'")&""4、由于SQL语句在可视化查询器中没办法进行调试,进行这种查询语句的写法的时候给大家一个经验分享
为了更方便的看出实际进行数据查询的SQL语句,我们可以在报表中添加一个文本框组件,并将动态SQL语句粘贴到文本框中,然后再预览报表。

5、预览结果
   参数不存在时

参数有输入值时

6、具体的报表文件见附件


ly1331 发表于 2020-12-15 16:45:02

帮我解决一下我的问题,postgresql数据库

KearneyKang 发表于 2020-12-16 12:28:51

使用postgresql数据库是ODBC的驱动,参数的替代者是“?”号,但是参数的使用当查询语句不使用的时候,跟进"?"号没办法进行一一对应,因为参数要使用字符串那种形式。="select   *from 产品where1=1 and 类别ID='"& Parameters!P1.Value &"'"

无名无名 发表于 2022-5-23 11:20:41

KearneyKang 发表于 2020-12-16 12:28
使用postgresql数据库是ODBC的驱动,参数的替代者是“?”号,但是参数的使用当查询语句不使用的时候,跟进" ...

你好,我想问一下mysql如何实现?

Bella.Yuan 发表于 2022-5-23 11:40:30

无名无名 发表于 2022-5-23 11:20
你好,我想问一下mysql如何实现?

您好,mysql可以这样实现:
      

无名无名 发表于 2022-5-23 15:01:59

Bella.Yuan 发表于 2022-5-23 11:40
您好,mysql可以这样实现:

要是换种写法,比如 要是下拉框没有选择的话,默认找所有,选中的话,根据条件查询
where 1=1 " & IIF(Parameters!供应商ID.Value= "", "", " and 供应商ID='" &Parameters!供应商ID.Value &"'")&""
我用这种写法实现了,但是 我要是给表名起个别名的话,这种写法该怎么写????
比如select * from tabletb where 1=1 andtb.字段='';
要是字段为空的话就这样动态写select * from tabletb where 1=1

Bella.Yuan 发表于 2022-5-23 18:15:35

无名无名 发表于 2022-5-23 15:01
要是换种写法,比如 要是下拉框没有选择的话,默认找所有,选中的话,根据条件查询
where 1=1 " & IIF(P ...

您好,表起别名的话您的字段就是表别名.字段名,您试试,如果还不行的话,您重新发个帖子,我们在新贴上帮您解决。

工作狂: 发表于 2024-2-28 10:08:43

验证后会自动加一个="然后预览的时候报错

Eden.Sun 发表于 2024-2-28 11:31:02

工作狂: 发表于 2024-2-28 10:08
验证后会自动加一个="然后预览的时候报错

您不用在sql前面加 = 的。帖子中使用的版本比较老。所以在写sql的时候需要通过 = 来进行表示。

Eden.Sun 发表于 2024-2-28 11:37:56

Eden.Sun 发表于 2024-2-28 11:31
您不用在sql前面加 = 的。帖子中使用的版本比较老。所以在写sql的时候需要通过 = 来进行表示。
咱们在您的这个帖子上解决您的问题哈
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=203409
页: [1] 2
查看完整版本: 如何实现动态SQL