如何针对多个字符串参数或字符串数​​组过滤数字字段?

时间:2009-08-10 19:44:28

标签: crystal-reports

我们有一个Crystal Report,可让用户选择要过滤的几个字段中的哪一个。在记录选择公式中,我们有如下代码:

if {?First Selection Type} = "CUSTOMER CODE" then {foo.CustCode} in {?First Selection Value} 
 else if {?First Selection Type} = "ORDER" then {bar.OrderNum} in {?First Selection Value}
 ...

{?First Selection Value}参数定义为多字符串参数,因为某些选项需要使用字符串。

不幸的是,bar.OrderNum字段是数字。

如果我尝试输入上面的代码,Crystal Reports会给出错误“此处需要数字范围”。

如果我将CStr({bar.OrderNum})保存而没有错误,但在生成SQL语句时不包含该条件,导致性能恶劣,因为它从数据库中提取每个订单并在客户端搜索它们。

如果我放ToNumber({?First Selection Value})CDbl({?First Selection Value}),则会出现错误“此数组必须下标。例如:Array [i]。”

我需要一些方法来使这个标准转到数据库服务器,而不会让参数更容易让用户感到困惑。

如果重要,我们对Progress OpenEdge 10.1B03数据库使用Crystal Reports 11.0.0.895。

1 个答案:

答案 0 :(得分:0)

我发现似乎有效的解决方案是使用以下表达式创建名为OrderNumStr的SQL表达式:

CAST("bar1"."SOrderNum" AS VARCHAR(10))

然后将记录选择更改为:

if {?First Selection Type} = "CUSTOMER CODE" then {foo.CustCode} in {?First Selection Value} 
 else if {?First Selection Type} = "ORDER" then {%OrderNumStr} in {?First Selection Value}
 ...

这至少将标准发送到服务器端,虽然它阻止数据库服务器使用索引,因此它并不理想。与以前相比,它仍然是一项巨大的性能改进。

P.S。 (我需要在数据库专家中将表从bar重命名为bar1以使SQL表达式起作用。但这可能是Progress特定的。)