以下に、私が使用する手順を示します(私はその場でそれを単純化し、独自のオブジェクトとグローバル変数を抑制しました)。この手順により、開発時に使用された元の接続からアクティブなSQLサーバーにレポートをリダイレクトできます。 VBで記述され、2つの主要なオブジェクトを使用します:
- CrystalReportのインスタンスを介して開かれた元のレポートオブジェクト
- 現在のSQLサーバーへのアクティブな接続(P_currentConnectionと呼ばれる)であるADODB接続
この関数(サブの場合もあります)は、アプリケーションでレポートオブジェクトを表示/印刷する前に呼び出されます。これは、ユーザーが場所に応じて異なるサーバー/データベースに接続するレプリケートされたデータベース間でレポートを配布するときに使用できます。
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)
レポートにサブレポートが含まれている場合は、それらをアクティブな接続にリダイレクトする必要がある場合もあります。この場合、レポート内のすべてのオブジェクトを参照し、レポートタイプのオブジェクトを確認して、それらを新しい接続にリダイレクトする必要があります。この元の手順に対応する余分な行を追加して楽しんでいただけると確信しています。