Crystal Reports XI - 将csv输入字符串参数转换为数字数组,以便在记录选择公式中使用

时间:2009-09-10 04:05:36

标签: crystal-reports

我有一个我正在处理的报告,其中有一个输入参数(strSchoolIds),它是一串逗号分隔的唯一schoolId列表。我想将此字符串转换为数字数组,然后可以在记录选择公式中使用。这是我到目前为止所提出的。但每当我查看报告时,第一所学校就会被使用。

strSchoolIds的示例输入字符串可能是1,3,63,237,281
我想要的结果SQL查询与此类似

Select name, phone, numStudents 
from schools
where schoolId in (1,3,63,237,281) and active =1  

我目前的代码是:

StringVar Array schools := Split ({?strSchoolIds}, ",");
Local NumberVar arrLen := UBound( schools );
Local NumberVar i := 1;

NumberVar Array schoolIdsArray;
While i <= arrLen Do
(
    schoolIdsArray[i] = ToNumber(Trim(schools[i]));
    i := i + 1;
);


{Schools.schoolId} in schoolIdsArray
and {Schools.active} = 1;

4 个答案:

答案 0 :(得分:2)

我的代码类似于:

{Schools.schoolId} in schoolIdsArray

它运作正常。

您确定您的阵列已正确填充吗?

您可以通过添加新的未绑定字符串字段并将其放在公式

中来快速测试
ToText(schoolIdsArray[1]) + ", " + ToText(schoolIdsArray[2])

答案 1 :(得分:2)

我在使用Nathan Koop的建议并在其上进行调试之后想出来了。结果我需要Redim schoolIdsArray与字符串数组schools的arrLen,然后再添加值。

StringVar Array schools := Split ({?strSchoolIds}, ",");
Local NumberVar arrLen := UBound( schools );
Local NumberVar i := 1;
NumberVar Array schoolIdsArray;
Redim schoolIdsArray[arrLen];
While i <= arrLen Do
(
    schoolIdsArray[i] = ToNumber(Trim(schools[i]));
    i := i + 1;
);

{Schools.schoolId} in schoolIdsArray
and {Schools.active} = 1;

答案 2 :(得分:0)

在代码的这一部分中,我添加了冒号并且它有效...

schoolIdsArray[i] := ToNumber(Trim(schools[i])); 

希望这会有所帮助......

答案 3 :(得分:0)

发现上述代码中有一点错误:

  

schoolIdsArray [i] = ToNumber(Trim(schools [i]));

这应该是:

  

schoolIdsArray [i] := ToNumber(Trim(schools [i]));