none
クリスタルレポートのフィールドエクスプローラに列名が表示されない RRS feed

  • 質問

  • 環境
    OS = Win7 Pro
    DB = SQL Server 2014
    開発環境 = Visual Studio 2015 Pro
    クリスタルレポートOEM版のバージョン = CRforVS_13_0_21


    いつもお世話になっております。


    ○困っている事

     クリスタルレポートに直接SQLを記載する際に、
     一時テーブルとパラメータを組み合わせて使用すると、
     フィールドエクスプローラに列名が表示されなくなる。


    ○再現手順

     ・フィールドエクスプローラに表示されるケース
     
      クリスタルレポート(以下 クリレポ)にDBデータの取得方法として、
      下記の手順で実行しております。

       ①「データベースフィールド」を右クリ ⇒ 「データベースエキスパート」を押下
       ②「データベースエキスパート」の「利用可能なデータソース」にて、DB接続情報を入力
       ③「コマンドの追加」をクリックし、「>」ボタンを押下
       ④「レポートへコマンドの追加」が表示され、SQLを入力し、「OK」ボタンを押下
        ※作成後、「選択したテーブル」に「コマンド」が表示される。

      下記のSQLを「コマンド」に設定し、「OK」ボタンを押下すると、
      フィールドエクスプローラに、表示できる列名が表示されます。

       create table #temp_data(
         [PART_CODE]       nvarchar(50)
        ,[PROCEDURE]       nvarchar(50)
        ,[DMRNO]           nvarchar(50)
        ,[DMR_VERSION]     nvarchar(50)
        ,[INSPECTION_TOOL] nvarchar(50)
        ,[ITEM]            nvarchar(50)
        ,[METHOD]          nvarchar(50)
        ,[STANDARD]        nvarchar(50)
        ,[MEASURED_VALUE]  nvarchar(50)
        ,[UNIT]            nvarchar(50)
        ,[JADGE]           nvarchar(50)
        ,[INSPECTION_DATE] datetime
        ,[INSPECTION_USER] nvarchar(50)
        );
       insert into #temp_data
       select *
       from (select top 1000   [PART_CODE]
           ,[PROCEDURE]
           ,[DMRNO]
           ,[DMR_VERSION]
           ,[INSPECTION_TOOL]
           ,[ITEM]
           ,[METHOD]
           ,[STANDARD]
           ,[MEASURED_VALUE]
           ,[UNIT]
           ,[JADGE]
           ,[INSPECTION_DATE]
           ,[INSPECTION_USER]
          from   MES_CRYSTALREPORTS_INSPECTION_DETAIL as m
       ) as t;
       select * from #temp_data ←ここを変更
       drop table #temp_data

        

     ・フィールドエクスプローラに表示されないケース
     
      上記のSQLに「パラメータリスト」からパラメータを追加し、
      select文の条件に加えると、フィールドエクスプローラに列名が表示されない。

      変更前 = select * from #temp_data
      変更後 = select * from #temp_data where part_code = {?part}
      
      ※パラメータ追加後に、「値の入力」画面が表示され、SQLが間違っている場合は
       ここでエラーが表示されるので、SQLの記載間違いはないと考えております。

      

    御教示いただきたい事
     単純なSQLであれば、使用する必要もありませんが、
     今後の開発において、SQLが複雑になりそうである為、
     一時テーブルとパラメータを組み合わせると、表示されなくなる理由、
     及びどうすれば表示されるようになるのか御存知であれば御教示下さい。


    何卒宜しくお願い申し上げます。


    • 編集済み kong0214 2017年12月21日 7:16
    2017年12月21日 7:08

回答

  • いつもお世話になっております。

    原因が判りましたので、御報告致します。
    下記のようにパラメータを「'」で囲めば表示されるようになりました。
    SQL保存時にエラーにならなったので、気づきませんでした。

    正しくないSQL = select * from #temp_data where part_code = {?part}
    正しいSQL     = select * from #temp_data where part_code = '{?part}'

    ちなみにパラメータに複数の値を許可している場合は、囲む必要がありません。
     select * from #temp_data where part_code in {?part}


    以上です。

    • 回答としてマーク kong0214 2017年12月22日 1:40
    2017年12月22日 1:40