女士&们,
到目前为止,我已成功地以编程方式从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直接在数据库上运行查询时,查询工作正常,所以我无法弄清楚为什么报告不会提取所请求的信息。任何帮助将不胜感激,谢谢。
编辑:屏幕截图显示调试期间包含缺少字段的DataSet Visualizer(nameCOMPANY)
答案 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