以下に、私が使用する手順を示します (私はその場で簡略化し、独自のオブジェクトとグローバル変数を抑制しました)。この手順により、開発時に使用された元の接続からアクティブな SQL サーバーにレポートをリダイレクトできます。これは VB で書かれており、2 つの主要なオブジェクトを使用します。
- Crystal レポートのインスタンスを通じて開かれた元のレポート オブジェクト
- 現在の 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)
レポートにサブレポートが含まれている場合は、それらをアクティブな接続にリダイレクトする必要がある場合もあります。この場合、レポート内のすべてのオブジェクトを参照し、レポート タイプのものを確認して、それらを新しい接続にリダイレクトする必要があります。この元の手順に対応する余分な行を追加すると、きっと楽しいはずです。