none
Microsoftレポートでできることでしょうか? RRS feed

  • 質問

  • ◎プラットフォーム:
     OS:WindowsXP、DB:SQL Server2005、開発言語:VisualBasic2005(VisualStudio2005)
    ◎Windowsフォーム アプリケーションの開発

    <要件>
    1.データグリッドビューを設置しているWindowsフォーム(以後、Winフォームと略)
    2.Winフォームには、ストアド(以後、SPと略)のパラメータセットのためのコントロール設置
    3.SPの処理内容
     3-1.テーブル1(ヘッダーデータ)から必要項目をワークテーブル1(SP内で定義済み、以後WKTBL1と略)に条件付きSELECT文で格納
     3-2.テーブル2(明細データ)の行データを列データへ切り替え(集計クエリを利用)、ワークテーブル2(SP内で定義済み、以後WKTBL2と略)へ格納
     3-3.WKTBL1とWKTBL2をマージSELECTし、必要項目をワークテーブル3(SP内で定義済み、以後WKTBL3と略)へ格納
    4.ストアドで取得したWKTBL3のデータをデータグリッドビューの結果セットとして、データセットに設定、データグリッドビューを表示。
    5.4の結果セットをレポートのデータソースとして利用し、レポートビューで表示する。

    現状、4.まではできたのですが、5.のレポート出力でつまずいてしまっています。
    根本的に、こういった処理を行う上でMicrosoftレポートが要件満たせるコンポーネントなのか?
    まずは確認したいのですが、できるようにする方法が何より知りたいと思います。
    ※レポートコンポーネントはサードパーティーのものもありますが、費用面でvsの標準コンポーネントとなるものを選択したいなぁ。
     と考えています。

    Microsoftレポートのデザインを作成したのですが、クラスとしてVB上で認識できないため、ネームスペースが不足しているのか?
    など、何点か確認したのですが、クリスタルレポート、ActiveReportなどのように
    事例や質問もが少ないため、ノウハウを見つけることができませんでした。
    ご教授お願いいたします。

    <補足>
    4.のストアドで取得したデータの結果セットは、0行~複数行になります。
    これら複数行のデータ(レコード)を取得し、明細行のある一覧表形式の帳票を出力イメージにしています。
    現状、2レコードあるテストデータが、1レコード分しか出力できない状況です。
    何かが不足しているようです。

    • 種類を変更済み jinba 2011年4月13日 1:56 ノウハウ取得
    • 編集済み jinba 2011年4月13日 9:16
    2011年4月13日 1:52

回答

  • Microsoftレポートを動作させるには、以下に書かれているTH01さんの書き込みが参考になると思います。

    再び/DataGridViewの印刷で改ページを設定するとき
    http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/589df236-16d3-469c-9d8d-fc7fde76d99d/

    詳細な要件はわかりませんが、データセットをMicrosoftレポートで表示および印刷すること自体は可能です。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク jinba 2011年4月13日 9:04
    • 回答としてマークされていない jinba 2011年4月13日 9:08
    • 回答としてマーク 山本春海 2011年6月3日 8:58
    2011年4月13日 2:35
    モデレータ
  • ストアドプロシージャ内に一時テーブル(私の質問でいうところの「ワークテーブル」)を指定する場合には
    TableAdapter構成ウィザードのデータセット指定ができないようです。

    一時的にストアドプロシージャに通常のselect文を入れ、TableAdapter構成ウィザードを騙す方法があります。sp_executesqlを使う場合に私はよく行っています。一時テーブルに関しては行ったことがなかったのですが、以下のようにして試してみたらうまく動いている感じです。

    CREATE PROCEDURE [dbo].[一時テーブルテスト]
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    
    select TEST1, TEST2, TEST3
     into #temp from dbo.TEST
    
    --select TEST1, TEST2, TEST3 from #temp
    
    --TableAdapterを構成するためのダミー
    select '' as TEST1, '' as TEST2, '' as TEST3
    
    drop table #temp
    
    end
     
     
    TableAdapter構成ウィザードを実行した後は、通常の形に戻します。
     
     
    CREATE PROCEDURE [dbo].[一時テーブルテスト]
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    
    select TEST1, TEST2, TEST3
     into #temp from dbo.TEST
    
    select TEST1, TEST2, TEST3 from #temp
    
    --TableAdapterを構成するためのダミー
    --select '' as TEST1, '' as TEST2, '' as TEST3
    
    drop table #temp
    
    end
     
    #追記

    上記のダミーのSQL文ですが、実際には型を指定する必要があります。そうすれば、TableAdapter構成ウィザードがその型を見て適切に処理してくれます。例えば、

    select
         CONVERT(tinyint, 1) as TEST1,
         CONVERT(date, '2011/04/27') as TEST2, 
         CONVERT(nvarchar(15), '') as TEST3  


     ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/





    2011年4月27日 2:11
    モデレータ

すべての返信

  • Microsoftレポートを動作させるには、以下に書かれているTH01さんの書き込みが参考になると思います。

    再び/DataGridViewの印刷で改ページを設定するとき
    http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/589df236-16d3-469c-9d8d-fc7fde76d99d/

    詳細な要件はわかりませんが、データセットをMicrosoftレポートで表示および印刷すること自体は可能です。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク jinba 2011年4月13日 9:04
    • 回答としてマークされていない jinba 2011年4月13日 9:08
    • 回答としてマーク 山本春海 2011年6月3日 8:58
    2011年4月13日 2:35
    モデレータ
  • trapemiyaさんへ

    コメントありがとうございます。

    その後、いろいろなサイトを確認しました。(英語サイトなども含む)

    どうやら、本件については

    ストアドプロシージャ内に一時テーブル(私の質問でいうところの「ワークテーブル」)を指定する場合には
    TableAdapter構成ウィザードのデータセット指定ができないようです。

    こちらのサイトに記載ありました。
    http://www.msdotnet.org/tableadapter-configuration-fails-with-stored-procedures-and-t349965.html
    なお、日本語に翻訳された文章は、プログラムで翻訳されているようです。(意味不明な文面でした。)

    そのため、原文を確認しましたが、
    冒頭に記載されているリンクサイト(以下リンク)
    https://connect.microsoft.com/VisualStudio/feedback/details/106244/tableadapter-configuration-wizard-fails-if-you-are-using-stored-procedures-that-uses-temp-tables

    にコメントとして、Microsoftからのコメントがありました。
    そして、内容としては、未解決の課題とのことでした。

    説明が長かったこともあり、分かりにくい質問で申し訳ありませんでした。
    ありがとうございました。

     

    2011年4月26日 8:20
  • ストアドプロシージャ内に一時テーブル(私の質問でいうところの「ワークテーブル」)を指定する場合には
    TableAdapter構成ウィザードのデータセット指定ができないようです。

    一時的にストアドプロシージャに通常のselect文を入れ、TableAdapter構成ウィザードを騙す方法があります。sp_executesqlを使う場合に私はよく行っています。一時テーブルに関しては行ったことがなかったのですが、以下のようにして試してみたらうまく動いている感じです。

    CREATE PROCEDURE [dbo].[一時テーブルテスト]
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    
    select TEST1, TEST2, TEST3
     into #temp from dbo.TEST
    
    --select TEST1, TEST2, TEST3 from #temp
    
    --TableAdapterを構成するためのダミー
    select '' as TEST1, '' as TEST2, '' as TEST3
    
    drop table #temp
    
    end
     
     
    TableAdapter構成ウィザードを実行した後は、通常の形に戻します。
     
     
    CREATE PROCEDURE [dbo].[一時テーブルテスト]
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    
    select TEST1, TEST2, TEST3
     into #temp from dbo.TEST
    
    select TEST1, TEST2, TEST3 from #temp
    
    --TableAdapterを構成するためのダミー
    --select '' as TEST1, '' as TEST2, '' as TEST3
    
    drop table #temp
    
    end
     
    #追記

    上記のダミーのSQL文ですが、実際には型を指定する必要があります。そうすれば、TableAdapter構成ウィザードがその型を見て適切に処理してくれます。例えば、

    select
         CONVERT(tinyint, 1) as TEST1,
         CONVERT(date, '2011/04/27') as TEST2, 
         CONVERT(nvarchar(15), '') as TEST3  


     ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/





    2011年4月27日 2:11
    モデレータ