|
それでは Delphiでデータベースを作る事を考えます。Paradox/BDEでデータベースツールを作る場合には、「BDE」内のTTable やTQueryというコンポーネントや、簡単に表形式の表示をしたい場合には「DataAccess」内のTDataSource と「Data Controls」内のTDBGrid 等を利用したりしていましたが、Paradox/BDEでのデータベースというのは単なるフォルダで、各テーブルファイルをその中に作成し、各テーブルファイルへのアクセスするというものでした。
Firebird や Interbase では、逆に、データベースファイルというものがあって、各テーブルはその中に組み込まれ、各テーブルはファイルとして見る事は出来ません。まず最初は、データベースを作成する、という所からスタートします。
データベースのアクセスにはその他に、ADOを使うパターン、dbExpressを使うパターン、等もありますが、ここでは「InterBase」内のコンポーネントを使います。これを使うのが便利で早いと思います。Firebird もこのコンポーネントで扱う事が可能です。
恒例のように以後は Borland Delphi6Jを使ったプログラミングを行います。他のバージョンをお使いの場合には適時読み替えて下さい。 |
プログラムは「C:\DelphiProgram\db」というフォルダを作成し、その中で更にプロジェクト毎にフォルダを作成して、その中でプログラムを作成します。
まずは、プロジェクト「d001」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「d001」というフォルダを作成し、Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
タイトル | d001−データベース作成 |
[ディレクトリ/条件]頁
パス及びディレクトリ | C:\DelphiProgram\db\d001 |
メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\db\d001」の中に「Unit1.pas」を保存
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\db\d001」の中に「d001.dpr」として保存
◆
Form1の画面は、大きさを扱いやすいよう小さくし、オブジェクトインスペクタで Form1 のプロパティを設定します。
BorderIcons
biMaximize | False | 最大化しないように |
BorderStyle | bsSingle | 画面をリサイズしないように |
Caption | データベース作成 | タイトルバーに表示されます |
Color | clWhite | 画面色 御自由にどうぞ |
Font内
Name | MS ゴシック |
プロポーショナルフォントは
文字配置調整が微妙なので |
Font内
Size | 10 | 小さいと少し見難い為 |
Scaled | False |
動作環境によっての文字の
大きさ変動を少し抑えられる |
メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。
まず最初は、いきなりSQLではなくスタンドアロン的に、TIBTable と TDBGridを使う方法について簡単に書いておきます。C/S型で使う事はほとんどありませんが…
フォーム上に、[InterBase]内の「IBDatabase」「IBTransaction」「IBTable」を配置し、「Data Access」内の「DataSource」と「Data Controls」内の「DBGrid」を配置します。また、実行する際のボタンを1つ配置します。画面のレイアウトは下記のような感じです。
オブジェクトインスペクタでそれぞれプロパティを指定します。
「IBDatabase1」
DefaultTransaction | IBTransaction1 |
LoginPrompt | False |
「IBTransaction1」
DefaultDatabase | IBDatabase1 |
「IBTable1」
CachedUpdates | True |
Database | IBDatabase1 |
Transaction | IBTransaction1 |
「DataSource1」
「DBGrid1」
「Button1」
それでは「Button1」をダブルクリックし、プログラムコードを入力します。(下記で全角空白を使っていますが実際は半角空白です)
// 開始
procedure TForm1.Button1Click(Sender: TObject);
var
AppPath : string ;
begin
AppPath := ExtractFilePath(Application.ExeName);
if (IBTable1.Active) then
IBDatabase1.ApplyUpdates([IBTable1]);
IBTable1.Active := False ;
IBTransaction1.Active := False ;
IBDatabase1.Connected := False ;
// データベース作成
IBDataBase1.DatabaseName := AppPath + 'TEST.FDB' ;
IBDatabase1.Params.Clear ;
IBDatabase1.Params.Add('USER "SYSDBA"');
IBDatabase1.Params.Add('PASSWORD "masterkey"');
IBDatabase1.Params.Add('PAGE_SIZE 4096');
try
IBDataBase1.CreateDatabase;
except
// 既に作成済み
end;
// データベース接続
IBDataBase1.DatabaseName := AppPath + 'TEST.FDB' ;
IBDataBase1.Connected := False ;
IBDatabase1.Params.Clear ;
IBDatabase1.Params.Add('USER_NAME=SYSDBA');
IBDatabase1.Params.Add('PASSWORD=masterkey');
IBDatabase1.Connected := True ;
IBTransaction1.Active := True ;
// テーブル作成
try
with IBTable1 do begin
TableName := 'TEST' ;
if not(IBTable1.Exists) then begin
StoreDefs := True ;
// テーブルの項目
with FieldDefs do begin
Clear;
with AddFieldDef do begin
Name := 'N';
DataType := ftInteger ;
Required :=True;
end;
with AddFieldDef do begin
Name := 'MOJIDATA';
DataType := ftString ;
Size := 20 ;
end;
end;
// インデックス
with IndexDefs do begin
Clear;
with AddIndexDef do begin
Name := 'INDEX1';
Fields := 'N';
end;
end;
//
CreateTable;
end;
end;
except
;
end;
IBTable1.StoreDefs := False ;
IBDatabase1.Connected := False ;
// 接続
IBDatabase1.Connected := True ;
IBTransaction1.Active := True ;
IBTable1.Active := True ;
end; |
終了時、つまり、フォームのCloseイベントでデータベースを切断するようにします。
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (IBTable1.Active) then
IBDatabase1.ApplyUpdates([IBTable1]);
IBTable1.Active := False ;
IBTransaction1.Active := False ;
IBDatabase1.Connected := False ;
end; |
実行をすると、データベース「TEST.FDB」をプログラムと同じフォルダに作成します。そして作成されたデータベースに接続を行い、テーブル「TEST」を作成します。内容は
です。
DBGridにその表形式で表示されますので、実際に入力出来ることが分かると思います。終了時またはボタンクリック時に「ApplyUpdates」で書き込んだ内容をデータベースに適用し、内容を保存しています。
C/S型データベースで TIBTable を使ったプログラムを作成する事はほとんど無いですが、Firebirdをスタンドアロンとして利用する事も出来ますし、安直に作りたい場合もあるでしょうから簡単にざっと書いてみました。まずは、こういうイメージ、という感じを掴んでもらえればと思います。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
シェアウェア
Script!World
データベース
A B C D
E F G H
I J K L
M N O P
Q R S T
U V W X
Y Z
|