2017-07-31 121 views
0

我目前使用VB.net来获取Crystal Reports所需的报告,我对SQL数据库服务器的访问使用的是Windows身份验证,我需要做的是能够更改数据库源的IP地址,因为我现在正在访问测试服务器,并且代码将会去其他地方工作。在vb.net中更改Crystal Reports数据库的IP地址

我学到了什么: 这是改变数据库源 CrReport.SetDatabaseLogon(“用户”,“密码”,“服务器”,“RJCards”) 但话又说回来我使用Windows的唯一途径认证。 P:当我改变报表上的数据源时,它自身的工作很好,但是由于我们将应用程序移动到另一个地方,它需要手动设置,就像从变量或其他东西中取回一样。

这里一看就是在我的代码

Private Sub GetDuplicatedFF() 
     Dim CrReport As New DuplicatedFF 
     Dim CrExportOptions As ExportOptions 
     CrExportOptions = CrReport.ExportOptions 
     Try 
      CrReport.SetDatabaseLogon("user", "password", "server", "RJCards") 
      CrReport.ExportToDisk(ExportFormatType.Excel, My.Settings.defaultDir & "\DuplicatedFF_" & Format(Now.Date, "yyyyMMdd") & ".xls") 
      'My.Settings.defaultDir & "\DuplicatedFF_" & Format(Now.Date, "yyyyMMdd") & ".xls" 
      MsgBox("Done Exporting your file") 
     Catch err As Exception 
      MessageBox.Show(err.Message) 
     End Try 
    End Sub 

回答

1

当您使用Windows身份验证或凭据访问在Crystal Reports的数据库,这意味着数据检索SQL语句将被包含在RPT文件中。在您需要更改IP地址,数据库名称等情况下,这不会给您太多的灵活性。

有一种不同的方法可以使用DataSet作为源向报告提供数据。您只需将必要的数据列添加到DataSet中,然后填入数据并将其提供给报告。因此,rpt文件将不包含嵌入信息(如SQL语句)的任何 。

为了将现有的报告文件使用上述方法,您可以使用以下步骤:

  1. 创建应用程序中的XSD文件(添加新项...→数据→数据集)
  2. 编辑数据集,并添加必要的DataTable(S)(点击右键→添加→数据表)
  3. 编辑数据表(S)和添加必要的列(S)(右键单击数据表→添加→列)
  4. 编辑每列并设置其属性,如DataType等(左键单击列→更改属性窗口内的属性)
  5. 现在您需要编辑报告文件并更改数据源位置(双击报告→左键单击字段资源管理器中的数据库字段→设置数据源位置...)
  6. 作为数据源替换选择ADO.NET(XML)并双击新建连接。选择xsd文件的文件路径(DataSet)并按完成。
  7. 每个DataTable必须与“当前数据源:”内的现有表配对,方法是选择该对并按下更新按钮。

现在报表文件将只有必要的占位符(列),没有任何数据库连接或SQL语句。要将数据加载到报告中,请使用下面的代码(根据您的需要进行更改)。

Imports System.Data.SqlClient 

Public Class Form1 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     'Windows Authentication Connection String' 
     Dim ConnString As String = "Server=MyServer;Database=MyDb;Trusted_Connection=Yes;" 
     'The SQL statement to retrieve data' 
     Dim SqlStatement As String = 
      <SQL> 
       SELECT 
        [column1] 
        ,[column2] 
        ,[column3] 
       FROM [MyDb].[dbo].[MyTable] 
      </SQL> 
     'A new instance to the DataSet that we created' 
     Dim MyDataSet As New DataSet2 
     'A new instance to the report file' 
     Dim MyReport As New CrystalReport1 
     'A new instance to the SQL adapter' 
     Dim SqlAdapter As New SqlDataAdapter(SqlStatement, ConnString) 
     'Fills the DataTable with data retrieved from the database' 
     SqlAdapter.Fill(MyDataSet.Tables("TestTable1")) 
     'Sets the DataSet as the report source' 
     MyReport.SetDataSource(MyDataSet) 
     'Previews the report' 
     CrystalReportViewer1.ReportSource = MyReport 
    End Sub 

End Class 
+0

我真的很熟悉这样一个明确的答案,将整个代码固定为指导,并按预期工作。非常感谢:) –

+0

不客气 –