@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

VB.NET 複数テーブルのデータセットとCrystalReport

1
投稿者投稿内容
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2005-07-21 17:18
開発言語:VB.NET 2003
DB:MS SQLServer 2000 SP3

もし、分かる方がいらっしゃいましたら、アドバイスお願いします。

DBの複数テーブルをデータセットで取り込み、
それをCrystalReportで出力したいのですが、それは可能ですか?
1つのテーブルであれば、CrystalReportの出力ができました。
データセットの定義方法と、CrystalReportでの定義方法がいまいちわかりません。

1.データセットの追加
データセットは「新しい項目の追加」から追加。
接続しているサーバからテーブルを引っ張ってきて、テーブルを二つ置き、
リンクのようなものはありません。
リンクとかしなくても大丈夫なのでしょうか?
ファイル名は「ds_repo.xsd」

2.CrystalReportで設定
CrystalReportでは、データベースフィールドに「データベースの追加/削除」
で、「新しい接続先の作成」で上記で作成した「ds_repo.xsd」ファイルを
指定して追加しました。
その時に、2つのテーブルを追加すると、リンクのようなものが表示されました。

3.フォームから、CrystalReportを呼び出す
これが、2つのテーブルの場合どうすればいいか分かりません。
ちなみに、1つのテーブルを出力する場合は下記コードで
うまくいきました。

' SQL接続用のオブジェクトを宣言
Dim cn As New SqlClient.SqlConnection
Dim cmd As New SqlClient.SqlCommand
Dim dr As SqlClient.SqlDataReader
Dim oDataAdapter As New SqlClient.SqlDataAdapter
Dim oDataSet As DataSet = New DataSet
Dim oCryRepo As R_genka = New R_genka

'接続文字列を指定
cn.ConnectionString = "Server=192.*.*.*;Initial Catalog=DB;User ID=sa;Password=;"

'接続を確立
cn.Open()

'接続済みの Connection を指定する
cmd.Connection = cn

'クエリ文字列を指定
cmd.CommandText = "select * from XSACT where SEIBAN='" & Trim(txt_仕事番号.Text) & "'"
'テーブルから全レコードデータを取得する
oDataAdapter.SelectCommand = cmd
oDataSet.Clear()
oDataAdapter.Fill(oDataSet, "XSACT")

oCryRepo.SetDataSource(oDataSet)
CrystalReportViewer1.ReportSource = oCryRepo

'接続を切断
cn.Close()

もしかしたら、やっている手順も間違っているかもしれません。
何か分かる方、アドバイスをお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-07-21 18:45
複数の Dataset でも渡せるハズですけどね。
マージするという手段もありますし、サブレポートを使うという手段もあります。

どのように、複数のテーブルを吐こうとしているかに因りますね。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2005-07-21 19:20
引用:

じゃんぬねっとさんの書き込み (2005-07-21 18:45) より:
複数の Dataset でも渡せるハズですけどね。
マージするという手段もありますし、サブレポートを使うという手段もあります。

どのように、複数のテーブルを吐こうとしているかに因りますね。




じゃんぬねっとさん、アドバイスありがとうございます。
やりたいこと:
テーブルAとテーブルBがあり、テーブルAの指定した範囲を
一覧としてCrystalReportに出力したい。
なお、テーブルAに含まれていないテーブルBの1項目だけも
同じ帳票上に表示させたい。

SQL文で書くと
"SELECT XSACT.SEIBAN, XSACT.U_KIKAKU, XHEAD.NAME FROM XSACT WHERE SEIBAN='" & Trim(txt_仕事番号.Text) & "' LEFT JOIN XHEAD ON XSACT.CODE = XHEAD.CODE"
みたいなのを、CrystalReportに出力したいといった感じです。
この場合は、どうでしょう?

じゃんぬねっとさんのおっしゃるマージ・サブレポートもちょっと
調べてみます。
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2005-07-22 10:45
引用:

Taitoさんの書き込み (2005-07-21 19:20) より:

SQL文で書くと
"SELECT XSACT.SEIBAN, XSACT.U_KIKAKU, XHEAD.NAME FROM XSACT WHERE SEIBAN='" & Trim(txt_仕事番号.Text) & "' LEFT JOIN XHEAD ON XSACT.CODE = XHEAD.CODE"
みたいなのを、CrystalReportに出力したいといった感じです。




うまくいきました。

どこを変更したかというと、
1.SQL文を変更
"select XSACT.SEIBAN, XHEAD.NAME, XSACT.U_KIKAKU, XSACT.U_MAKER, XSACT.JITU, XSACT.APRICE, XSACT.KOUNYUUGAKU from XSACT LEFT JOIN XHEAD ON XSACT.CODE = XHEAD.CODE where XSACT.SEIBAN='" & Trim(txt_仕事番号.Text) & "'"

2.データセットもSQL文で吐き出す項目のみで作成し直しました。

3.CrystalReportは2で作成したデータセットを選択し直し、それらの
  項目を出力するようにしました。

データセットの意味がよく分かっていなかったみたいです。
じゃんぬねっとさん、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)