在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'
我迷失了我的错误。任何帮助都会很棒这是我第一次在这个网站上寻求答案,但我没有收到任何有关此请求的帮助。
由于
答案 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相同。该报告现在运作良好。
再次感谢。