我工作的公司正在将MacolaES用于ERP系统。 SQL Server数据库的结构使得当事物不再被视为活动时,它们将从一组“活动”表移动到一组“历史”表。这有助于使“活动”表保持足够小,以便查询快速返回。另一方面,历史表是巨大的。在这些表中索引相应的列,如果查询特定的内容,则会快速返回。
问题在于您制作Crystal Report时,会提示用户输入参数。由于我不知道的原因,Crystal参数不会转换为SQL参数,因此您最终会选择从订单头历史表内部连接到订单行历史记录表中的所有内容的查询,这会导致超过800万行。 / p>
有没有办法让Crystal Reports使用SQL查询中的参数而不是加载所有记录并在事后过滤?我在某处读到存储过程应该可以工作,但我很好奇是否可以使用普通的参数化查询来节省我的时间。
以下是选择公式:
(
trim({Orderheader.ord_no}) = {?Order No}
)
and
(
{Orderheader.ord_type} = 'O'
)
and
(
{orderlines.ord_type} = 'O'
)
答案 0 :(得分:3)
在Crystal Reports顶部菜单中转到报告/选择公式/记录...在那里,您可以添加类似于的公式:
{table.field1} = {?Parameter1} and {table.field2} = {?Parameter2}
这会将条件添加到报表将用于提取行的SQL查询的where语句中。
要验证报告用于提取数据的where语句中的条件,您可以转到菜单数据库/显示SQL语句。这样,您就可以验证报告是否正在使用过滤器中的参数。
Crystal Reports 8.5用户指南提到以下提示:
要按下记录选择,你 必须选择“使用索引或服务器” “报告选项”对话框中的“速度” 框(可在“文件”菜单上找到)。
在记录选择公式中,避免数据 在字段上键入转换 不是参数字段。例如, 避免使用ToText()来转换 数字数据库字段到字符串 数据库字段。
您可以按下一些记录选择公式 使用常量表达式。
您的公式在字段上具有TRIM功能。针对该字段的函数不允许Crystal将公式推送到数据库,因为它不是常量表达式。
如果您确实需要修剪订单号字段,则应使用SQL Expressions。
<强>参考文献:强> 看看这个article。