データベース操作実験

InterBase / FireBird + dbExpress (with C++ Builder) 編
SQL 埋め込み風味の低レベルアクセス実験2
- コンソールプログラムでの使用 -
2004/08/04 HTML更新



Firebird/InterBaseの部屋へ  実験工房へ  総合HOMEPAGEへ戻る

 "InterBase / Firebird" + "C++ Builder 6" + "dbExpress" を使用した、埋め込み SQL 風味の低レベルアクセス実験その2です。
 スクリプトと組み合わせた定時バッチ処理や kylix 用デーモンへの移植を睨み、純コンソールプログラムで dbExpress を使用してみました。使用コンポーネントは、その1と同様に TSQLConnection のみです。
 C++ Builder 6 を対象にしていますが、Kylix や Delphi でも基本的には同じだと思います。

− はじめに −

 その1で、dbExpress のTSQLConnection コンポーネントのみを使用してデータベースを 自在にアクセスする方法について述べました。  今回は、フォーム(ウィンドウ)を持たないプログラムでの dbExpress 使用について 書こうと思います。今回の内容に関して、その1でも触れてはいましたが、今回は実例を挙げて いきたいと思います。

 VCL/CLXコンポーネントを統合環境で使用する場合、通常は何らかのフォームにコンポーネント を貼り付けて使用します。  しかし、コンソールで動作するプログラムや Unix/Linux のデーモンなど、C++ Builder / Delphi / kylix を用いて開発するプログラムでも、独自のフォームというものを持たない物 もあります。  バックグラウンドで動作するプログラムや、cron などにより定時起動されるプログラムなど では良くある話でしょう。
 このような場合は、dbExpress のコンポーネントを貼り付けるフォームがありませんので、 多少変則的な方法を使用して dbExpress を使用すればよいようです。変則的といっても特殊な ことをする訳ではなく、自前のプログラムコード内でオブジェクトの生成と設定の読込みを行う という程度のことです。
 ちなみに、webサーバ用プログラムで webBroker 等を使用する場合は、専用の実表示を持たない フォームが用意されていますので特にこの方法を取る必要はありません。

 gpre.exe を使用しても同様なことが出来ますが、gpre.exe は日本語ドキュメントがあまり ありませんし、Borland の開発ツールを使用する限りにおいては、本方法で特に困ることはないと 思われます。

 今回は、iniファイルから設定を読み込む方式について書きます。

− iniファイルの準備 −

 接続に関する情報や、接続アカウントなどを設定した ini ファイルを準備します。
 今回は、データベース本体が LAN上の Linux + Firebird 1.0.3 である場合の設定例を示します。  文字コードはシフトJISを指定しています。


[TABLE_MASTER]
BlobSize=-1
CommitRetain=False
Database=192.168.1.16:/db/master.gdb
DriverName=Interbase
ErrorResourceFile=
LocaleCode=0000
Password=ijioqwd3z
RoleName=RoleName
ServerCharSet=SJIS_0208
SQLDialect=1
InterbaseTransIsolation=ReadCommited
User_Name=SYSDBA
WaitOnLocks=True

 InterBase / FireBird ではデータベースのファイルパスを直接指定しますので、 非常に理解しやすいです。ネットワーク経由の場合は、ドメイン名またはIPアドレスを ファイルパスの前に記述し、":"で区切る必要があります。

− プロジェクトの設定、ヘッダのインクルードなど −

 プロジェクトの新規作成時に、clx 使用(又はVCL使用)のチェックボックスをオンにします。
 基本的には "clx.h" (vcl.h)がインクルードされていれば問題ない模様ですので、あとは ご自分で使用するオブジェクトに合わせてインクルードファイルを選択してください。
 テストしたプログラムでは、SQL文の生成などに AnsiString を多用してるので、"StrUtils.hpp" もインクルードしました。

− オブジェクト生成と設定読込み −

 オブジェクトの生成と、設定ファイルは以下のように行います。
 手順としては、new 演算子でオブジェクト(コンポーネント)を生成してプロパティ を設定した後に、LoadParamsFromIniFile メソッドで設定を読み込みます。他の方法も ありますが、ここでは解説しません。ヘルプを参照してください。
 おまけとして、データベースへの接続と切断も入れておきました。

 プロパティに設定する内容ですが、ドライバ名等、ライブラリ側で決められている内容 が存在しますので注意が必要です。ざっと見渡したところでは、参考になるドキュメント が発見できなかったため、統合環境上でダミー用プロジェクトを作成して調べました。  手順は、フォームが存在する GUI プロジェクトを作成し、そこに TSQLConnection コンポーネントを貼り付けたのち、接続データベースを使用したいデータベースに変更します。  すると、それに追従してプロパティの一部自動で設定されますので、その値を書き写す という泥縄式の方法で調べました。  ちなみに、iniファイルの内容も同様な方法で調べています。


// オブジェクトの宣言
TSQLConnection *SQLcnt

// *****************************************************************
//              データベース環境設定
// *****************************************************************
void    setup_db(void)
{
    // 作成
    SQLcnt = new TSQLConnection(NULL);

    // プロパティ設定(iniファイルと重複してるものも有り)
    SQLcnt->LoginPrompt = false;    // ログインプロンプト未表示
    SQLcnt->Connected = false;
    SQLcnt->Name = "SQLcnt";
    SQLcnt->ConnectionName = "IBLocal";
    SQLcnt->DriverName = "Interbase";
    SQLcnt->GetDriverFunc = "getSQLDriverINTERBASE";
    SQLcnt->LibraryName = "dbexpint.dll";
    SQLcnt->VendorLib = "GDS32.DLL";
    SQLcnt->ConnectionName = "BENCHDB_MASTER";

    // 設定の読込み
    SQLcnt->LoadParamsFromIniFile("dbdata.ini");
}

// *****************************************************************
//              データベース接続
// *****************************************************************
void    db_open(void)
{
    SQLcnt->Open();
}

// *****************************************************************
//              データベース切断
// *****************************************************************
void    db_close(void)
{
    SQLcnt->Close();
}





−了−
Firebird/InterBaseの部屋へ
実験工房へ
総合HOMEPAGEへ戻る