Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2015年10月02日] [更新 2015年10月02日] Delphi サンプルプログラム集
638_Absolute Database ( BDE + Paradox からの移行 )
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro
Absolute Database v.7.61 Personal Edition
638_AbsoluteDB.zip [2,604 KB] 2015年10月02日版 (EXE 同梱)







ComponentAce 社の Absolute Database


Delphi XE7 からは BDE が添付されなくなりました。

BDE は、開発環境で使用するには簡単に利用できて便利なのですが、実行環境でのインストール作業は少し面倒です。BDE + Paradox のように手軽に利用可能なデータベースとして、ComponentAce 社が提供している Absolute Database があります。
2015年10月02日現在のバージョンは v.7.61 です。Delphi 4 から Delphi XE8 までに対応しています。本ページは、その紹介記事です。

Absolute Database を使用したアプリケーションの配布は、データベースのファイルと EXE だけです。データベースとしてのインストール作業は必要ありません。JET エンジンデータベースと同じで、拡張子が .abs のファイルがデータベースで、その中に複数の表を格納する方式となっています。






01_コンポーネントの入手とインストール


今回は、ComponentAce 社の、以下のダウンロードのページから Personal Edition をダウンロードしてテストしています。Personal Edition は個人利用であれば無料で利用できます。
インストールは非常に簡単です。添付の install.exe を実行するだけです。

インストールして、Delphi の IDE を起動すると、下図のように、販売促進 (?) のダイアログが現れます。このダイアログは、フォームにコンポーネントを配置する時も表示されます。



図1
インストール後に IDE を起動した時に現れるダイアログ

下図が登録されたコンポーネント類です。


図2
登録されたコンポーネント類

Absolute Database には、以下のように、多くのデモプログラムが添付されています。


図3
添付のデモプログラム




02_Paradox のデータを Absolute Database 用に変換


Absolute Database には 2015年10月02日現在、2 つのユーティリティが付属しています。
これらのユーティリティはソースコード付きです。
DBImportExport.exe は、Paradox のデータを Absolute Database のデータに変換したりするプログラムです。 


図4
付属のユーティリティ類

今回のテスト用に、Paradox のデータベースのデータを、Absolute Database に変換してみました。
下図の手順で実行しました。


図5
DBImportExport.exe を起動
  • BDE のデータベースからインポートするので
    [import table from BDE/ODBC] を選択
図6
フォルダから選択とする
図7
変換元の表のファイルを選択
  • ここでは以下を選択
    biofile.db
    customer.db
図8
データベースのファイル名を指定
  • 拡張子は .abs
  • 指定したファイルがない場合は新規に作成される
  • 既存のファイルの場合は、上書きの確認ダイアログが、表単位で表示される
  • ここでは ABStest.abs という名前にした
図9
変換終了




03_データベース管理用の DBManager


DBManager.exe は、データベースの管理用のプログラムです。
データベースの新規作成やデータベース関係の操作ができます。かっての Delphi に付属していたデータベースデスクトップ (Database Desktop) や SQL エクスプローラと同じような機能があります。
下図は、前項の操作で作成した ABStest.abs を開いて表示しているところです。

Absolute Database をインストールすると、拡張子 .abs が DBManager.exe に関連付けされます.
拡張子が .abs のファイルをダブルクリックすると、DBManager.exe が起動します。



図10
DBManager.exe の実行画面




04_TABSDatabase + TABSTable


Absolute Database には多くのデモプログラムが添付されています。サンプルを掲載するまでもないのですが、簡単な動作確認だけしてみました。

TABSTable を使用した簡単な動作確認用のテストです。
TABSDatabase でデータベースのファイル名とデータベース名を設定します。TABSTable でデータベースの表名を指定して TDBGrid にデータを表示します。
データベースのファイルは、上の操作で作成した ABStest.abs を使用しています。



図11
設計時画面
図12
実行結果

リスト1
TABSDatabase でデータベースの設定をして TABSTable で操作する例
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ABSMain, Grids, DBGrids;

type
  TForm1 = class(TForm)

    ABSDatabase1: TABSDatabase;
    ABSTable1: TABSTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  フォーム生成時の処理
//  全てオブジェクトインスペクタで設定可能
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  //データ表示用コントロール関係設定
  DataSource1.DataSet := ABSTable1;
  DBGrid1.DataSource  := DataSource1;

  //TABSDatabaseでデータベースのファイル名とデータベース名を設定
  //データベース名は任意
  ABSDatabase1.DatabaseFileName := ExpandFileName('../ABStest.abs');
  ABSDatabase1.DatabaseName     := 'MyABS_Database';

  //TABSTableで操作する対象のデータベース名と表名を指定する
  ABSTable1.DatabaseName := ABSDatabase1.DatabaseName;
  ABSTable1.TableName    := 'customer';
end;

//=============================================================================
//  フォームが閉じる時の処理
//=============================================================================
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  ABSDatabase1.Close;
end;

//=============================================================================
//  TableをOpenしてデータをTDBGridに表示
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  ABSTable1.Active := True;
end;

end.




05_TABSDatabase + TABSQuery


TABSQuery を使用した簡単な動作確認用のテストです。
TABSDatabase でデータベースのファイル名とデータベース名を設定します。TABSQuery で SQL 文を実行して、TDBGrid にクエリの結果としてのデータを表示します。
データベースのファイルは、上の操作で作成した ABStest.abs を使用しています。


図13
設計時画面
  • 実行結果は上のサンプルと同じ

リスト2
TABSDatabase でデータベースの設定をして TABSQuery で操作する例
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ABSMain, Grids, DBGrids;

type
  TForm1 = class(TForm)

    ABSDatabase1: TABSDatabase;
    ABSQuery1: TABSQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  フォーム生成時の処理
//  全てオブジェクトインスペクタで設定可能
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  //データ表示用コントロール関係設定
  DataSource1.DataSet := ABSQuery1;
  DBGrid1.DataSource  := DataSource1;

  //TABSDatabaseでデータベースのファイル名とデータベース名を設定
  //データベース名は任意
  ABSDatabase1.DatabaseFileName := ExpandFileName('../ABStest.abs');
  ABSDatabase1.DatabaseName     := 'MyABS_Database';

  //TABSQueryで操作する対象のデータベース名を指定する
  ABSQuery1.DatabaseName := ABSDatabase1.DatabaseName;
end;

//=============================================================================
//  フォームが閉じる時の処理
//=============================================================================
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  ABSDatabase1.Close;
end;

//=============================================================================
//  クエリの実行
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  ABSQuery1.Close;

  ABSQuery1.SQL.Clear;
  ABSQuery1.SQL.Add('select * from customer');

  ABSQuery1.Open;
end;

end.