6

複数の値を許可するパラメーターがあります。私のデータベースの名前フィールド用です。私ができるようにしたいのは、ユーザーが名前を入力できるようにしてから、入力した名前のような名前をクリスタルに見つけさせることです。たとえば、姓を 4 つ入力すると、crystal は名前フィールドにそれらの名前のいずれかを持つ人を返します。「いいね」を正常に機能させることができますが、配列に文字列が1つある場合のみです。これが私の選択式です:

    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
    )

この数式は、パラメーター内の名前ではなく、すべての名前を返します。私が間違っていることについてのアイデアはありますか?

4

3 に答える 3

4

次のプロパティを使用して複数値パラメーター ({?Customer Name}) を作成します。

  • デフォルト値: すべて
  • すべての複数値: TRUE

パラメータの選択リスト グリッドに行を追加します。'ALL' と 'ALL' を指定 (一重引用符なし)

次のテキストを使用してカスタム関数 (「区切り」という名前) を作成します。

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

  Split("*" + Join(params, "*,*") + "*", ",")

レポートのレコード選択式を変更します。

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

必要に応じて、次のテキストを使用してパラメーターの値を表示する数式を作成します。

//{@Customer Name}
Join( Delimit({?Customer Name}), ";")
于 2012-04-11T12:13:34.757 に答える
2

幸いなことに、CR はこの状況を自動的に処理できます (少なくとも CR2008 では、確認したばかりです)。あなたはただ行うことができます{?Customer Name}="All" or {NAMEFIELD} like {?Customer Name}

ワイルド カードを適切に使用するかどうかはエンド ユーザー次第ですが、パラメーターのヘルプ テキストに宣伝文を追加するか、編集マスクを使用して *Name* 形式を強制することができます。

于 2012-04-10T19:11:10.747 に答える
0

Oracleを使用している場合、別のアプローチ(別の回答を作成するのが理にかなっていると思います)は、REGEXP_LIKE式を使用することです。

  • コマンドを使用するレポートを作成します。
  • コマンドパネルで文字列パラメータ({?QUERY})を作成します。デフォルト値を「ALL」に設定します(一重引用符なし)。
  • コマンドにクエリを追加します。パラメータを参照してください:

SELECT customer_name FROM customers WHERE ( '{?QUERY}'='ALL' OR REGEXP_LIKE(customer_name, '{?QUERY}') )

  • 通常どおりレポートにフィールドを追加します
  • プロンプトが表示されたら(レポートの実行)、QUERYパラメーターに正規表現を入力します。パターン'A|B|C'はと同等LIKE '%A%' OR LIKE '%B%' OR LIKE '%C%'です。
于 2012-04-11T18:44:56.067 に答える