001-(ここの記述は不完全です。詳しい方がいらっしゃいましたら補完お願いします)
002 *基本事項 [#w6ea079a]
003 -Firebird1.5まではInterbase6.0と互換性があるため、Interbaseのコンポーネントを使用可能。Firebird2.0以降はFirebirdに対応したコンポーネントを使う必要がある。
004 -UTF8のSQLSubtype値がInterBaseと異なる。(Firebird=4、InterBase=59)
005 *FireDAC [#o7917f4f]
006 -XE3で追加。Enterprise版には標準添付。Professtional版には別途FireDAC Client/Server Add-On Packを購入することで追加可能。Firebird1.5以降をサポート。
007 -XE4版(8.0.5)までは、過去バージョンのdelphiをサポートしていた為、インストーラを「/SHOWIDE」オプション付きで起動するとインストールするIDEを選択する事が出来たがXE5移行はインストーラが統合され指定バージョン専用となっている。
008+-2018年4月よりFireDAC Client/Server Add-On Packは購入不可となっている為、C/S環境で使用したい場合はEnterprise版を購入する必要がある。。
009 -(詳細記述募集)
010 *BDE [#f92b74e2]
011 -Enterprise(C/S)版以上が必要。SQL-LINKでINTERBASEを指定することでFirebird1.5まで接続可能。(ベンダー非推奨)
012 -Dialect 3に未対応。
013 -BDEは廃止予定
014 *dbExpress [#rf4ceb9f]
015 -Delphi2010以降のEnterprise以上でFirebirdを正式サポート。それ以前のバージョンではInterbaseドライバを使用することで1.5までは接続可能(ベンダー非推奨)
016 -(詳細記述募集)
017 *IBObjects [#zf6d5d3e]
018 -Delphi5以降のProfessional以上(Enterprise不要)ですべてのFirebirdのバージョンに対応。
019 -データアクセス用のコンポーネントだけでなく、独自のDBコントロールもある。
020 -データアクセス用コンポには、Delphi付属のDBコントロール(TDBGridなど)と接続できるTIBO系と、独自コントロール(TIB_DBGridなど)接続用のTIB_系がある。同一プロジェクト内での混在は可能だが相互接続はできない。
021 *ZeosLib [#QAbZzXJ]
022 -OSSのデータアクセスコンポーネント集。Firebird以外にも様々なDBに接続可能。
023 -TDataSet互換で、TDataSourceを通して様々なヴィジュアルコンポーネントで利用可能。
025 *FIBPlus [#k4eb9e8d]
026 -(詳細記述募集)
027 *ODBC [#b745c1a0]
028 -(詳細記述募集)
029 *IBX [#icad1f5e]
030 -(詳細記述募集)
031 *Universal Data Access Components (UniDAC) [#e7ae7b85]
032 -Firebird 1.x/2.x/3.xを含む、多くのデータベースに対応したDevart社のコンポーネント(有料)。
033 -Delphi6/C++Builder6以降(Delphi8を除く)、Lazarus(Free Pascal 3.0)に対応。
034 -Firebird 2のRETURNING節、EXECUTE BLOCK構文、Advanced Lockingに対応。
035 -Firebird 3のBOOLEAN datatypeに対応。
036 -Professional EditionはLinux, iOS, Androidアプリにも対応。
038  
039 **使用例 [#te6b0101]
040 ※注 以下のソースコードはUniDAC Professional Edition用であり、コンパイルおよび動作の確認はしていません。
041  type
042    TForm1 = class(TForm)
043      InterBaseUniProvider1: TInterBaseUniProvider;
044      UniConnection1: TUniConnection;
045      UniScript1: TUniScript;
046      UniSQL1: TUniSQL;
047    private
048      function SampleData: Boolean;
049    end;
050  
051  function TForm1.SampleData: Boolean;
052  var
053    SampleDbFile: string;
054  begin
055    Result := False;
056  
057    SampleDbFile := 'C:\data\sample.fdb';
058  
059    UniConnection1.ProviderName := 'InterBase';
060    UniConnection1.Server       := '127.0.0.1';  // fbembed.dll/fbclient.dll使用時は''(空)にすること
061    UniConnection1.Username     := 'SYSDBA';
062    UniConnection1.Password     := 'masterkey';
063    UniConnection1.Database     := SampleDbFile;
064  
065    with UniConnection1.SpecificOptions do begin
066      Clear;
067      Add('CharLength=4'   ); // UTF8は4, UNICODE_FSSは3, CP943Cは2を指定
068      Add('Charset=UTF8'   ); // UNICODE_FSS, CP943C
069      Add('ClientLibrary=' ); // fbembed.dll, fbclient.dll
070      Add('SQLDialect=3'   );
071      Add('UseUnicode=True'); // True:フィールド長=文字数×CharLength(dtWideString/dtWideMemo)
072    end;
073  
074    try
075      // データベースファイル生成とテーブル生成
076      UniScript1.Connection := UniConnection1;
077      UniScript1.SQL.Clear;
078      UniScript1.SQL.Add('CREATE DATABASE "' + SampleDbFile + '"');
079    //UniScript1.SQL.Add('  DEFAULT CHARACTER SET UTF8');
080    //UniScript1.SQL.Add('  PAGE_SIZE 8192');
081      UniScript1.SQL.Add(';');
082      UniScript1.SQL.Add('CREATE TABLE MYTABLE (');
083      UniScript1.SQL.Add('  USER_CODE CHAR(3),');
084      UniScript1.SQL.Add('  USER_NAME VARCHAR(50) CHARACTER SET UTF8');
085      UniScript1.SQL.Add(');');
086      UniScript1.NoPreconnect := True; // SQL実行前にデータベース接続をしない
087      UniScript1.Execute;
088  
089      // データベースに接続
090      UniConnection1.Connected := True;
091  
092      // データ追加
093      UniSQL1.SQL.Clear;
094      UniSQL1.SQL.Add('INSERT INTO MYTABLE');
095      UniSQL1.SQL.Add('  (USER_CODE, USER_NAME)');
096      UniSQL1.SQL.Add('VALUES');
097      UniSQL1.SQL.Add('  (:P1, :P2)');
098      UniSQL1.Params.ParamByName('P1').AsString := '001';
099      UniSQL1.Params.ParamByName('P2').AsWideString := '鈴木花子';
100      UniSQL1.Execute;
101  
102    except
103      on E: Exception do begin
104        UniConnection1.Connected := False;
105        ShowMessage(E.Message);
106        Exit;
107      end;
108    end;
109  
110    Result := True;
111  end;