循环通过多值参数数组

cca*_*ey7 5 crystal-reports

我有一个允许多个值的参数.它用于我的数据库中的名称字段.我希望能够做的是允许用户输入一个名称,然后让水晶找到任何名称,就像他们输入的任何名字一样.因此,例如,您可以输入4个姓氏,而水晶将返回名称字段中具有任何这些名称的任何人.我可以让"喜欢"工作得很好,但只有当数组中有一个字符串时.这是我的选择公式:

    numbervar counter := 1;
    numbervar positionCount:=count({?Customer Name}); //I'm not sure what to put
                                                        here. Count? UBound? 

    if {?Customer Name}[1] <> 'ALL'
    then
    (
         while(counter <= positionCount)
         do
         (       
            {NAMEFIELD} like  '*' & {?Customer Name}[counter] & '*';
            counter := counter + 1;
         );
    ) 
    else
    if {?Customer Name}[1] = 'ALL'
    then
    true
    )
Run Code Online (Sandbox Code Playgroud)

此公式返回所有名称,而不是参数中的名称.关于我做错了什么的任何想法?

cra*_*aig 4

使用以下属性创建多值参数 ({?Customer Name}):

  • 默认值:全部
  • 所有多个值:TRUE

向参数的选择列表网格添加一行;提供“ALL”和“ALL”(不带单引号)

使用以下文本创建自定义函数(名为“Delimit”):

// Delimit()
// enclose each value in array in **, returning an array
Function (Stringvar Array params)

  Split("*" + Join(params, "*,*") + "*", ",")
Run Code Online (Sandbox Code Playgroud)

修改报表的记录选择公式:

If {?Customer Name}<>"ALL" Then
    {TABLE.CUSTOMER_NAME} LIKE Delimit({?Customer Name})
Else
    True
Run Code Online (Sandbox Code Playgroud)

或者,创建一个公式以使用以下文本显示参数值:

//{@Customer Name}
Join( Delimit({?Customer Name}), ";")
Run Code Online (Sandbox Code Playgroud)