我正在使用Crystal Reports和MS SQL Server。 我需要重新映射晶体报告以指向同一SQL Server上的不同数据库。是否有自动执行此操作的方法,或者我是否必须重新映射每个报告?我目前正在通过添加新的数据连接,然后使用指定的参数更新存储过程来更改数据库(目录)。此外,重映射后,显示报告的.asp崩溃如下:
Active Server Pages,ASP 0115(0x80004005) 外部对象中发生了可捕获的错误(E06D7363)。该脚本无法继续运行。
代码是:
设置mainReportTableCollection = Session(“oRpt”)。Database.Tables
For Each mnTable in mainReportTableCollection
With mnTable.ConnectionProperties
.Item("user ID") = "<some_login_name>"
.Item("Password") = "<some_password>"
.Item("DSN") = "<some_DSN>"
.Item("Database") ="<some_Database>"
End With
Next
但是,如果我注释掉最后两个分配,它就会运行。
提前致谢。
你的真实,Silviu。
答案 0 :(得分:3)
您将在此后找到我使用的程序(我在运行中简化它,抑制我们自己的对象和全局变量)。此过程允许将报表从开发时使用的原始连接重定向到活动SQL Server。它是用VB编写的,使用了两个主要对象:
在查看/打印应用程序中的报表对象之前,将调用此函数(也可以是子函数)。在复制数据库之间分发报表时可以使用它,其中用户根据其位置连接到不同的服务器/数据库。
Public Function connectReportToDatabase( _
P_report As CRAXDRT.Report)
Dim table As CRAXDRT.DatabaseTable, _
For Each table In P_report.Database.tables
If table.DllName <> "crdb_ado.dll" Then
table.DllName = "crdb_ado.dll"
End If
table.ConnectionProperties.DeleteAll
table.ConnectionProperties.Add "Provider", P_currentConnection.Provider
table.ConnectionProperties.Add "Data source", P_currentConnection.Properties("Data source").Value
table.ConnectionProperties.Add "Database", P_currentConnection.DefaultDatabase
table.ConnectionProperties.Add "Integrated security", P_currentConnection.Properties("Integrated security").Value
table.ConnectionProperties.Add "Persist Security Info", P_currentConnection.Properties("Persist Security Info").Value
table.ConnectionProperties.Add "Initial Catalog", P_currentConnection.Properties("Initial Catalog").Value
table.SetTableLocation table.location, "", P_currentConnection.ConnectionString
table.TestConnectivity
Next table
可以通过以下程序调用:
Dim crystal As CRAXDRT.Application, _
m_report as CRAXDRT.report
Set crystal = New CRAXDRT.Application
Set m_rapport = crystal.OpenReport(nameOfTheReport & ".rpt")
connectreportToDatabase(m_report)
如果您的报告包含子报告,您可能还必须将它们重定向到活动连接。在这种情况下,您必须浏览报表中的所有对象,检查报表类型的对象并将其重定向到新连接。我相信你会很乐意在这个原始程序中添加相应的额外行。
答案 1 :(得分:0)
您可以从当前报告连接信息中获取任何信息。因此,如果您不更改服务器,请将crystalServer变量设置为报告当前服务器。
'SET REPORT CONNECTION INFO
For i = 0 To rsource.ReportDocument.DataSourceConnections.Count - 1
rsource.ReportDocument.DataSourceConnections(i).SetConnection(crystalServer, crystalDB, crystalUser, crystalPassword)
Next
For i = 0 To rsource.ReportDocument.Subreports.Count - 1
For x = 0 To rsource.ReportDocument.Subreports(i).DataSourceConnections.Count - 1
rsource.ReportDocument.OpenSubreport(rsource.ReportDocument.Subreports(i).Name).DataSourceConnections(x).SetConnection(crystalServer, crystalDB, crystalUser, crystalPassword)
Next
Next