1

女士们先生们,

到目前为止,我已经成功地以编程方式从 MySQL 数据库中提取记录,以从单个表中创建水晶报表。使用下面的代码,我正在尝试连接两个表并在报告中显示它们的匹配记录:

    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 表中提取的一个字段之外,所有数据库记录都填充在报告中。下面是一个屏幕截图。注意空白的客户名称 - 这不应该是空白的,因为我知道事实上该字段中的每条记录都有数据。

当我使用 MySQL Workbench 直接在数据库上运行查询时,查询工作正常,所以我无法弄清楚为什么报告不会提取请求的信息。任何帮助将不胜感激,谢谢。

报告快照

编辑:在包含缺失字段(nameCOMPANY)的调试期间显示 DataSet Visualizer 的屏幕截图

报告快照

4

1 回答 1

2

大家晚上好

因此,经过数小时的阅读和网络搜索,我已经设法找到或更好地找到了解决问题的方法。

看起来即使我在 VS 中创建了一个 DataSet 并使用它来创建我的 CR 报告,但我实际上并没有在代码中使用该 DataSet。相反,我正在做的是在运行时创建一个新的 DataTable,用我的查询结果填充它,并将报告的数据源属性设置为它。

我应该做的是创建我的 DataSet 的一个实例(我之前创建并用于设计报表的那个),用我的查询结果填充它,并将报表的 datasource 属性设置为它。这使 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 回答