2009-07-08 20 views
2

MySQLテーブルのデータを表示するCrystal Reportに問題があります。私は現在、テーブルから直接データを収集しています、ユーザーが入力パラメータにしようとしたときしかし、問題は、このようなとして生じる: Crystal Reports XIおよびMySQLストアドプロシージャ(パラメータ付き)

  • パラメータが指定された
  • として機能していないエラーを返すパラメータについて

    1. null値

      その後、パラメータが空であればデータを返すためのストアドプロシージャを作成し、MySQLサーバがCrystal Reportsサーバではなく作業を行うようにしました。

      しかし、Crystal Reportsではこれを認識していないようで、手順の結果を表示する際に問題が発生しています。ここで

      は、私が使用している手続きのコピーです:

      Create Procedure sp_report 
      (IN @param1 varchar(64), 
      IN @param2 varchar(64), 
      IN @param3 int) 
      
      Begin 
      
      IF @param1 is null AND @param2 is null AND @param3 is null Then 
          Select * from tblData 
      ELSE IF @param1 is null AND @param2 is not null AND @param3 is not null then 
          Select * from tblData where field3 = @param3 and field2 = @param2 
      ELSE IF @param1 is not null AND @param2 is not null AND @param3 is null then 
          Select * from tblData where field2 = @param2 and field1 = @param1 
      ELSE IF @param1 is not null AND @param2 is null AND @param3 is not null then 
          Select * from tblData where field3 = @param3 and field1 = @param1 
      ELSE IF @param1 is not null AND @param2 is null AND @param3 is null then 
          Select * from tblData where field1 = @param1 
      ELSE IF @param1 is null AND @param2 is not null AND @param3 is null then 
          Select * from tblData where field2 = @param2 
      ELSE IF @param1 is null AND @param2 is null AND @param3 is not null then 
          Select * from tblData where field3 = @param3 
      ELSE IF @param1 is not null AND @param2 is not null AND @param3 is not null then 
          Select * from tblData where field3 = @param3 and field2 = @param2 and field1 = @param1 
      END; 
      

      は簡単にこれを行う方法や、私が何か間違ったことをやってはありますか?どんな提案も大歓迎です。

    +0

    水晶レポートは、ストアドプロシージャを認識しませんか?私はmysqlを使用しないで、多分別のデータベースドライバを使用します。 – dotjoe

    答えて

    2

    私が読んでいる場合は、あなたの正確木は、私があなたの代わりにこれを行うことが考えられる場合は(私はT-SQLの男だ、そう、これはMySQLの中で実行する場合、私は確認できない):

    SELECT * 
        FROM tblData 
    WHERE (([email protected]) OR (@param1 is null)) 
        AND (([email protected]) OR (@param2 is null)) 
        AND (([email protected]) OR (@param3 is null)) 
    
    +0

    ありがとう!この手順を更新しています。さて問題は、Crystal Reportsである.... SELECT * をtblData (フィールド1 = @のparam1 OR @のPARAM1がnull) AND(フィールド2 = @ PARAM2 OR @のPARAM2がnull) AND(フィールド3 = @ FROM param3 OR @ param3はnullです)。 – Brent

    1

    私はmySQLの部分を助けることはできませんが、私はSQL ServerとOracleの両方と非常によく似ています。指数関数的にIF文の数を増やすことなく、ヌルと非ヌルのパラメータのいずれかの組み合わせを網羅

    select * from tblData where (field1 = @param1 or @param1 is null) and 
    (field2 = @param2 or @param2 is null) and 
    (field3 = @param3 or @param3 is null) 
    

    :代わりにヌル/​​ NOT NULLパラメータのすべての組み合わせを網羅文IFの一連の、私はこのような何かをパラメータの数が増えるにつれて増加する。

    これは私のところでは完全に推測されていますが、Oracleでは、Crystalで動作するSPのIN OUTパラメータとしてカーソルを宣言する必要があります。 mySQLにも同じ要件がありますか?ここではOracleのSPのサンプルです:

    create or replace PROCEDURE  SomeProcedure 
    (
        param1    IN   VARCHAR2 DEFAULT null, 
        param2    IN   VARCHAR2 DEFAULT null, 
        REPORT_CURSOR  IN OUT  CrystalPkg.CrystalCursor 
    ) 
    AS 
    BEGIN 
    
        OPEN REPORT_CURSOR FOR 
        SELECT blahblah from blah... 
    
    +0

    ありがとう!手順は、更新されており、現在でいる: (フィールド1 = @のparam1 OR @のparam1がnull)tblData SELECT * FROM AND(フィールド2 = @ PARAM2 OR @ PARAM2 nullである) AND(フィールド3 = @ param3 OR @ param3はnullです)。 私たちはまだCrystal Reportに問題があるので、カーソルの提案を検討しています。 – Brent

    0
    select * 
    from tblData 
    where field1 like isnull(@param1,'%%' 
    and field2 like isnull(@param2,'%%') 
    and field3 like isnull(@param3,'%%') 
    
    関連する問題