- - PR -
CrystalReport「PrintReportメソッドは失敗しました」となります
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-04-10 17:37
こんにちは。
VB6.0+CrystalReport10でオラクルデータを帳票にしています。 さて、VB側でデザイナを追加し、レポートをプレビュー表示させることはできました。 ただ、プレビューーせずに直接印刷しようとすると、エラーになります。 (コンボを使って処理を分岐しています) コードは Private Sub cmdGO_Click() If Combo1.Text = "選択してください" Then '無視 ElseIf Combo1.Text = "画面表示(印刷も可)" Then frm未検収LIST_data1.Show frm未検収LIST_data2.Show ElseIf Combo1.Text = "印刷のみ" Then MsgBox "画面表示は行いません。直接帳票を印刷します。" frm未検収LIST_menu.CrystalReport1.Destination = crptToPrinter frm未検収LIST_data1CRViewer1.PrintReport frm未検収LIST_data2.CRViewer1.PrintReport End If 印刷したいフォームはfrm未検収LIST_data1 とfrm未検収LIST_data1と、計2つ あるのですが、1つめの「frm未検収LIST_data1CRViewer1.PrintReport」で "実行時エラー '2147418113 'printReportメソッドは失敗しました。 'ICrystal Report Viewer10'オブジェクト" となってしまいます。 data2をコメント化しても、data1のところで失敗します。 ヘルプファイルやネットなどをみて、 frm未検収LIST_data1CRViewer1.PrintReport true としてもダメでした。いったい何が悪いのでしょうか? プレビューはdata1もdata2の分も、正しく表示されています。 参照設定が何か間違っているのでしょうか。それとも 単純にコードがおかしいですか? なお、エラーのダイアログボックスにデバッグで応答し、 そのまままたコードを実行させると、今度はただしく印刷のダイアログボックスが 表示され、印刷も可能となります。 1回で印刷できるようにするにはどうすればいいでしょうか。 どうぞご教授くださいますようよろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-04-10 17:39
■スイマセン訂正です■
肝心なところ・・・ 印刷したいフォームはfrm未検収LIST_data1 とfrm未検収LIST_data1と、計2つ ↓ 印刷したいフォームはfrm未検収LIST_data1 とfrm未検収LIST_data2と、計2つ data1とdata2 が正しいです。 失礼しました。どうぞよろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-04-10 17:53
もしかしたら経由してるだけかもしれませんが、
# 勝手に「.」を補足しました。(data2 は付いていましたので) 最初に設定している CrystalReports コンポーネントは frm未検収LIST_menu ですが、 実際に PrintReport しているのは frm未検収LIST_data1.CRViewer1 になっています。 つまり、ReportSource の設定があべこべになっていたりしませんか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-04-11 15:23
じゃんぬねっと様
ありがとうございます。 さっそくですが 引用: -------------------------------------------------------------------------- # 勝手に「.」を補足しました。(data2 は付いていましたので) -------------------------------------------------------------------------------- 失礼しました。これは、「.」があるのが正しいです。 引用: -------------------------------------------------------------------------- 最初に設定している CrystalReports コンポーネントは frm未検収LIST_menu ですが、 実際に PrintReport しているのは frm未検収LIST_data1.CRViewer1 になっています。 つまり、ReportSource の設定があべこべになっていたりしませんか? -------------------------------------------------------------------------------- この部分が、自分でも理解できていませんので、 もう少しお付き合いいただいてもよろしいでしょうか。 今回の手順は、 1.デザイナでレポートファイル(ADOでオラクル接続)を指定 2.自動的に作成されたフォーム(CRViewer1がある)を frm未検収LIST_data1(あとdata2も)にリネーム 3.新たにfrm未検収LIST_menuを作成し、コンボボックスとcmdGOボタンを配置 それプラス、CrystalReportコンポーネンツも配置 4.frm未検収LIST_menuにコードを書く という流れでした。 実際のデータはfrm未検収LIST_data1.CRViewer1に表示されるので、 そちらを印刷する=つまりfrm未検収LIST_data1.CRViewer1.PrintReport と 書いたのですが、そもそもこれが間違っているのでしょうか。 あと、frm未検収LIST_menuには、CrystalReportコンポーネンツを配置しましたが どう関連しているのかイマイチ理解できていないままです(恐縮) (下記のサンプルを元に作ってみたのですが...) http://homepage2.nifty.com/inform/vbdb/boundreport.htm レポートソースの設定があべこべというのは、どう判断したらいいのでしょうか? frm未検収LIST_menuのCrystalReport1のプロパティでReportSourceを見ると crptReportとなっています。ここのことなのでしょうか・・・? どうかご教授くださいますようよろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-04-11 17:16
スイマセン自己解決できたようですので、ご報告いたします。
ステップインで1行ごとに実行していくと、エラーがでずに ちゃんと印刷のダイアログボックスがでました。 そこで、一定の間時間をおくようにタイマーを設定して、 コードをこう書きかえたらエラーがでなくなりました。 (タイマー部分は省略します) If Combo1.Text = "選択してください" Then '無視 ElseIf Combo1.Text = "画面表示" Then frm未検収LIST_data1.Show Wait 2 '2秒停止 frm未検収LIST_data2.Show ElseIf Combo1.Text = "印刷" Then MsgBox "印刷します。" frm未検収LIST_menu.CrystalReport1.Destination = crptToPrinter frm未検収LIST_data1.Show Wait 1 frm未検収LIST_data1.CRViewer1.PrintReport frm未検収LIST_data2.Show Wait 1 frm未検収LIST_data2.CRViewer1.PrintReport Edn If 当初はフォームを表示させない予定でしたが、上司に確認したら印刷後にリストが 表示されているほうが都合がいいかも・・・ということになり、この形で一応 要求は満たされたことになりました。 もっとスマートな書き方があると思うのですが、今回は 「フォームをいったん表示してしばし待つ」という方法で解決しました。 アドバイスを下さったじゃんぬねっと様 ありがとうございました。 | ||||||||
|
投稿日時: 2006-04-11 17:34
このコンポーネントは CrystalReports コントロールのことでしょうか? であれば、プレビューコントロールを経由する必要はなく、
ではないかと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1