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.