トップ回答者
CrystalReportでプロジェクトのデータセットを使用する方法

質問
-
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
回答
-
とりあえず、コード置いておきます
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
すべての返信
-
資格情報を渡していないためではないでしょうか?
面倒ですが、ConnectionInfoを記述してください。
「Web アプリケーション内の Crystal Report で SQL Server へのログオンが失敗する」
http://support.microsoft.com/kb/319264/ja -
プロジェクトのデータセットを使用する方法は不明のままですが、下記の方法で接続出来ました。
参考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
-
とりあえず、コード置いておきます
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