1

ご列席の皆様、

これまでのところ、プログラムを使用して MySQL データベースからレコードを取得し、単一のテーブルからクリスタル レポートを作成することに成功しています。以下のコードを使用して、2 つのテーブルを結合し、一致したレコードをレポートに表示しようとしています。

    Try
        Dim myConnectionString As String = "Server=" & FormLogin.ComboBoxServerIP.SelectedItem & ";Port=3306;Uid=parts;Password=parts;Database=accounting;"
        Dim dbConn As New MySqlConnection(myConnectionString)
        Dim dbQuery As String = "SELECT * " & _
                                "FROM cc_master a JOIN customer b ON b.accountNumber = a.customer_accountNumber;"
        Dim dbAdapter As New MySqlDataAdapter(dbQuery, dbConn)
        Dim dbTable As New DataTable
        dbAdapter.Fill(dbTable)
        Dim report As New rptCardListAll
        report.SetDataSource(dbTable)
        CrystalReportViewer1.ReportSource = report
        CrystalReportViewer1.Zoom(1)
    Catch ex As Exception
        'MsgBox(ex.Message)
    End Try

私が今直面している問題は、実行時にレポートを実行すると、CUSTOMER テーブルから取得している 1 つのフィールドを除いて、すべての db レコードがレポートに入力されることです。以下はスクリーンショットです。空白の CUSTOMER NAME に注意してください。すべてのレコードのそのフィールドにデータがあるという事実を知っているため、これを空白にすることはできません。

MySQL Workbench を使用して DB で直接クエリを実行すると、クエリは正常に機能するため、レポートが要求された情報を取得しない理由がわかりません。どんな助けでも感謝します、ありがとう。

レポートのスナップショット

編集: 不足しているフィールド (nameCOMPANY) を含むデバッグ中の DataSet Visualizer を示すスクリーンショット

レポートのスナップショット

4

1 に答える 1

2

皆さん、こんばんは。

それで、何時間もウェブを読んだり検索したりした後、私は自分の問題の解決策にたどり着いたか、それ以上に発見することができました.

VS 内で DataSet を作成し、それを使用して CR レポートを作成したにもかかわらず、実際にはその DataSet をコードで使用していなかったようです。代わりに、実行時に新しい DataTable を作成し、クエリ結果を入力して、レポートのデータソース プロパティを設定していました。

私がすべきことは、DataSet のインスタンス (以前に作成し、レポートのデザインに使用したもの) を作成し、クエリ結果を入力して、レポートのデータソース プロパティを設定することでした。これにより、CR は以前に DataSet デザイナーで確立したテーブル リンク/関係を認識して尊重することができました。また、複数のテーブルを返すクエリで DataAdapter を使用する場合、デフォルトの命名規則は「Table」、「Table1」などであり、これらを DB 内のテーブルの実際の名前にマップする必要があることも学びました。

したがって、これらすべての教訓を適用した後、次のようにコードをやり直す必要がありました。

    Dim report As New rptCardListAll
    Dim myConnectionString As String = "Server=" & FormLogin.ComboBoxServerIP.SelectedItem & ";Port=3306;Uid=parts;Password=parts;Database=accounting;"
    Dim dbConn As New MySqlConnection(myConnectionString)
    Dim dbQuery As String = "SELECT * FROM cc_master; " & _
                            "SELECT * FROM customer;"
    Dim dbAdapter As New MySqlDataAdapter(dbQuery, dbConn)
    With dbAdapter
        .TableMappings.Add("Table", "cc_master")
        .TableMappings.Add("Table1", "customer")
    End With
    Try
        Dim dbDataSet As New accountingDataSet
        dbAdapter.Fill(dbDataSet)
        report.SetDataSource(dbDataSet)
        CrystalReportViewer1.ReportSource = report
        CrystalReportViewer1.Zoom(1)
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.OkOnly, "An Error Has Occured....")
    End Try

私のレポートには、顧客テーブルから欠落しているフィールド「nameCOMPANY」が表示されるようになりました。

クレジット: @halfer、@luchosrock、@EvilBob22 の支援に感謝します。また、次のドキュメントの著者にクレジットを与えます。

http://developer-content.emc.com/developer/downloads/CrystalReport_ADO_Dataset.pdf

複数のテーブルでデータセットを埋める方法は?

于 2013-01-25T08:47:13.350 に答える