none
CrystalReportでプロジェクトのデータセットを使用する方法 RRS feed

  • 質問

  • CrystalReportでプロジェクトで定義したデータセット内のデータテーブルを使用すると空欄でレポートが作成されます。

    作成した手順としては、

    ソリューションエクスプローラでプロジェクトを右クリック、追加 新しい項目で Reporting Crystalレポートを選択、空のレポートを作成する。

    フィールドエクスプローラのデータベースフィールドを右クリックしデータベースエキスパートを実行。

    プロジェクトデータ内のADO.NETデータセット内のプロジェクトで設定したデータセット内のデータセットで登録したデータテーブルを選択する。

    フィールドエクスプローラからテーブルの項目を選んで、CrystalReport上にドラッグ。プレビューを見ても空欄のレポートが作成される。

    因みに、フィールドエクスプローラでテーブルの項目名 右クリックでデータの参照しても空欄。

    仮にプロジェクトのデータセットでは無く、接続の新規作成で直接データベースを見に行くように変更した場合は、レポートが作成される。ただし、この場合、実行する度にパスワードの入力画面が出る。

    上記にヒントを得て、データベースのログを確認したところ、プロジェクトのデータセットを使ってCrystalReportを実行した時に、ログインパスワードが一致しませんでした、のエラーが発生していました。

    他のプロジェクトのフォーム等からは、問題無くプロジェクトのデータセットが利用出来ているのですが、CrystalReportからは利用出来ないのでしょうか?それとも、何か設定が間違っているのでしょうか?

    【環境】

    DBサーバー・クライアント共 OS:Windows XP PRO SP3

    ドメインコントローラ無し、DBサーバーとクライアントはTCP/IPプロトコルで接続。ネット接続無しのクローズ環境。

    DB:sql server 2008 express sql server認証を利用

    開発環境:Visual Studio 2008 Professional Edition

    2010年6月23日 7:36

回答

  • とりあえず、コード置いておきます

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Dim obj_ad As CRTest.DataSet1TableAdapters.EmployeesTableAdapter
      Dim obj_ds As DataSet1
      Dim obj_rd As CrystalDecisions.CrystalReports.Engine.ReportDocument
      obj_ad = New CRTest.DataSet1TableAdapters.EmployeesTableAdapter()
      obj_ds = New DataSet1()
      obj_ad.Fill(obj_ds.Employees)
    
      obj_rd = New CrystalDecisions.CrystalReports.Engine.ReportDocument()
      obj_rd.Load(m_reportPath & "\CrystalReport1.rpt")
      obj_rd.SetDataSource(obj_ds)
    
      Me.CrystalReportViewer1.ReportSource = obj_rd
      Me.CrystalReportViewer1.Update()
     End Sub
    • 回答としてマーク a24ex 2010年6月25日 5:51
    2010年6月25日 3:36

すべての返信

  • 資格情報を渡していないためではないでしょうか?

    面倒ですが、ConnectionInfoを記述してください。

    「Web アプリケーション内の Crystal Report で SQL Server へのログオンが失敗する」
    http://support.microsoft.com/kb/319264/ja

    2010年6月23日 9:05
  • 情報不足で済みませんでした。

    開発しているのはWebアプリケーションでは無く、Windows Formアプリ及び、帳票アプリです。なので、ご指摘のようなエラーは発生していません。アプリは正常に空欄のページを吐き出しています。

    SQLデータベースサーバーのログにのみ、エラー履歴が残っています。

    ただ、パスワード情報が保持出来ないってところにヒントがありそうなので、上記の設定をしてテストしてみます。

    結果が出ましたら、再度報告致します。

    取り急ぎ、ご報告まで。

    2010年6月23日 23:35
  • プロジェクトのデータセットを使用する方法は不明のままですが、下記の方法で接続出来ました。

    参考URL http://msdn.microsoft.com/ja-jp/library/ms227700(v=VS.90).aspx (特にレポートへのログインコードの追加が重要)

    1.CrystalReport作成時に、プロジェクトのデータセットでは無く、接続の新規作成でOLE DB(ADO)を選択、Microsoft OLE DB Provider for SQL Serverを選んでサーバー名、ID、パスワード、データベース名を入力。統合セキュリティーのチェックは無し。

    2.CrystalReportを表示する為のフォームを作成し、CrystalReportViewerをフォーム上にドラッグする。

    3.上記URLを参考に、フォームのコーディングを修正。1で指定した、サーバー名、ID、パスワード、データベース名をコーディングに埋め込む。

    4.この状態でビルドしてデバッグを実行すると、プロジェクトが作るCrystalReportのパスと上記参考URLのCrystalReportへのパスが違う為にレポートが見つからない旨のエラーが出ます。なので、とりあえず実行する為に、パスの通ったフォルダーに2で作成したCrystalReport(拡張子rpt)をコピーしてデバッグ実行。

    上記で、正常にCrystalReportが結果を吐き出してくれました。

    何やらオマジナイみたいな事をしないと、CrystalReportがデータベースを見に行ってくれないのが残念ですが、とりあえずは動きました。

    ただ、先にも書きましたが、プロジェクトのデータセットを使えるのが一番便利なのですが、どなたか方法をご存知であれば、是非ご教授下さい。

    • 回答の候補に設定 ペニー 2013年2月8日 4:22
    2010年6月24日 2:37
  • ReportDocumentに表示させたいデータセットをSetDataSourceしてますか?
    #InitReportイベントなどで入れてやるだけですが

    2010年6月24日 10:25
  • とりあえず、コード置いておきます

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Dim obj_ad As CRTest.DataSet1TableAdapters.EmployeesTableAdapter
      Dim obj_ds As DataSet1
      Dim obj_rd As CrystalDecisions.CrystalReports.Engine.ReportDocument
      obj_ad = New CRTest.DataSet1TableAdapters.EmployeesTableAdapter()
      obj_ds = New DataSet1()
      obj_ad.Fill(obj_ds.Employees)
    
      obj_rd = New CrystalDecisions.CrystalReports.Engine.ReportDocument()
      obj_rd.Load(m_reportPath & "\CrystalReport1.rpt")
      obj_rd.SetDataSource(obj_ds)
    
      Me.CrystalReportViewer1.ReportSource = obj_rd
      Me.CrystalReportViewer1.Update()
     End Sub
    • 回答としてマーク a24ex 2010年6月25日 5:51
    2010年6月25日 3:36
  • ソースコードありがとうございました。

    無事にプロジェクトのデータセットを使う事が出来ました。ありがとうございました。

    2010年6月25日 5:47