レポート ファイル内のCrystal Reportsデータベース アクセス パラメータを変更するアプリケーションを作成しています。.NET Windows フォーム アプリでレポートを開き、SDK 機能を適用して、ドライバーの種類 (ODBC/OLEDB)、サーバー名、データベース名、ユーザー、パスワード、認証の種類などを変更します。データベース名に問題があります。私のコードは、(サブレポートでも) テーブル ConnectionInfo の特定のプロパティを変更しますが、レポート内の一般的な SQL クエリを更新できません。これにより、レポートは引き続き古いデータベースにアクセスします。
したがって、元のレポートが database_1 にアクセスするように構成されていて、それを database_2 に変更すると、すべてのテーブル プロパティが正しく database_2 に変更されます (デザイナーで確認できます)。ただし、クエリにはまだ database_1 があります。データベース名は、SDK RowsetController.GetSQLStatement() の結果と Crystal Reports Developer クエリ ビュー (データベース -> SQL クエリを表示...) の両方で変更されません。
また、変換が行われている間、両方のデータベース (database_1 と database_2) をオンラインにする必要があります。そうしないと、GetSQLStatement (database_1 がオフラインの場合。まだ参照されているため) または SetTableLocation (database_2 がオフラインの場合 - これは予期されることです) のいずれかで例外が発生します。ただし、許容される動作)。両方のデータベースがオンラインの場合、エラーはありません。
これがまさに私が使用しているものです:
1) CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(filePath, OpenReportMethod.OpenReportByTempCopy) (...)
2) CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag を作成して入力します。
3) CrystalDecisions.ReportAppServer.DataDefModel.Tables を反復処理し、それぞれに SetTableLocaiton() を使用してすべてのプロパティを適用します。
4) サブレポートごとに繰り返します
5) レポートの SQL クエリを表示するための RowsetController.GetSQLStatement()。
新しいテーブル ConnectionInfos (適切に設定されているようです) に基づいてクエリを更新する方法はありますか? クエリを手動で更新する可能性すらありません(GET、検索と置換、SET)。
私は使用しています:
.NET 4.5、Visual Studio 2012、CR for VS 13.0.5、Crystal Reports Developer 9.2.2.693 (結果検証用) (ソース レポートも作成されます)