- - PR -
VB.NET 複数テーブルのデータセットとCrystalReport
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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() もしかしたら、やっている手順も間違っているかもしれません。 何か分かる方、アドバイスをお願い致します。 | ||||
|
投稿日時: 2005-07-21 18:45
複数の Dataset でも渡せるハズですけどね。
マージするという手段もありますし、サブレポートを使うという手段もあります。 どのように、複数のテーブルを吐こうとしているかに因りますね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-07-21 19:20
じゃんぬねっとさん、アドバイスありがとうございます。 やりたいこと: テーブル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に出力したいといった感じです。 この場合は、どうでしょう? じゃんぬねっとさんのおっしゃるマージ・サブレポートもちょっと 調べてみます。 | ||||
|
投稿日時: 2005-07-22 10:45
うまくいきました。 どこを変更したかというと、 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