Crystal reports Crystal Reports:根据子字符串值筛选的多值参数
我有一个Crystal Reports 2008文件,其中包含一个接受多个值的字符串参数。我需要在记录选择中使用此选项。我知道一般来说你可以做这样的事情Crystal reports Crystal Reports:根据子字符串值筛选的多值参数,crystal-reports,crystal-reports-2008,Crystal Reports,Crystal Reports 2008,我有一个Crystal Reports 2008文件,其中包含一个接受多个值的字符串参数。我需要在记录选择中使用此选项。我知道一般来说你可以做这样的事情 {MyTable.MyField} In Join( {?MyParam}, "," ) 但我需要用户输入可能出现在更长字段值中的值,即通过子字符串。我试过了 NumberVar index; For index := 1 To UBound( {?MyParam} ) Do ( {?MyParam}[index] In {MyTab
{MyTable.MyField} In Join( {?MyParam}, "," )
但我需要用户输入可能出现在更长字段值中的值,即通过子字符串。我试过了
NumberVar index;
For index := 1 To UBound( {?MyParam} ) Do (
{?MyParam}[index] In {MyTable.MyField}
)
虽然它不会抛出错误,但似乎对记录选择没有任何影响(也就是说,不管报告显示多少条记录)
更具体地说,假设
MyTable
有三条记录,MyField
分别包含文本红蓝绿
、绿黄紫
和红黄橙
。使用该参数,用户应能够键入值红色
和蓝色
,以便向下过滤到第一个和第三个记录。创建自定义公式,以比较两个阵列的重叠值:
//Array_Overlap
Function (Stringvar Array a0, Stringvar Array a1)
Local Numbervar i;
Local Numbervar j;
Local Booleanvar found:=false;
For i := 1 To Ubound(a0) Do (
For j := 1 To Ubound(a1) Do (
If a0[i]=a1[j] Then (
found:=true;
Exit For;
)
)
);
found;
在您的记录选择公式(RSF)中引用它:
您不需要手动分隔值,Crystal Reports会自动执行:{code>{MyParam}中的
{MyTable.MyField}。在第二个示例中,记录选择公式不会传递到数据库(逻辑太复杂)。因此,您将看到从数据库中读取相同数量的记录。假设您的逻辑正确,它将在从数据库读取记录时丢弃记录(WhileReadingRecords
),我应该说是“显示”,而不是“读入”(已更新)。两种方式都显示相同的记录<{?MyParam}
中的code>{MyTable.MyField}用于直接相等,但如果我希望基于子字符串进行匹配,则不适用。
// space delimited
AND Array_Overlap( Split({MyTable.MyField}, " "), {?MyParam} ) = TRUE