【问题标题】:Crystal Reports datasource in Visual StudioVisual Studio 中的 Crystal Reports 数据源
【发布时间】:2008-12-16 19:51:42
【问题描述】:

在默认安装 Crystal Reports 的情况下使用 Visual Studio 2005。

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

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

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

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

问题是:出现这种情况是否是因为在 VS 中运行与运行已安装的应用程序不同?为什么报告仍然尝试连接到数据库?如何控制它?

【问题讨论】:

    标签: c# visual-studio crystal-reports


    【解决方案1】:

    我想我在关注...

    当您在 VS 中查看 .rpt 时,右键单击字段资源管理器窗口中的数据库字段,然后转到“设置数据源位置”。它对您的连接有何影响?它是否指向生产数据库服务器?此设置将存储在 .rpt 文件中,因此这可能会解释您的问题。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        问题是:出现这种情况是因为在 VS 中运行与运行已安装的应用程序不同吗?为什么报告仍然尝试连接到数据库?如何控制它?

        您可以根据您的报告内容进行控制

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

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

        在这种情况下,您需要传递 DATASET 以报告包含所有表

        这里我的代码使用了 2 个表格作者和标题作者

        '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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多