Borland Developer Studio 2006でQuickReport 4を使う

By: Hitoshi Fujii

Abstract: この記事では、Borland Developer Studio 2006でQuickReport 4を使うためのインストール/環境設定の方法を解説します。また、既存のQuickReportアプリケーションをマイグレーションするときに、同時に考慮しておかなければならない注意点を説明します。

QuickReportは、Delphi 7、C++Builder 6まで、標準のレポートツールとして製品にバンドルされていました。現在は、Rave Reportが標準添付になっていますが、過去の開発資産としてQuickReportアプリケーションを抱えているケースがあると思います。現在では、QBS Software社が、Borland Developer Studio(Delphi Win32、Delphi .NET、C++Builder)にも対応した、QuickReport 4 Professionalをリリースしており、これを利用することで、既存開発資産を有効活用することができます。

現在、Borland Developer Studio登録ユーザーの方は、QuickReport 4の機能限定版、QuickReport Standard(Delphi for Win32用のみ)を無償でダウンロードして利用することができるので、このソリューションを検討するよい機会です。

    QuickReportを使う

QBS Softwareが提供するQuickReport 4 Professionalは、QBS SoftwareのWebサイトから購入することができますが、日本の販売代理店からの購入も可能です。現在、ComponentSourceにて、取り扱い可能(ComponentSourceオンラインショップには登録されていません)なので、購入を検討されている方は、直接問い合わせをしてください。

最新バージョンの QuickReport Professionalがサポートしている開発環境

・Borland Delphi 5

・Borland Delphi 6

・Borland Delphi 7

・Borland Delphi 2005 for Windows (Win32)

・Borland Delphi 2005 for .NET (.NET)

・Borland Delphi 2006 for Windows (Win32)

・Borland Delphi 2006 for 20006 for .NET (.NET)

・Turbo Delphi 2006 Professional for Windows (Win32)

・Borland C++Builder 5

・Borland C++Builder 6

・Borland C++Builder 2006


QuickReport 4 Professionalには、QuickReportコンポーネントのソースコードも標準添付されているので、コンパイル済みのバイナリによるインストール、ソースコードをコンパイルしてのインストールのいずれも選択できます。コンポーネントのカスタマイズ、バグフィックスの適用などをタイムリーに行うには、後者の方法を推奨します。

QuickReport 4 Professionalには、Delphi Win32用、Delphi .NET用、C++Builder用といった、それぞれのパーソナリティ用のインストールモジュールが用意されています。パーソナリティごとに、モジュールの構成、インストールディレクトリなどが異なりますので、注意してください。また、複数のパーソナリティを混在させる場合にも、注意が必要です。

Delphi Win32

Delphi .NET

C++Builder

セットアップ

QR406PD2006.EXE

QR406NET2006.EXE、QR4VCLNETD2006.EXE

※ QR4VCLNETD2006.EXE の方が新しい

QR406C2006.EXE

インストールディレクトリ

コンパイル済みモジュール、ソースファイル、リソースファイル、プロジェクトファイル:
C:\Program Files\QuickReportsXI

コンパイル済みパッケージ:
C:\Program Files\QuickReportsXI\bpl

ヘルプファイル:
C:\Program Files\QuickReportsXI\help

ソース、リソース、コンパイル済みモジュール等のファイル:
C:\Program Files\Borland\QuickReport4NET

ヘルプファイル:
C:\Program Files\Borland\QuickReport4NET\help

ヘッダを含むソース、リソース、プロジェクトファイル:
C:\Program Files\Borland\BDS\4.0\quickrpt

リソースファイル:
C:\Program Files\Borland\BDS\4.0\quickrpt\quickrpt

リソースファイル:
C:\Program Files\Borland\BDS\4.0\quickrpt\lib\obj

空:
C:\Program Files\Borland\BDS\4.0\quickrpt\include

ヘルプファイル:
C:\Program Files\Borland\BDS\4.0\quickrpt\help

コンパイル済みパッケージ:
C:\Program Files\Borland\BDS\4.0\projects\BPL

Lib ファイル、bpi ファイル:
C:\Program Files\Borland\BDS\4.0\projects\lib


QuickReportをインストールする方法については、以下の手順を参照してください。

    Delphi Win32へのインストール

コンパイル済みのモジュールをインストールするには、DelphiのIDEから、[コンポーネント|パッケージをインストール|追加]メニューで、デザイン時パッケージをインストールします。インストールするファイルは、C:\Program Files\QuickReportsXI\bpl\QR4DesignD2006.bpl です。次に、[プロジェクト|デフォルトオプション|Delphi for Win32]メニューを実行し、デフォルトプロジェクトオプションを設定します。[ディレクトリ/条件]の[検索パス]、[デバッグ用ソースパス]に、C:\Program Files\QuickReportsXI を追加します。

ソースコードからインストールするには、C:\Program Files\QuickReportsXI\bpl\QR4DesignD2006.dpk とC:\Program Files\QuickReportsXI\bpl\QR4RunD2006.dpkを、 Delphi Win32 パーソナリティで開いて、コンパイルします。コンパイルが完了したら、設計時パッケージQR4DesignD2006.dpkをプロジェクトマネージャ上で選択して右クリックし[インストール]メニューを実行します。以上で、ツールパレットにQuickReportコンポーネントが追加されます。

Hide image
qr_fig01

図1 -ツールパレットにQReportタブとコンポーネントが追加された

    Delphi .NETへのインストール

Delphi .NETで、ソースコードからインストールするには、インストール直後にインストールディレクトリに展開されているQR4DesignD2006NET.dpk、QR4Run2006NET.dpk を Delphi .NET パーソナリティで開いて、コンパイルします。次に、[コンポーネント|インストール済み .NET コンポーネント]メニューを実行し、QR4DesignD2006NET.dll を .NET VCL コンポーネントとしてインストールします。

    C++Builderへのインストール

C++Builderで、ソースコードからインストールする場合は、少し複雑です。まず、旧バージョンのディレクトリマッピングをベースとした、以下のディレクトリ内のファイルを全て削除します。これは、現在のバージョンで、プロジェクトディレクトリ等の位置が異なるために不整合が発生しているものです。

C:\Program Files\Borland\BDS\4.0\projects\BPL

C:\Program Files\Borland\BDS\4.0\projects\lib

※ \projects 以下のディレクトリを含めて削除してもよい

次に、実行時パッケージの C:\Program Files\Borland\BDS\4.0\quickrpt\QR4RunC2006.bdsproj と、設計時パッケージのC:\Program Files\Borland\BDS\4.0\quickrpt\QR4DesignC2006.bdsprojを開きます。プロジェクトの管理を容易にするために、これらのプロジェクトをまとめるプロジェクトグループを作成してもよいでしょう。

次に、プロジェクト設定を変更します。これは、実行時パッケージ、設計時パッケージそれぞれに行います。

Hide image
qr_fig02

図2 – プロジェクトオプション

[プロジェクト|オプション]メニューを実行し、[パスカルコンパイラ(DCC32)|パスと定義]を選択し、[パスと定義]の各設定から不正なパスを削除します。そして、次の2つに適切な値を設定します。

ユニット検索パス

$(BDS)\lib;$(BDS)\lib\obj

{$I <include>} 検索パス

$(BDS)\quickrpt\quickrpt


次に、Qrabsdatas.hpp ファイルの94行目を修正します。これは、定義の大文字/小文字に誤りがあるためです。

誤):__property Fielddefs ;
正):__property FieldDefs ;

パッケージプロジェクトをコンパイルするときには、実行時パッケージからビルドするほうが簡単です。設計時パッケージは、実行時パッケージに依存関係があるため、この関係を定義すれば、コンパイル順序を気にする必要はありません。

コンパイルが成功したら設計時パッケージ QR4DesignC2006.bpl をインストールします。そして、プロジェクトのデフォルト設定でQuickReportが有効になるように、[プロジェクト|デフォルトオプション|C++Builder]メニューを実行し、[パスと定義|インクルードファイルの検索パス]に「$(BDS)\quickrpt」を追加しておきます。

以上で、QuickReportを利用できるようになります。

Hide image
qr_fig03

図3 - QuickReportをインストールしたBorland Developer Studio 2006

    Standard vs. Professional

旧バージョンIDEに添付されていたQuickReportと、最新のQuickReport 4(単独製品版のProfessionalとBDS登録ユーザー向けのStandard)に搭載されたコンポーネント一覧を以下に示します。

QuickReport 3.09 BE

QuickReport 4.06 Standard

QuickReport 4.06 Professional

TQuickRep

TQRSubDetail

TQRStringsBand

TQRBand

TQRChildBand

TQRGroup

TQRLabel

TQRDBText

TQRExpr

TQRSysData

TQRMemo

TQRExprMemo

TQRRichText

TQRDBRichText

TQRShape

TQRImage

TQRDBImage

TQRCompositeReport

TQRPreview

TQRTextFilter

TQRCSVFilter

TQRHTMLFilter

TQuickAbstractRep

TQRLoopBand

TQRPDFFilter

TQRXMLSFilter

TQRExcelFilter

TQRRTFFilter

TQRWMFFilter

TQREditor

TQRGrImage

TQRGrDBImage

TQRPDFShape

TQRAbsTable

TQRHTMLL


一部の新機能、TQRPDFDocumentFilter、ExcelやWORD用コンポーネント等については、日本語を含むマルチバイト文字に対応していないので、3.09からの差となる新機能を評価する際には注意が必要です。

Standard版は、登録ユーザーであれば、追加のコストもなく、すぐにダウンロードして使用できるので、QuickReportアプリケーションのマイグレーションを検討する際には、極めて有効です。ただし、Professional版のメリットとして、BDS 2006 以外でも利用できること、ソースコードが全て付属していることも考慮する必要があるでしょう。本格的にQuickReportをBDS 2006用のレポートソリューションとして採用する場合、自分でパッケージをビルドでき、問題に対応する修正をコンポーネントレベルで作業できる点は、大変有利です。

    マイグレーションにあたって

QuickReportを使って、既存のQuickReportアプリケーションをマイグレーションすることを決めたら、次のことも同時に検討してみましょう。

・データベースアクセスの分離性

・レポート機能の分離性

    データベースアクセスの分離性

既存のDelphiアプリケーションでは、BDEなどの従来からのデータベースアクセス技術を使っていることと思います。このようなケースでは、データベースドライバの変更、データベースアクセスコンポーネントの変更などが、今回の移行プロジェクトで、あるいは、将来の時点で発生する可能性があります。こうした状況で、レポート機能が特定のデータベースコンポーネントセットに依存していると、再びレポート機能に修正を加えなければならなくなります。これを回避するには、データベースアクセス機能の分離性を高めます。

具体的な方法としては、TClientDataSet を有効活用します。データベースアプリケーションを変更に強くする方法については、こちらの記事を参照してください。

たいていのQuickReportアプリケーションでは、TTableやTQuery といったデータセットを直接参照しています。このような作り方だと、データアクセスコンポーネントを変更するたびに、数多くの QuickReport コンポーネントのプロパティを変更しなければならなくなります。直接参照をやめて、Table や Query で取得したデータを、メモリキャッシュとして持つことができるデータセットコンポーネントTClientDataSet を利用するように変更すれば、変更への対処がTClientDataSet に集中化され、変更に強くなります。

Hide image
qr_fig04

図4 - TClientDataSetを使って変更に強くする

レポート機能は参照系であるため、このような実装が可能になりますが、更新系と混在させる場合には注意が必要です。

また、この方法を検討するには、TClientDataSetの特性を理解しておいてください。TClientDataSet はデータを全てメモリキャッシュに保持します。そのため、TClientDataSet は巨大なデータ処理には向きません。

    レポート機能の分離性

もうひとつ考慮しなければならないのは、レポート機能の分離性です。QuickReportのコンポーネント機能が、いろいろなフォームのユニットにハードコーディングするのは、データベースアクセスコンポーネントをフォームに貼り付けるのと同様に、最も避けるべきコーディングです。

QuickReportというサードパーティコンポーネントの機能、バージョンなどに、アプリケーション資産がすべてロックインされるというのは、アプリケーションの保守性を考慮したときに、絶対回避したいところです。そのためには、QuickReportを操作するためのクラス(レポートマネージャのような機能)を作成し、各アプリケーション機能からは、レポート機能を抽象化し、QuickReportそのものを隠蔽するようにします。

例えば、次のようなコードがフォームのボタンやメニューのイベントハンドラに記述されていたとします。

procedure TForm1.Button1Click(Sender: TObject);
begin
  QuickReport1.Preview();
end;

これを、次のようなプロシージャを持つクラスTReportManagerを作成し、

procedure TReportManager.printReport;
begin
  ReportForm.QuickRep1.Preview();
end;

フォームから呼び出します。

procedure TForm1.Button1Click(Sender: TObject);
begin
  ReportManager1.printReport();
end;

これにより、少なくともこのフォームからは、QuickReportへの依存性は排除でき、万一印刷に関する機能実装の仕組みが変わった場合でも、TReportManager以降の変更だけで済みます。


関連情報:

第3回デベロッパーキャンプ – 資料ダウンロード


Server Response from: SC1