セッションレポート:Delphi / C++Builderユーザーのためのオープンソースコンポーネントを使ったDBアクセス

By: Hitoshi Fujii

Abstract: 海外では、Delphi、C++Builder用のオープンソース/サードパーティ製のコンポーネントを使って、データベースアクセスを実装しているケースも多い。この記事では、第2回デベロッパーキャンプのセッションレポートとして、その概要を紹介する。


DelphiC++Builder(あるいは最新バージョンでは、Borland Developer StudioTurboシリーズ)では、さまざまなデータベースアクセスの方法を提供している。ボーランドが提供するデータベースアクセス技術を活用することはもちろん、海外では、オープンソースやサードパーティ製のコンポーネントを使って、データベースアクセスを実装しているケースも多い。

このセッションでは、Firebird日本ユーザー会で理事長を務め、データベースの専門家として活動しているキムラデービー(http://kimuradb.com)代表の木村明治氏が、オープンソースコンポーネントを紹介した。

「サードパーティコンポーネントという言葉は、セミナーなどでもよく耳にするが、実際そのコンポーネントをバイネームで紹介したことはあまりないと思います」木村氏は、海外のユーザー会に参加し、その幅広いコネクションで、これらのサードパーティコンポーネントやオープンソースコンポーネントを目にする機会が多いという。「まずはこれらを知ってもらって、それぞれにあったコンポーネントの使い方を考えてもらいたい」

    データベースアクセスアーキテクチャ

Delphi、C++BuilderなどのボーランドのIDE製品が提供するデータベースアクセス技術は、BDE、BDP、dbExpress、IBXなど、プラットフォーム、対象とするデータベース、あるいは歴史的経緯などにより、さまざまなものがある。この中で、特に主要なDBE、IBX,dbExpressについて触れてみたい。

Hide image
opensource_db_fig1

図1 – データベースアクセスアーキテクチャ

    BDE(Borland Database Engine)

BDEは、デスクトップデータベースアクセス技術をベースとした、古くからあるアクセス手法だ。SQLデータベースへのアクセスには、SQL Linkドライバが必要であるが、ベンダーのデータベースリリースにキャッチアップするのはアーキテクチャ的に困難であり、現在では、ParadoxとdBaseのアクセス用に残されている。

BDEに関しては、既存のBDEアプリケーションをどうすればよいかという問題があり、こうした質問もよく受ける。しかし実際には、ケースバイケース。アプリケーションの作りこみ具合、今後どうするかによって変わってくるというのが一般的な回答になる。

    IBX(InterBase Express)

IBXは、InterBaseに特化したデータベースアクセス技術である。InterBaseの性能を100%引き出すには有効であるが、IBX自体は、InterBaseから分岐したオープンソースデータベースFirebirdの今後のリリースには対応しないので、両方のデータベースを使い分けたいような場合には、注意が必要だ。

    dbExpress

今後のボーランド製品の標準的なデータベースアクセス手法といっていいだろう。クロスプラットフォームをサポートしており、ドライバの開発は簡単である。そのため、dbExpress用のオープンソースドライバもいくつも公開されている。Oracle、DB2、SQL Serverについては、Enterprise版以上が必要だ。

    サードパーティ製品とオープンソースコンポーネント

データベースアクセスのためのサードパーティ製品やオープンソースコンポーネントの活用は、BDEからの移行というシーンで評価されることが多い。特に、既存アプリケーションの暫定的なマイグレーションであったり、データ移行などのケースで、dbExpressなどのメインストリームの技術を使って作りこむのではなく、これらのオープンソース技術を使って、軽く開発してしまうことなどがある。

例えば、FirebirdとInterBaseに最適化されたサードパーティ製品IBObject、各種データベースへのネイティブ接続に対応したオープンソースコンポーネントZeosLib、IBXから移行可能なFirebird / InterBase対応サードパーティ製品FIBPlusなどがある。ここでは、ZeosLibについて、詳しく取り上げる。

    ZeosLib

ZeosLibは、Delphi、C++Builder、Kylixの各バージョンでのデータベースアクセスをサポートするオープンソースコンポーネントで、ライセンスはLGPLだ。

最新の安定バージョンは6.1.5で、各バージョンごとに対応する開発環境のバージョンが異なる。

バージョン

リリース時期

対応する開発環境

6.1.5-stable

2004/03

C++Builder 4~6

Delphi 4~7

Kylix 1~3

6.6.0-beta

2006/10

C++Builder 5~6

Delphi 6~7, Delphi 9(2005),

Delphi 10(2006)

Kylix 2~3

lazarus


ZeosLibを構成するコンポーネントは、TZTable、TZQueryなど、BDEコンポーネントでおなじみの名前に、Zを加えたものだ。

Hide image
opensource_db_fig2

図2 ZeosLibのコンポーネント構成

ZeosLibの各コンポーネントの役割を図にまとめると以下のとおり。

コンポーネント

説明

TZConnection

BDEのTDatabaseにあたるもので、トランザクションを取り扱う。

TZQuery

BDEのTQueryにあたるもの。

TZReadOnlyQuery

TZQueryでリザルトセットがリードオンリーになる。TZUpdateSQLにアサインできない。

TZUpdateSQL

BDEのTUpdateSQLにあたるもの。

TZTable

BDEのTTableにあたるもの。オープン時に全データをクライアントに持ってくるため、C/S環境では、小さなテーブルしか指定しないようにする。

SELECT * FROM yourtableのようなもの。

TZStoredProc

BDEのTStoredProcにあたるもの。違いは、Prepareがいるか、いらないか。

TZSQLProcessor

LoadFromStream()または、LoadFromFile()メソッド呼び出しによりロードされたSQLスクリプトを処理するコンポーネント。

TZSQLMonitor

ZEOSデータベースコンポーネントのアクションやイベントのログを取得する。取得先はファイルやTMemoオブジェクト。

TZSQLMetaData

メタデータにアクセスする。

    ZeosLibを使う

ダウンロードして解凍すると、packageディレクトリ下に、開発環境のバージョンごとのサブディレクトリがある。使用する開発環境にあったディレクトリ下のZeosDboを開く。次に、コンポーネントを以下の順番でインストールする。

1) Zcore.bpl

2) ZParseSQL.bpl

3) Zplain.bpl

4) ZDbc.bpl

5) Zcomponent.bpl

コンポーネントのインストールが完了すれば、あとは、通常のデータベースアプリケーションと同じように開発を行える。UIからDataSourceコンポーネントまでは、従来の開発と同じだ。TTableやTQueryの代わりにTZTable、TZQueryを使い、データベースコネクションには、TZConnectionを使う。

肝となるのは、TZConnectionで、Protocolプロパティを使って、使用するデータベースとそのバージョンを指定することだ。使用可能なデータベースバージョンは、ドロップダウンリストに表示される。

Hide image
zeos

図3 ZeosLibの使用

このように、既存のデータベースアプリケーションの開発手順に則って開発できるので、従来のアプリケーションを、あまり工数をかけずに、マイグレーションすることが可能だ。

講師プロフィール

キムラデービー代表。メーカーや独立系ソフトハウスでDB本体をはじめDB関連の開発をおこない、各種パッケージソフトのPMを担当。独立後は「DBを使った開発において、開発者の心理的・物理的負担を下げる」を合い言葉に自営で活動中。


関連情報:

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


Server Response from: SC3