• 締切済み

クリスタルレポートについて素朴な疑問

クリスタルレポートについて素朴な疑問。 クリスタルレポートはぜんぜん触ったことがありません。 クリスタルレポートが必要になるかもしれないので、クリスタルレポートについて調べようと本屋さんで、 書籍をパラパラめくってみました。 クリスタルレポートについての専門的な書籍はありませんでしたが、プログラミングの書籍の中に一部解説がある書籍が数冊あり、簡単な使用例についての図と説明がありました。 簡単な例しか載っていないからだったのかもしれませんが・・。どの書籍でも以下のようなことが書かれていました。 レポートのヘッダー/フッダー ページのヘッダー/フッダー 詳細エリア の位置にVisual Studio上のデザイナで帳票イメージを 作成する。 ラベル等の固定的に文言が出力される部分もあれば、 データベースのある項目に関連づいているものもある。 データベースのある項目に関連づいているものに関して、エクスプローラ型のテーブル名と項目名のツリーから項目を帳票イメージにドラックアンドドロップしていくようなイメージでした。 ・発生した素朴な疑問 DBの内容を帳票に出力する場合、デザイナで 設定するこのやり方だと、あらかじめ帳票の出力イメージにあったテーブルイメージのようなビューを定義しておかないと、できないのでは? クリスタルレポートを使う現場では、このように帳票の出力イメージに即した問い合わせをあらかじめビューとして、定義して、デザイナのエクスプローラにでてくるようにして、使用するのが一般的なのでしょうか? この場合、Whereの絞り条件の式の一部が動的に変化する場合はどうするのでしょうか? 書籍の一部に少しだけある解説を見た程度で 通り一辺倒な簡単な例が載ってるものしかみてないので変な質問になってるかもしれませんが・・。

みんなの回答

  • catmanian
  • ベストアンサー率28% (10/35)
回答No.1

VB5付属の古いバージョンを使っていますが、VIEWよりもワークテーブルに動的に出力して、そのテーブルから全件出力の方が手っ取り早いと思います。また、Basicらしきインタープリタを搭載しているので、細かなコントロールも可能です。 他の方も嘆くように情報はきわめて少ないですが、本よりも、実際にいじってみると一通りのことは分かりますよ。

参考URL:
http://www.hirano.cc/crystalreports/
bean_atkinson
質問者

お礼

貴重な回答ありがとうございます。 さっそく、URLの内容を拝見しました。 >VIEWよりもワークテーブルに動的に出力して、そのテーブルから全件出力の方が手っ取り早いと思います 全件出力だと、あらかじめプログラムで期待通りの データを作れるので、クリスタルレポートのほうで、 WHEREで、行を絞ったり、Group byで集計するようなことはいっさいしない、イメージになりそうですね。 やはり、あらかじめ定義されたDBや、XMLのテーブルスキーマで、デザインするイメージなんですね。 ワークテーブルを使う場合、 ワークテーブルの名前をクリスタルレポートの デザイナで指定するため、どうしても、 毎回帳票を出力する毎に毎回、 クリスタルレポートが覚えているワークテーブルに 前件入れ替えになるような気がします。 それだと、複数ユーザが使った場合に、排他制御などが面倒な気がします。 実行時に、絞り条件を指定できるのでしょうか? たとえば、 WHERE 帳票トランザクションID = '今回のID' みたいなことができれば、特に排他制御の必要なく、 固定のワークテーブル名がいい感じでつかえるのですがそういうことでしょうか? http://www.hirano.cc/crystalreports/show_on_CrystalReports.html このURLを見ると、XMLスキーマの HiraDataSetのスキーマ情報を使って、 クリスタルレポートでデザインを作成して、 プログラムのロジックで編集した、 実際出力したいデータのdsを cr.SetDataSource(ds); このコードにて、動的に関連付けてるようです。 XMLの場合なら、XMLスキーマの名称がどうあれ、 実行時のデータセットオブジェクトはいくらでも 作成可能なので、上記のワークテーブルのような 疑問がうまれないので、たとえ、クリスタルレポートでWHEREやGROUP BYなどの細かい設定ができなくても、 cr.SetDataSource(ds); が使えるかぎり単なるプログラムのロジックの問題になるので、スッキリ理解できそうです。 XMLスキーマで最終アウトプットイメージをデザインして、実行時に、DBなどから取得するロジックで作ったデータセットオブジェクトをはめる この方法がよさそうに見えました。

関連するQ&A