質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Crystal Reports

Crystal Reportsとは、幅広いデータソースを基にレポート、帳票を作成するためのアプリケーションである。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1706閲覧

CrystalReports バージョン変更でエラー

ohno1011

総合スコア14

Crystal Reports

Crystal Reportsとは、幅広いデータソースを基にレポート、帳票を作成するためのアプリケーションである。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2023/08/18 01:31

前提


Visual Studio 2015 .NET Framework4.5
SAP CrystalReports Ver 13.0.17.2096


Visual Studio 2019 .NET Framework4.8
SAP CrystalReports Ver 13.0.30.3805

今まで①の環境で開発をしておりましたが、VisualStudioを2019に変えようと思ったら
SAP CrystalReportsが対応していなかったようなので

CrystalReports for Visual Studio、ラインタイム ともに
Ver 13.0.30.3805をインストールしました。

その後、今まで①の環境で開発したソフトのCrsytalReportsの出力ができなくなってしまいました。

13.0.30.3805のランタイムで、13.0.17.2096開発のレポートを開けるようにできるでしょうか?

よろしくお願い致します。

発生している問題・エラーメッセージ

型 'CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass' の COM オブジェクトをインターフェイス型 'CrystalDecisions.ReportAppServer.Controllers.ISCRReportSource' にキャストできません。IID '{98CDE168-C1BF-4179-BE4C-F2CFA7CB8398}' が指定されたインターフェイスの COM コンポーネント上での QueryInterface 呼び出しのときに次のエラーが発生したため、この操作に失敗しました: インターフェイスがサポートされていません (HRESULT からの例外:0x80004002 (E_NOINTERFACE))。

該当のソースコード

c#

1public bool PreviewReport(string reportPath, 2 string reportName, 3 DataTable dt) 4{ 5 try 6 { 7 8 //PrintDocumentの作成 9 System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument(); 10 11 //レポートファイルの指定 12 ReportDocument rptDoc = new ReportDocument(); 13 rptDoc.Load(iReportPath + reportName, CrystalDecisions.Shared.OpenReportMethod.OpenReportByTempCopy); 14 15 //データソースのセット 16 rptDoc.SetDataSource((DataTable)dt); //★エラー発生箇所 17 18 //保存データの削除 19 rptDoc.Refresh(); 20 21 //プレビューフォーム表示 22 form.Form3 F3 = new form.Form3(rptDoc); 23 F3.ShowDialog(); 24 25 return true; 26 } 27 catch (Exception ex) 28 { 29 return false; 30 } 31} 32

試したこと

CrystalReportsのVer 13.0.17.2096をアンインストールしてVer 13.0.30.3805のみインストールした場合と、
13.0.17.2096と13.0.30.3805のどちらもインストールされている場合で検証しましたが
結果は変わりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2023/08/18 02:07

触ったことないので同じようなエラーの情報提供のみですが Unable to cast COM object of type 'CrystalDecision.ReportAppServer.Controllers.ReportSourceClass' to interface type https://community.ifs.com/insights-business-reporter-and-analysis-models-eoi-51/unable-to-cast-com-object-of-type-crystaldecision-reportappserver-controllers-reportsourceclass-to-interface-type-10702 にて32/64bitどちらかのCrystal .net ランタイムのみを残すとよい、と回答されているようです。
ohno1011

2023/08/18 07:32

コメントありがとうございます。 元々64bitのランタイムだけが入っている状況でした。 32bitのランタイムだけにするのも試してみましたが状況は変わりませんでした。
ohno1011

2023/08/21 04:50

コメントありがとうございます。 13.0.34のランタイムを入れてみても同様の結果でした。
KOZ6.0

2023/08/21 07:41

新しくインストールされたDLLを参照していますか? 古いDLLを参照設定していないでしょうか?
ohno1011

2023/08/22 05:15

DLL参照というと、VS 2019 CR(SP34)の環境で、VS 2015 CR(SP17)で開発したプロジェクトを開いて、CRの参照をSP34のDLLに変えるということでしょうか? それでしたらまだ試してはいません。 ・SP17のランタイムでSP30開発レポートを開く。 ・SP30のランタイムでSP17開発レポートを開く。 のいずれかができないか?ということが知りたかったです。 そもそもSP30が旧verに対してなぜ下位互換性が無いのか...というところが調べてもわからず。 今まで作ったSP17のソフトを全てSP30でDLL参照し直して、 ユーザー側のランタイムをSP30に更新する。 しか方法がないのでしょうか...
KOZ6.0

2023/08/22 09:26

試してください。 なぜ下位互換性がないのか?というと、開発元がそのように作っちゃったから、としか言えません。 おそらくどこかのフォルダに旧DLLが保存されていて、プロジェクトがそれを参照するようになっていると思うんですが、それを新しいDLLで上書きしてビルドすれば、たぶん動くと思います。 あるいは、古いDLLを参照したままビルドした後で、新しいDLLを exe と同じフォルダに入れれば動くかもしれません。
can110

2023/08/22 12:47 編集

> なぜ下位互換性がないのか?というと、開発元がそのように作っちゃったから、としか言えません。 再現環境もないので感想レベルの発言ですが、私もこの意見に同意です。
ohno1011

2023/08/23 01:51

VS2019 CR(SP30)の環境で VS2015 CR(SP17)開発のソフトを、dll参照を新しいものに変えて実行してみましたが、 「System.IO.FileLoadException: 'ファイルまたはアセンブリ 'CrystalDecisions.CrystalReports.Engine, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040)'」 のエラーが発生しました。 >あるいは、古いDLLを参照したままビルドした後で、新しいDLLを exe と同じフォルダに入れれば動くかもしれません。 こちらも試してみましたが同じエラーが発生しました。
KOZ6.0

2023/08/23 02:14

SP34 を入れたなら、新しい ランタイムは 13.0.4000.0 のはずですが・・・ 13.0.2000 というと結構古いですよね?
ohno1011

2023/08/23 02:56

検証しているソフトをの変更前のランタイムが13.0.2000で、今は13.0.4000を参照するようにしていますが、このエラーが発生します。 操作した手順としては 1.VS2019でソリューションを開く 2.ソリューションエクスプローラーの参照からCrystalDecisions.CrystalReports.Engine を削除 3.参照の追加で新しいDLLを追加 以上です。 プロパティを見てもCrystalDecisions.CrystalReports.Engineのバージョンは13.0.4000.0になっています。 DLLを新しいものに参照し直す前(13.0.2000.0参照中)もこのエラーが発生しました。
KOZ6.0

2023/08/23 03:22

13.0.4000 を参照したなら、エラーメッセージの Version 部分は 13.0.4000 になるはずです。 exe と同じフォルダに古いDLL が残ってないですか? 参照したDLLは何と何でしょうか?
ohno1011

2023/08/23 04:22

古いDLLは削除しました。 参照したのはCrystalDecisions.CrystalReports.Engine.dllです。 参照先のパスは C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet\ です。 このSAPのフォルダにはこのパスにしかこのDLLはありませんでした。
KOZ6.0

2023/08/23 05:27

そこの DLL は本当に 13.0.4000 ですか? ComponentOne など、別のソフトウエアがランタイムを入れ込んだりしていないでしょうか?
ohno1011

2023/08/23 08:52

現在新verでの検証を行っているOSは今回初めてVisualStudioもCrystalReportsもインストールしたため、他のソフトウェアの影響はないと思います。 ファイル自体は見る限り13.0.4000でした。 ですが、申し訳ありませんが検証していたのはKOZ6.0様に紹介頂いた最新版ではなく、手元にあったSP30で行っていました。 2023/08/21 13:50の投稿でSP34でのSP17の動作確認をして以降SP34で検証していませんでしたが、 前回の投稿以降、再度SP34(13.0.34.4636)をインストールして検証し始めました。 検証に使っているプロジェクトはVisualStudio2015 CR SP17(13.0.17.2096)でフォームに CrystalReportViewerを配置(コントロール名:crystalReportViewer1)、テキストオブジェクトを1つ置いただけの適当なReport(CrystalReport1.rpt)を用意して Form_LoadでViewerに表示する処理だけの簡易的なものを用意しています。 SP30を入れていた時は、実行時に2023/08/23 10:51の投稿のエラーが出ていましたが SP34を入れた現在、プロジェクトに何も変更を加えていない状態でForm1.csのデザイン画面を開こうとしたら表示前に2つのエラーが発生しました。 ・ファイルまたはアセンブリ 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。 ・変数 'crystalReportViewer1' は宣言されていないか、または割り当てられていません。 そこでソリューションエクスプローラーから参照にあったCrystalDecisions.のdllを全て削除し最新版のdllを参照し直したらエラー無く起動できました。 ・CrystalDecisions.CrystalReports.Engine ・CrystalDecisions.ReportSource ・CrystalDecisions.Shared ・CrystalDecisions.Windows.Forms 旧レポートでの作成済みソフトが100個を超えるためどうにか手間がかからない方法がないかと思いましたが、下位互換が無い以上1つずつ更新していくしかないですね。 連日にわたりご教示頂きありがとうございました。
KOZ6.0

2023/08/23 09:23

解決したようなので自己解決としてクローズしてください。 100個もあって大変ですが、csproj ファイルを grep して 一括置換すればいいですし、ビルドもスクリプトを組めば良いです。
guest

回答1

0

自己解決

今回質問に上げたCrystalReportsは下位互換性が無いようで新ランタイム環境で旧バージョンを開くことはできませんでした。

開発環境に最新版のCrystalReportsをインストールして、
プロジェクトが参照しているdllを最新版に置き換えていくことにします。

投稿2023/08/24 00:09

ohno1011

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問