【问题标题】:Crystal Reports parameterized queriesCrystal Reports 参数化查询
【发布时间】:2010-02-02 03:18:39
【问题描述】:

我工作的公司正在将 MacolaES 用于 ERP 系统。 SQL Server 数据库的结构使得当事物不再被视为活动时,它们会从一组“活动”表移动到一组“历史”表。这有助于保持“活动”表足够小,以便查询快速返回。另一方面,历史表是巨大的。适当的列在这些表中被索引,如果您查询特定的内容,它会快速返回。

问题是当您制作水晶报表时,它会提示用户输入参数。由于我不知道的原因,Crystal 参数不会转换为 SQL 参数,因此您最终会查询从内部连接的订单标题历史记录表中的所有内容到订单行历史记录表中的所有内容,这会导致超过 800 万行。

有没有办法让 Crystal Reports 使用 SQL 查询中的参数,而不是加载所有记录并在事后进行过滤?我在某处读到存储过程应该可以工作,但我很好奇是否可以使用普通的参数化查询来节省我的时间。

这里是选择公式:

(
    trim({Orderheader.ord_no}) = {?Order No}
)
and
(
    {Orderheader.ord_type} = 'O'
)
and 
(
    {orderlines.ord_type} = 'O'
)

【问题讨论】:

  • 这取决于记录选择公式的类型以及是否可以转换为sql where子句。您是否使用了任何不能转换为 sql 的特殊运算符,例如 if 或任何水晶函数?
  • 您是否尝试从您的公式中删除修剪?
  • 修复了它,但是因为订单号是 varchar(8) 并且我们所有的订单号只有六个字符长,我认为这对我们不起作用。看起来我必须使用存储过程。我给了你积分。
  • @Scott:阅读我放在答案底部的 SQL 表达式链接。这将允许您使用 RTRIM SQL 函数并仍然将公式推送到数据库。
  • 太棒了。我也将开始在其他报告中使用 SQL 表达式。

标签: stored-procedures crystal-reports parameters


【解决方案1】:

在 Crystal Reports 顶部菜单中,转到 Report / Selection Formulas / Record... 您可以在其中添加类似于以下内容的公式:

{table.field1} = {?Parameter1} and {table.field2} = {?Parameter2}

这会将条件添加到报表将用于提取行的 SQL 查询的 where 语句中。

要验证报表用于提取数据的 where 语句中的条件是什么,您可以转到菜单数据库/显示 SQL 语句。这样您就可以验证报告是否使用了过滤器中的参数。

Crystal Reports 8.5 用户指南提及以下提示:

要下推记录选择,您 必须选择“使用索引或服务器 “报告选项”对话框中的“速度” 框(在“文件”菜单上可用)。

在记录选择公式中,避免使用数据 字段的类型转换 不是参数字段。例如, 避免使用 ToText() 来转换 数字数据库字段到字符串 数据库字段。

您可以下推一些记录选择公式 使用常量表达式。

您的公式在字段上具有 TRIM 函数。针对字段的函数不允许 Crystal 将公式推送到数据库,因为它不是常量表达式。

如果您确实需要修剪订单号字段,您应该使用SQL Expressions

参考资料: 看看这个article

【讨论】:

  • 我确实有一个参数,但它没有显示在 SQL 语句中。
  • 我在 Crystal Reports 中运行了一个测试,并将条件放在 where 语句中。我正在使用 Crystal 9。您使用的是什么版本的 Crystal?我去了文件/报告选项,这在我的报告中进行了检查:数据库服务器不区分大小写,用户索引或服务器速度,创建组树。你检查了哪些?
  • 我们使用的是 8.5 版。我在“报告选项”屏幕中检查了以下内容:将 NULL 转换为默认值、翻译 DOS 字符串、翻译 DOS 备忘录、使用索引或服务器提高速度、更多报告引擎错误消息、不区分大小写的 SQL 数据、选择不同的数据进行浏览,创建组树,并在刷新时显示警报。
  • 我不确定是版本问题还是公式有问题。我在我的答案中添加了一篇关于创建记录选择公式以优化数据库访问的文章。您是否使用任何公式来转换日期或类似的东西?
  • 我尝试了文章中建议的一些方法,但没有成功。我已将选择公式添加到我的问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多