今更ながら BDE (Borland Database Engine)

 未だに使われる事もあります。正直な話、

 と、業務アプリプログラミングが本業の私が言ってみます。

 新規案件で BDE を使うのは流石にどうかと思うのですが、古いPCからのデータ移行で Paradox/xBASE を扱う場合には BDE を使うのが手っ取り早いのも事実です。業務で使われている MS-DOS マシンには xBASE のデータがゴロゴロしてたりしますね(Btrieveもありますけどね)。

 あ、xBASE というのは、dBASE またはその互換アプリケーション の事です。昔は "Quick Silver" なんていう dBASE 互換アプリケーションがあったんですよ。Microsoft も xBASE 製品を出してまして、"FoxPro/Visual FoxPro" ってのがあります。日本では発売されなかったようですけどね。他の xBASE 製品には "dBXL" とか "ARAGO for Windows" なんてのがあります。

BDE の概要

 BDE は、 

 のデータベースを特殊なドライバなしでアクセスできます。  これらのデータベースは "SQL Link" と呼ばれるドライバを介してアクセスします。BDE に ODBC を接続して各種データベースにアクセスする事も可能です。

BDE の情報(公式)

 "CodeGear Delphi 2009 および C++Builder 2009 のリリース ノート" にも書いてありますが、Vista 環境下ではデータベースファイルをドライブルート直下("C:\"等)に配置してはいけません。

BDE / SQL Link の配布

 BDE / SQL Link は Borland 製品で作成されたアプリケーションと共に配布可能です。詳しい内容は BDE のインストールフォルダにある、"bdedeploy.txt" をお読み下さい。

 ここからが本トピックの主題です。問題は "どうやって配布するのか?" です。

BDE の単体配布

 これは明らかにライセンス違反です。ですが、この方法を知らない事にはインストーラ/インストールプログラムを作る事ができません。  

BDE をインストーラに含める

 各製品のマニュアルを参照して下さい(^^; 既に単体配布の方法が判っているのですから、どんなインストーラでも BDE を含める事は可能です。BDE を配布するなら、エリアスを作れる InstallShield が一番簡単です。他のインストーラではエリアスの作成が面倒です。

エリアスをアプリケーション内で設定する

 エリアスをアプリケーションから設定してしまうというテもあります。この方法なら、インストーラでエリアスを設定する手間が必要ありません。データベースが Paradox/dBASE/ASCII ならエリアスの作成は非常に簡単です。

uses
  ..., DBTables;

procedure AddStdAlias(Alias, Driver, Path: String);
begin
  if not Session.IsAlias(Alias) then
    begin
      Session.AddStandardAlias(Alias, Path, Driver);
      Session.SaveConfigFile;
    end;
end;

 この関数を利用して、

procedure TForm1.FormShow(Sender: TObject);
begin
  OnShow := nil;
  AddStdAlias('TEST_PARADOX''PARADOX', IncludeTarilingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'DATA');
end;

 こんな感じで使います。例では Paradox のエリアス "TEST_PARADOX" を作り、パスを "<EXEの存在するフォルダ>\DATA" に設定しています。AddStdAlias() の第2引数(Driver)に利用できる文字列は、

 のいずれかです。その他のドライバを使う場合はパラメータを指定しなくてはならないので少々面倒です。

uses
  ..., DBTables;

procedure AddSqlAlias(Alias, Driver: String; List: TStrings);
begin
  if not Session.IsAlias(Alias) then
    begin
      Session.AddAlias(Alias, Driver, List);
      Session.SaveConfigFile;
    end;
end;

 この関数を利用して、

procedure TForm1.FormShow(Sender: TObject);
const
  DriverName = 'INTRBASE';
var
  Params: TStringList;
begin
  OnShow := nil;
  Params := TStringList.Create;
  try
    Session.GetDriverParams(DriverName, Params);
    Params.Values['USER NAME'  ] := 'SYSDBA';
    Params.Values['SERVER NAME'] := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'DATA\data.fdb';
    AddSqlAlias('TEST_Interbase', DriverName, Params);
  finally
    Params.Free;
  end;
end;

 こんな感じで使います。例では Interbase のエリアス "TEST_Interbase" を作り、"SERVER NAME"パラメータ を "<EXEの存在するフォルダ>\DATA\data.fdb" に設定しています。第2引数(Driver)に利用できる文字列や、第3引数(List)に格納できるパラメータ及びパラメータの値は "BDE Administrator" で確認して下さい。

トラブルシューティング

おまけ

 Btrieve の話をしてしまったので、補足。

 Btrieve は、現在 "Pervasive.SQL / Pervasive PSQL / PSQL SUMMIT" と名を変えています。純粋な Btrieve とはもはや別物の感がありますが、"Pervasive.SQL / Pervasive PSQL / PSQL SUMMIT" では Btrieve を扱うことができまして、Delphi からは ActiveX 経由で "Pervasive.SQL / Pervasive PSQL / PSQL SUMMIT" を操作できます。詳しくは、"Pervasive.SQL を Delphi で使用 (PERVASIVE)" を参照して下さい。


 BACK