2012-04-10 6 views
4

複数の値を許容するパラメータがあります。それは私のデータベースの名前フィールドです。私ができるようにしたいのは、ユーザーが名前を入力し、水晶に入力した名前のような名前が見つかるようにすることです。たとえば、4つの苗字を入れることができ、クリスタルはその名前のいずれかの名前を持つ人を返します。私は "好き"をうまく動作させることができますが、配列に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 
    ) 

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

答えて

2

多値パラメーターこれらの特性を有する({顧客名}?)を作成しますに行を追加TRUE

  • デフォルト値:ALL
  • すべての複数の値をパラメータのピックリストグリッド。電源「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}), ";") 
    
+0

ありがとう!これは完全に機能しました。 – ccarnley7

2

CRはこの状況を自動的に処理することができます(少なくとも私が確認したCR2008では少なくとも)。あなたはちょうど{?Customer Name}="All" or {NAMEFIELD} like {?Customer Name}を行うことができます。

ワイルドカードは適切に使用する必要がありますが、パラメータのヘルプテキストに括弧を追加するか、編集マスクを使用して* Name *形式を使用することができます。

+0

Ryanが言っていることは正しいですか、もちろん「{?Customer Name} = "All"または{NAMEFIELD}のように '*' + {?顧客名} + '*' 'を入力して、ワイルドカードを入力する必要はありません:) –

+1

@LeeTickett正しいように見えますが、実際には動作しません。 '+'演算子は、文字列の場合と文字列の場合とで動作が異なります。基本的に2つの '*'文字列を配列の追加項目として扱うので、すべてのレコードを一致させることができます。同じように '&'連結演算子を使用しようとすると、CRはエラーを返します。 – Ryan

0

アン他のアプローチ(私はそれが別の答えを作成する意味があると思った)、あなたがOracleを持っている場合は、REGEXP_LIKE式を利用することです。

  • コマンドを使用するレポートを作成します。
  • コマンドパネルで文字列パラメータ({?QUERY})を作成します。デフォルト値を 'ALL'(シングルクォートなし)に設定します。
  • クエリにコマンドを追加します。パラメータを参照:(レポートの実行)プロンプトが表示されたら
  • いつものように、QUERYパラメータの正規表現を入力

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

  • は、レポートにフィールドを追加します。 'A|B|C'のパターンは、LIKE '%A%' OR LIKE '%B%' OR LIKE '%C%'に相当します。
関連する問題