Crystal Reports 8.5显示报表页脚上的参数的多值

时间:2014-01-06 20:11:35

标签: sql crystal-reports

在Crystal Reports 8.5中,当我为多值设置参数时,用户输入90654-90658A。通常我会使用Join(),但是这不仅仅是文本而是数字我尝试了一些但没有结果。

    Local NumberVar i;
Local NumberVar j;
Local StringVar param_values;

if 0 in {?CPT} then
  "CPT #s: All CPTs"
else
(
  for i := 1 to UBound ({?CPT}) do
    for j := Minimum ({?CPT}[ i ]) to Maximum ({?CPT}[ i ]) do
      param_values := param_values + "," + CStr (j, "#");
  "CPT #s: " + Mid (param_values, 2)
)

这适用于90654-90658,但当用户选择90654-90658A时,它会失败。

此外,选择条件不会传递给使用正确的where子句发送到SQL的查询中的SQL。意思是没有迹象表明我甚至要求在哪里。它应该在select for sql a中显示table.data> =''90654'和table.data< ='90658A'

我迷失了我的错误。任何帮助都会很棒这是我第一次在这个网站上寻求答案,但我没有收到任何有关此请求的帮助。

由于

2 个答案:

答案 0 :(得分:0)

我尝试使用Xtreme.mdb数据库进行类似的查询,引用Customer表。我创建了一个字符串,范围参数,它接受多个值(即多个范围)。

当我提供两个范围时,生成了以下查询:

 SELECT `Customer`.`Postal Code`
 FROM   `Customer` `Customer`
 WHERE  (
          (`Customer`.`Postal Code`>='04000' AND `Customer`.`Postal Code`<='04999') OR
          (`Customer`.`Postal Code`>='55000' AND `Customer`.`Postal Code`<='55999')
        )

如您所见,Crystal Reports将构建必要的BETWEEN>= <=语句。

在你的情况下,试试:

( "0" IN {?CPT} OR {TABLE.FIELD} IN {?CPT} )

如果需要,您可以调整公式字段以显示参数的值。

答案 1 :(得分:0)

我非常感谢每个人的投入,但我能够解决这个问题。对于记录选择我输入以下内容。 CStr({@ MinCPT})中的{TABLE.FIELD}到CStr({@ MaxCPT})。在我创建两个公式后,这拉了范围。一个MinCPT和另一个MaxCPT。这是公式。左(ToText(最小({?CPT})),2)&amp;中(ToText(最小({?CPT})),4,3)和Max相同。该报告现在运作良好。

再次感谢。