2008-12-16 120 views
0

使用Visual Studio 2005和Crystal Reports的默认安装。Visual Studio中的Crystal Reports数据源

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

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

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

因此,它不是一个问题,他们无法看到我的开发数据库,​​但它是一个问题,我看不到生产数据库。

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

回答

1

我想我下面......

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

1

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

0

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

您可以根据使用的DataTable报告内容

如果您的报告包含一个表,你通过这个表,报告控制它,报告将正常工作

但 报告试图连接到当您的数据表不提供所有报表数据的时候,通常你的报告中有2个或多个表

在这种情况下,你需要通过数据集来报告原DB位置包含所有表

这里我的代码使用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