c# Visual Studio中的Crystal Reports数据源




visual-studio crystal-reports (3)

使用Visual Studio 2005和Crystal Reports的默认安装。

当我创建一个报表时,Crystal会询问数据库,并将其发送给我的开发数据库。 在应用程序中,我创建了一个DataTable并将其传递给报告,然后交给CR查看器。 在运行时,报表对象和查看器都不需要查看数据库,因为我已经检索了表。

当应用程序交给用户,一切工作正常。 他们无法看到开发数据库。

有一次,在生产部门,我在生产站点创建了一个报告,而不是通过指定开发数据库来创建水晶报表,我给了它生产数据库。 回到我自己的办公室,在VS中运行,报告试图连接到开发数据库,​​并失败。 (这是不可见的。)

所以,他们不能看到我的开发数据库不是问题,但是我看不到生产数据库是一个问题。

问题是:这是否出现,因为在VS中运行不同于运行已安装的应用程序? 为什么报告试图连接到数据库呢? 我如何控制它?


我想我是...

当您查看VS中的.rpt时,右键单击“字段资源管理器”窗口中的“数据库字段”,然后转到“设置数据源位置”。 它为您的连接显示了什么? 它指向生产数据库服务器? 该设置将存储在.rpt文件中,以便解释您的问题。


在创建报告时,您应该能够执行report.SetDataSouce(DataSet)并将其传递给包含报告使用的表的数据集。


问题是:这是否出现,因为在VS中运行不同于运行已安装的应用程序? 为什么报告试图连接到数据库呢? 我如何控制它?

你可以根据你的报告内容来控制它

如果您的报表包含一个表格,并且您使用DataTable将此表格传递给了您的报表,则报表将正常工作

但报告尝试连接到原始数据库位置时,您的数据表不提供所有报告数据,通常当您的报告包含2个或更多的表

在这种情况下,您需要通过DATASET报告包含所有表

这里我的代码使用2表格作者和titleauthor

'Build a SQL statement to query for the authors table 

Dim sqlString As String = "SELECT * FROM authors"

'Retrieve the data using the SQL statement 

adoOleDbDataAdapter = New OleDbDataAdapter(sqlString, adoOleDbConnection)

'Build a SQL statement to query for the titleauthor table 

sqlString = "SELECT * FROM titleauthor" 

'Retrieve the data using the SQL statement 

adoOleDbDataAdapter2 = New OleDbDataAdapter(sqlString, adoOleDbConnection) 

'Create a instance of a Dataset 

DataSet1 = New DataSet() 

'Fill the dataset with the data with author information 

adoOleDbDataAdapter.Fill(DataSet1, "authors") 

'Fill the dataset with the data with titleauthor information. 
'The table name used in the Fill method must be identical to the name 
'of the table in the report. 

adoOleDbDataAdapter2.Fill(DataSet1, "titleauthor") 

'Pass the dataset to the report 

crReportDocument.Database.Tables(0).SetDataSource(DataSet1) 

'View the report 

CrystalReportViewer1.ReportSource = crReportDocument






crystal-reports