在Crystal Reports中,您可以将SQL直接作为字符串传递给报表的参数,并在运行报表时解析SQL。
例如,假设您要安排在每月月初运行的报告,以查找与上个月相关的数据。特定报告的查询可能如下所示:
SELECT
sum(jobid) jobs
FROM
job
WHERE
created_date >= {?StartDate}
and created_date < {?EndDate}
您可以将参数设置为字符串并将以下SQL传递给每个参数,而不是将StartDate和EndDate参数设置为日期字段并且必须每月更新发送到报表的参数:
StartDate = add_months(trunc(sysdate, 'mm'), -1)
EndDate = trunc(sysdate, 'mm')
这样,每次计划的报告运行时,它都会自动确定要运行的正确日期。它的工作原理是因为Crystal报表以文字形式传递参数而不是'trunc(sysdate,'mm')'。
是否可以将SQL传递给这样的BIRT报告参数?我正在使用BIRT plug-in for Eclipse并继续获取ORACLE错误,建议BIRT将参数作为带有单引号的SQL字符串传递给查询。
答案 0 :(得分:1)
我认为你不想这样做(这是可能的,但不可取)。您打开报告直到SQL注入攻击。所以我有资格回答你的问题,如果你真的想这样做,你可以在数据集open事件中设置“this.query”到你的参数值。
更重要的是,查看问题的根源。你用的是哪个司机?最终,驱动程序准备并执行BIRT的查询。你能成功使用同一个驱动程序在BIRT外执行查询吗?另一个要查看的地方是报告中设置的参数。参数是强类型的吗?它需要强类型化以确保它可以在为“?”提交时正确插入到查询文本中您在根查询中拥有的占位符。
祝你好运!