什么可能导致我的Crystal Report在运行时丢失数据库字段?

时间:2013-01-22 21:18:43

标签: mysql vb.net visual-studio-2010 crystal-reports

女士&们,

到目前为止,我已成功地以编程方式从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表中提取的一个字段外,所有db记录都会填充在报表上。下面是一个截屏。注意空白的CUSTOMER NAME - 这不应该是空白的,因为我知道每个记录在该字段中都有数据。

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

Report Snapshot

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

Report Snapshot

1 个答案:

答案 0 :(得分:2)

晚上好,

因此,经过几个小时的阅读和搜索网络,我已经设法到达或更好地发现了我的问题的解决方案。

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

我应该做的是创建我的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”。

<强> CREDIT: 我要感谢@halfer,@ luchosrock和@ EvilBob22的帮助。另外,我在以下文件中赞扬作者:

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

How to fill Dataset with multiple tables?