レポートとそのすべてのサブレポートのデータソースの場所を、それぞれを手動で開かなくても変更する方法はありますか?
5 に答える
実行時に接続を設定する方法は次のとおりです。構成場所から接続情報を取得します。
#'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
これを単発の取引として行っているだけの場合、私の提案は役に立たないかもしれません. ただし、データ ソースを頻繁に変更する場合は便利です。
免責事項: バージョン 9.0 以降、Crystal を使用していないため、Crystal がこれを改善したかどうかはわかりません。私は常にUDL ファイルを使用していました。基本的に、これはデータ ソースへのポインタです。レポートが UDL を指すように設定し、UDL がデータ ソースを指すようにします。ソースが変更された場合は、UDL を更新するだけです。
複数のレポートがある場合、これは非常に便利です。サーバーが変更されたときに、1 つのファイルを更新するだけで済みます。
リンクされたサブレポート (少なくとも CR XI では) はメイン レポートのデータソースを共有します。
@Unsliced 彼が直面している問題は、誰かが別のデータベースに対して開発した Crystal レポートを取得し、Crystal Reports XI でそれを表示するときに、サブレポートのフィールドを含む各フィールドに対してデータソースの変更を行う必要があることだと思います。レポートのトップ レベルのソースを変更しただけでは、エラーになることがよくあります。(Crystal Reports の既知の問題だと思います)。
Reporting Services の .rdl ファイルについて話しているのではないでしょうか。(そうでなければ、私の答えは間違っているかもしれません)
これらは基本的に単なる XML であるため、それぞれをロードして XPath クエリを実行し、データソースを含むノードを取得して更新することができます。