Difference between revisions of "Databases/ja"

From Lazarus wiki
Jump to navigationJump to search
(5 intermediate revisions by the same user not shown)
Line 4: Line 4:
  
 
{{Infobox databases/ja}}
 
{{Infobox databases/ja}}
 +
 
このページは「[[Lazarus]]と'''データベース'''」の概要である。以下の表にはサポートされているデータベースが載せられている。
 
このページは「[[Lazarus]]と'''データベース'''」の概要である。以下の表にはサポートされているデータベースが載せられている。
  
Line 48: Line 49:
 
|[http://www.sybase.com/products/databasemanagement/adaptiveserverenterprise '''Sybase Adaptive Server Enterprise (ASE) ''']||[[mssqlconn|SQLdb]]||はい||はい||いずれも||Linux, macOS, Win32, おそらく*BSD、おそらくSolaris<sup>2)</sup>
 
|[http://www.sybase.com/products/databasemanagement/adaptiveserverenterprise '''Sybase Adaptive Server Enterprise (ASE) ''']||[[mssqlconn|SQLdb]]||はい||はい||いずれも||Linux, macOS, Win32, おそらく*BSD、おそらくSolaris<sup>2)</sup>
 
|----
 
|----
|[http://www.sqlite.org/ '''SQLite''']||[[sqlite|SQLdb]]||はい||いいえ|| sqlite3 || すべて
+
|[http://www.sqlite.org/ '''SQLite''']||[[SQLdb|SQLdb]]||はい||いいえ|| sqlite3 || すべて
 
|----
 
|----
|[http://www.sqlite.org/ '''SQLite''']||[[sqlite|SQLite(3)Laz]]||はい||いいえ|| sqlite2,sqlite3 || すべて
+
|[http://www.sqlite.org/ '''SQLite''']||[[SQLite/ja|SQLite(3)Laz]]||はい||いいえ|| sqlite2,sqlite3 || すべて
 
|----
 
|----
 
|'''Text files'''||sdf||いいえ||いいえ|| - || すべて
 
|'''Text files'''||sdf||いいえ||いいえ|| - || すべて

Revision as of 00:47, 27 March 2024

Deutsch (de) English (en) español (es) français (fr) italiano (it) 日本語 (ja) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN)

日本語版メニュー
メインページ - Lazarus Documentation日本語版 - 翻訳ノート - 日本語障害情報
データベースのポータル

参照:

チュートリアル/練習となる記事:

各種データベース

Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos

このページは「Lazarusデータベース」の概要である。以下の表にはサポートされているデータベースが載せられている。

クライアントライブラリがインストールされているデータベースコンポーネント(もしデータベースがクライアントライブラリを必要とするなら)に限る、さもないとLazarusはファイルがないために起動ができない可能性がある。そのコンポーネントのアンインストールが不可能なら、Lazarusを再インストールする必要がある。

サポートされるデータベース

データベース パッケージ名 クライアントライブラリが必要か サーバが必要か サポートされるバージョン サポートされるプラットフォーム
Advantage TAdsDataSet はい いいえ 10.1以降 i386: Linux, Win32
DTurboPower FlashFiler FlashFiler いいえ いいえ - Win 32, (win64?)
In memory memds いいえ いいえ - すべて
In memory bufdataset いいえ いいえ - すべて
Firebird SQLdb はい 場合による1 1 - 2.5 i386: Linux, Win32
(Visual) FoxPro DBFLaz いいえ いいえ 2.0, 2.5, 3.0 (完全ではない) すべて
Interbase SQLdb はい はい 4 - 6 i386: Linux, Win32
Microsoft SQL Server SQLdb はい はい 6- FPC 2.6.2+. Linux, macOS, Win32, おそらく*BSD、おそらくSolaris2
MySQL SQLdb はい はい 4.0 - 8.0 i386: Linux, Win32
ODBC SQLdb はい 場合による 3.x 3 i386: Linux, Win32
Oracle SQLdb はい はい - -
Paradox TParadoxDataSet いいえ いいえ レベル 7まで(より上も ??) すべて
Paradox TParadox はい いいえ Win32
PostgreSQL SQLdb はい はい 6.6 - 8 i386: Linux, Win32
Sybase Adaptive Server Enterprise (ASE) SQLdb はい はい いずれも Linux, macOS, Win32, おそらく*BSD、おそらくSolaris2)
SQLite SQLdb はい いいえ sqlite3 すべて
SQLite SQLite(3)Laz はい いいえ sqlite2,sqlite3 すべて
Text files sdf いいえ いいえ - すべて
ZMSQL zmsql いいえ いいえ ? ?

注意 (1): WindowsとLinux(おそらくmacOSも)では組み込みバージョンのFirebirdが利用可能、またはWindows/Unix/macOS/FreeBSD/他のFirebirdがサポートするプラットフォームで稼働するFirebirdサーバに接続可能

注意 (2): これらの接続にはドライバとしてFreeTDSライブラリが用いられる。FreeTDSドキュメンテーションはドライバが少なくともこれらのプラットフォームで構築されるはずであるとしている。Windows x86およびx64バージョンは例えば[1]および[2]からダウンロードできる

注意 (3): このバージョン番号はODBCドライバ標準ものであり、ドライバまたはドライバマネージャのバージョン番号ではない。ほとんどのDBMSに対してODBC 3.x ドライバがある。

データベースクライアントへのバインディング

もしクライアントライブラリを必要とするデータベースを用いたいときは、そのライブラリをインストールしなければならない。今プログラミングを行っているコンピュータのみならず、アプリケーションを動作させるコンピュータにおいてもである。あるデータベース(特にMySQL)はそのバインディングが、インストールされたライブラリと同じバージョンからアプリケーションでコンパイルされた場合でのみ動作することに注意されたい。 データベース開発元のウェブサイトでこれらのライブラリ(*nixシステムでは .so、Windowsでは .dllsファイル)のインストールの仕方を見つけることができる。バインディングユニットはFPCソースのpackages/baseディレクトリで見つけることができる。それらはmysql_connectのように基本的にそれぞれのデータベースで完全に異なるクライアントAPIからなっている。これらのユニットを用いてデータベースアプリケーションを書くことができるが、Lazarus DB-unitを用いるより通常工数が必要であり、バグに対して敏感である。

これらのバインディングライブラリのほとんどはクライアントライブラリにハードリンクされている。アプリケーションがこれらのユニットを1つとコンパイルされるとクライアントライブラリがそのワークステーションで利用できないとアプリケーション全体がリンクされないことを意味する。これは、もし、-例えばコンピュータのMySQLクライアント、がインストールされていない状態で、プログラムの中でmysql4.ppユニットが使われているとそのプログラム実行ファイルは生成されないであろうことを示す。 もし、MySQLライブラリがインストールされたコンピュータでプログラムをコンパイルすることに成功したなら(したとしても-Evenを補った場合)、そのプログラムは相応のMySQLクライアントライブラリがインストールされていない他のどのコンピュータでも依然として動かないだろう(原文が悪いと思います"EVEN"が必要、EVEN If you succeed in compiling the program on a computer which has the MySQL client libraries installed, it still won't start on any other machine without the appropriate MySQL client libraries.)。言い換えれば: これらのデータベースにとって、開発機にクライアントライブラリをインストールする必要があり、また、アプリケーションとともに(運用機にも)クライアントライブラリをインストールする必要がある。

そのような問題を避けるため、いくつかのパッケージはまた、ライブラリに動的にリンクできるようになっている。それらのライブラリに対するどのような呼び出しの前にも、そのユニットは「初期化」されなければならない。データベースクライアントがインストールされていないコンピュータではこの初期化が失敗する。プロクラムがクライアントライブラリを使う用意ができると、そのユニットは「解放」されなければならない。

データセット

データセットとデータベースの区別

多くのデータベースプログラミングの初心者はデータセットとデータベースの区別をしない。Firebird、Interbase、Oracle、Sybase、Microsoft Accessなどの多くのデータベースがある。

もっとも単純に概念化すればLazarusのデータセット(TDatasetの派生、例えば、TSQLQueryなど)をデータベースから選んだレコードのコピーの一部と考えることである。以下のSQL文を用いてクエリを行ったとき:

   SQLQuery1.SQL.Text:= 'select * from table1 where id <=100';

SQLQuery1をデータベース中のtable1を開き100と100に満たないid値をSQLQuery1にコピーする。

このデータセット内容はTDatasetに順々に取得されたTDatasourceを介してTDBGrid、TDBEdiなどのデータベースコントロールを用いて視覚化される。 以下で説明されるinsert、edit、postなどのようなコマンドを用いてこのデータセットの内容を変更できるが、基本的にこれらの操作はデータセットに対してであり、データベーステーブル自身に対して行われるわけではない。

変更をデータベースに対して永続的に行うには、TDataSet.ApplyUpdatesを呼ぶまたは、SQL構文insert、update(これらはTDataset.insert、TDataset.updateとは異なる)を実行するなど、もう一手間必要である。

データベースのトランザクションのプロパティを通してデータセットを閉じるときに自動的に保存(もしくは破棄)する変更を行う多くのやり方がある。

データセットの基本

Lazarus(もしくはFree Pascal)で用いられるデータベースは基本的にTDataSet/jaクラスに基づいている。 これがアプリケーションに対しテーブルやクエリをもたらす。しかし、他の基底クラスのようにTDatasetは自身は用いず、その派生を用いることになる。これには多くがある。それらは、例えばローカルデータベース、テキストファイル、あるいはPostgreSQL、Firebird、MySQLなどといった異なるバックエンドデータベースへのアクセスをもたらす。いくつかのデータセットの派生はデータベーステーブルに直にリンクされていることもあるが、リンクをもたらすために他の追加のコンポーネントや、ライブラリを用いるものもある。

不可視のコンポーネントであるデータセットの派生物は、普通はLazarus Component Library(LCL)というよりはFree Component Library(FCL)である。

データセットはプログラム的、視覚的コントロールの双方で用いることができる。典型的なLazarusデータベースアプリケーションにはしばしば双方のメソッドを用いられるだろう。双方の場合で最初の一歩はTDatasetの派生を作成し、望むテーブルかクエリに接続し、開くことである。これは実行時にコードの中で、あるいは作成時にフォームへコンポーネントを配置し、そのプロパティを設定することのいずれでもなされる。 この詳細はTDatasetの派生により大きく異なっており、使っているデータベース応じて何をするべきなのかはDatabases/ja以下の様々なガイドを参照のこと。

データセットが開かれると、開かれたテーブルもしくはクエリのそれぞれのフィールドまたはカラム1つに対し、フィールドコンポーネントが生成される。それぞれのフィールドコンポーネントはフィールドの特定のデータ型、即ち、TStringField、に対する派生である。

コードからデータセットを用いる

プログラムによるアクセスはデータセットとフィールドコンポーネントを使うで詳述するが、簡単な例として:

  • TDatasetの派生を用いテーブルもしくはクエリを開き、見たい行をすくいあげ、行から行へと移動すること。
  • 以下のためにTFieldの派生を使うこと:
    • フィールドに対する一般的な情報にアクセスする
    • 現在の行に対する特定のデータ値にアクセスする(AsString、AsIntegerなどといったAsプロパティを用いること)
  • 以下の双方を用いてTDatasetの派生のフィールドにアクセスする:
    • フィールドプロパティ即ち、Field[0]は最初のフィールとである
    • フィールの名前によるメソッド即ち、FieldByName('年齢') はデータベースフィールド'年齢'と呼ばれるデータベースフィールドに紐づけられたフィールドを返す

フィールドの型についてはデータベースフィールド型の一覧を参照のこと。

視覚的(データ感知型の)コントロールを用いる

「RAD」スタイルのLazarusアプリケーションで簡単にデータベースを用いるために、通常はデザインの時にデータセット派生を設定しデータ感知型コントロールを用いる。これを行うためには:

  • 選択するデータセット派生を、サポートするコンポーネントとともにフォームに加え開くこと(「Active」プロパティをtrueにする)。
  • TDataSource/ja コンポーネントを (Data Access tab/jaから) フォームに加えデータセットと「リンク」させる(DataSetプロパティを設定する)。
  • データ感知型コントロールをData Controls tab/jaからフォームに加え、それぞれを(データセットではなく)DataSourceコンポーネントにリンクすること。
  • ほとんどのコントロールは1つのフィールドにリンクされるため、それぞれのタブのためにフィールドをセットすること。

コントロールの詳細は以下の #データコントロールを見ること

データセット状態

データセットには多くの状態がある。非常に多くの状態があるが(ソースのTDataSetStateを見ること)。最初に注意すべきおもなものは

状態 機能
dsInactive データセットは閉じている
dsBrowse データセットを閲覧、値を見ることができる
dsEdit 現在の行の値を編集できる。Postが実行されるまで値は保存されない
dsInsert 新しい行が挿入されている。これに値をセットすることができる。Postが実行されるまでレコードは保存されない

他の状態はかなり一時的で通常「自動的に」扱われる。それらは内部的に用いられ、より複雑なコードである。もしデータベースがデータだけを見ており、設計時にデータセットを開くのであれば、この状態は、データセットはほとんどdsBrowseにあるため、たいていは無視できる。しかし、ほとんどのアプリケーションはいずれかの段階でデータを変更する必要がある。もし、データ感知型コントロールを用いている場合、それらはこの多くを自動的に行うだろう。例えば、TDBEdit/jaコントロールでテキストを変更すると、すでにdsEdit、あるいはdsInsert状態にいなければ、それはデータセットをdsEdit状態にする。現在の状態がdsEditもしくはdsInsertの時に他のレコードに「スクロール」するとそのレコードは「post」され、データセットはdsBrowseに戻るだろう。しかし、データセットをコードからアクセスしていると、たいてい同様にコードの中から状態を変更する必要が生じるだろう。TDBNavigator/jaコントロール(以下参照)は明示的に状態を変えることができる。

データセット更新状態

更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:

procedure QueryAfterPost(DataSet: TDataSet);
begin
  case DataSet.UpdateStatus of
    usUnmodified : ShowMessage('Unmodified');
    usModified   : ShowMessage('Modified');
    usInserted   : ShowMessage('Inserted');
    usDeleted    : ShowMessage('Deleted');
  end;
end;
値の説明
  • usUnmodified: レコードは変更されない
  • usModified: レコードはデータベースに存在するが、局所的に変更される
  • usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される
  • usDeleted: レコードはデータベースに存在するが、局所的に削除される

データセット更新状態

更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:

procedure QueryAfterPost(DataSet: TDataSet);
begin
  case DataSet.UpdateStatus of
    usUnmodified : ShowMessage('Unmodified');
    usModified   : ShowMessage('Modified');
    usInserted   : ShowMessage('Inserted');
    usDeleted    : ShowMessage('Deleted');
  end;
end;
値の説明
  • usUnmodified: レコードは変更されない
  • usModified: レコードはデータベースに存在するが、局所的に変更される
  • usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される
  • usDeleted: レコードはデータベースに存在するが、局所的に削除される

ポストとキャンセル

もしレコードを編集、挿入すると新しい値がバッファに保持される。

  • データセットキャンセルメソッドを呼ぶことは新しいレコードを除く(挿入)、またはその以前の値に戻す(編集)
  • ポストメソッドを呼ぶことは値(edit)、またはレコードを保存(insert)する

あるデータセット派生ではデータは直ちにデータベースに書き込まれるのに対し、別のデータベースではすべての変更がさらに保存されるまで、アップデートリストにおかれるだろう。最後にデータが書き込まれても、それらが永続的にデータベースに書き込ませるために「commit」を呼ぶことがあるかもしれない。これらのすべてはまた、データセット派生で異なっているため、使っているものの子細を調べること。

新しいレコードを挿入する

TDataSet派生にデータを挿入するためにはInsertメソッドを用いるべきである。その後、フィールドに値をセットし、最後には新しいレコードを書き込むために、以下の例のようにPostを呼ぶことができる。この例ではまた、ファイルからBLOBデータを挿入する仕方を示している。ストリームデータからデータを取り込むためにLoadFromStreamを用いることもできる。

  MyDataset.Insert;
  MyDataset.Fields[0].AsInteger := 4; //整数値フィールド
  MyDataset.Fields[1].AsString := 'First Name'; //文字列フィールド
  (MyDataset.Fields[2] as TBlobField).LoadFromFile('SomeBlobfile.bin'); //BLOB(バイナリ)フィールド
  MyDataset.Post;

テーブルの中の1つの特定のレコードにジャンプする仕方

テーブルのすべてのレコードを選択した後

テーブルのすべてのレコードを選択し、素早くその中に飛び込む欲求でSELECT * FROMを使うと、インデクスを作成し、それを探さなければならないかもしれない。これは望むレコードのみを選択するよりもより効果的である。

望むレコードのみを選択すること

特定のレコードにジャンプし、それのみを選択する1つの早い解決法は例えばこのようなものである:

var
  MyDataset: TSQLQuery;
begin
  //...
  MyDataset.FieldDefs.Add('SessionId', ftLargeint);
  MyDataset.FieldDefs.Add('GameEvent', ftLargeint);
  MyDataset.FieldDefs.Add('TableId', ftInteger);
  MyDataset.FieldDefs.Add('LoggedIn', ftBoolean);
  MyDataset.FieldDefs.Add('PlayerId', ftInteger);
  MyDataset.Active := False;
  { パラメータ化されていないフォーマット 'を含むテキストや日付では問題に出くわすかもしれない
  SQLText := Format('select * from "GameSession" WHERE "SessionId"=%d', [ASessionId]);
  }
  // 解決法: パラメータ化されたクエリ:
  // 実際, これがループの中で行われると、1回だけSQL.Textをセットするだけでよい
  // そしてパラメタ値だけ変更する
  MyDataset.SQL.Text := 'select * from "GameSession" WHERE "SessionID"=:SessionID');
  MyDataSet.ParamByName('SessionID').AsLargeInt := ASessionID;
  try
    MyDataset.Active := True;
  except
    //...
  end;

そして、このようなことで情報を読むことができる:

 lPlayerId := MyDataset.Fields[4].AsInteger;

フィルタリング

望むサブセットにレコードを限定することでデータセットをフィルタリングできる(例えば、Smithで始まるすべての姓)。

ロケート/ルックアップ

Non-SQLデータセットでより頻繁に用いられるが(例えば、TParadoxDataSetTDbf)、locate/lookupを用いることでレコード間をジャンプできる。.

TSQLQueryを用いる

TSQLQueryに関する詳細な情報はWorking With TSQLQuery/jaを見ること

エクスポート

FPC/Lazarusはデータセットを様々な形式で出力する機能を持っている。例えば、以下を参照のこと

もちろん、これを手動的に行うこともできる(例えば、fpspreadsheetを用いてExcel形式で出力するにはFPSpreadsheet#Converting_a_database_to_a_spreadsheetを参照)

データコントロール

DataControl.png

これらのコントロールのいずれを用いるときにも、そのコントロールをフォームに加え、少なくともデータソースプロパティを設定すること。他のプロパティはのちに述べる。

データソースコントロール

tdatasource 150.png

このコントロールは現在リンクされたどのコントロールが有効なのかを見ている。データソースコントロールはデータセット(例えば、TSQLQuery)にリンクされなければならない。

単一フィールドコントロール

これらのコントロールは単一のフィールドに付随する。データソース同様にフィールド名を設定する。これらのコントロールに含まれるのは:

  • DBText control テキストフィールドを表示する(読み取りのみ、縁なし)
  • DBEdit control エディットボックスとしてテキストフィールドを表示 / 編集する
  • DBMemo control 複数行のエディットボックスでテキストフィールドを表示 / 編集する
  • DBImage control BLOBとしてデータベースに保存された絵を表示する。注意: デフォルトでは, LazarusはデータベースBLOBフィールドに イメージデータの前にイメージタイプとヘッダを保存する。これはDelphiとは異なっている。しかし、TDBImageをDelphi互換にすることができる: Lazarus For Delphi Users#TDBImageを参照
  • DBListBox controlDBComboBox ControlコントロールのItemsプロパティの中の値のリストからデータベースフィールドに値を挿入できる
  • DBLookupListBox controlDBLookupComboBox control、またTDBLookupComboBox参照、別のテーブルのルックアップフィールドの内容を表示することによりデータベースに値を挿入できる。これらのコントロールは1つのフィールドにその結果を保存するが、ルックアップ値のためにもう1つのフィールドが必要である。注意: 少なくともDBLookupComboBoxについては, FPC 2.6.0ではデータソースの中にリストフィールドも存在していることが必要であるというバグがある。これは何もしないデータソースのデータセットのリストフィールドと同じ名前の計算されたフィールドを宣言することによって回避できる。
  • DBCheckBox control チェックボックスをチェック / クリアすることにより、ブール値のフィールドを表示 / 編集する。
  • DBRadioGroup control 通常のラジオグループとして項目を表示; マッチした値のリストから読み取る / 設定する
  • DBCalendar control カレンダーパネルから日付フィールドを表示 / 編集する
  • DBGroupBox control

DBGrid コントロール

tdbgrid 150.png

このコントロールは数多いフィールドを行/列形式で表現する - 実際デフォルトではそれらすべてを表示する。しかし、特定のフィールドに制限する、およびそれぞれのカラムの幅とタイトルを設定するためにcolumns collection に見出しを設定することができる。

これに言及したドキュメンテーションとは別に, さらなる細目がここで見られるGrids Reference Page#TCustomDBGrid

Navigator コントロール

tdbnavigator 150.png

このコントロールはデータセットに直接のコントロールを提供する。これにより:

  • 次の、前の、もしくは、レコードの始まり、終わりに移動する
  • 新しいレコードを加える(dataset.insertメソッドと同等)
  • データセットを編集モードにする
  • レコードを削除する
  • 現在の変更を実行、あるいはキャンセルする
  • データをリフレッシュする(マルチユーザーデータベースアプリケーションで有用である)

鍵となるプロパティ:

  • 可視ボタン: ユーザーができることを制御する。例えば、削除が許されていないと削除ボタンを不可視にする。もしDBGridが同じデータセットに設けられていると、次、前ボタンの要不要を決めなければならないかもしれない。
  • 幅: もしすべてのボタンを表示しないのであれば、その幅を高さ*可視ボタンに設定できる。

FPCデータベース稼働テスト

Free Pascalデータベースコンポーネントにはfpcunitベースのテストフレームワークである、機能を確認するために用いられるdbtestframeworkが含まれている。FPCソースツリーのsource\packages\fcl-db\tests\ディレクトリを見てほしい。そこに含まれているのは、いくつかのほかのテスト同様に、様々なデータベーステスト(例えば、データベースエクスポートのテスト)と、コンポーネントで実行されるテストフレームワークである。

あるデータベースのテストフレームワークを実行するには:

1. 保存 source\packages\fcl-db\tests\database.ini.txtをsource\packages\fcl-db\tests\database.iniに。

2. 変更 source\packages\fcl-db\tests\database.iniの中にあるうちの使うデータベースを選ぶ。

Interbase/Firebirdの例は:

[Database]
type=interbase

3. 同じファイルで使うデータベースに対する設定を状況に合わせて調整する。例えば、先にInterbaseを選んだなら:

[interbase]
connector=sql
connectorparams=interbase
; データベースの名前/パス (注意: データベースは既に存在している必要がある)
; エイリアスを用いることができる(Firebirdドキュメンテーションのaliases.confを参照)
name=testdb
user=sysdba
password=masterkey
; ホスト名は様々だろう:
; 組み込みのFirebirdデータベースの場合は空白にしておくことができる
hostname=192.168.0.42

4. source\packages\fcl-db\tests\dbtestframework.pasをコンパイルして実行する(またLazarusを用いてGUIバージョンのdbtestframework_guiをコンパイル、実行もできる)もしWindowsで組み込みのデータベース(例えば、Firebird 組み込み あるいは sqlite)を用いている場合、事前に必要とされるDLLファイルをそのディレクトリにコピーしておくこと。出力はXMLフォーマット(もしくは、dbtestframework_guiを用いた場合ディスプレイへ)である。

詳細はsource\packages\fcl-db\tests\README.txtを参照されたい。

Database packages contained in Lazarus

sqldblaz.lpk

sqldb.png

このパッケージは異なるデータベースへのアクセスを提供する。これらに含まれるものに:

  • Interbase/Firebird
  • Microsoft SQL Server (WindowsのLazarus/FPC x64を除く)
  • MySQL
  • Oracle (WindowsのLazarus/FPC x64を除く)
  • PostgreSQL (WindowsのLazarus/FPC x64を除く)
  • SQLite (Spatialite拡張を含む)
  • Sybase ASE (Adaptive Server Enterprise - Sybase ASAと混同しないこと) (WindowsのLazarus/FPC x64を除く)
  • ODBCドライバを用いるすべてのデータベース

これらのコンポーネント(TSQLQuery, TSQLTransaction, TIBConnection, TODBCConnection, TOracleConnection, TMSSQLConnection, TMySQL40Connection, TMySQL41Connection, TMySQL50Connection, TPQConnection, TSybaseConnection) はコンポーネントパレットの「SQLdb」にある

dbflaz.lpk

このパッケージはdBaseとFoxProデータベースへのアクセスを提供する。Lazarus Tdbf Tutorialでさらなる情報が得られる。TDbfコンポーネントはコンポーネントパレットのData Access tabにある。

sqlitelaz.lpk

このパッケージはSQLiteデータベースに対するアクセスを提供する。さらなる情報はLazarus Database Overviewで得られる。

sdflaz.lpk

コンポーネントTSdfDataSetはコンポーネントパレットのData Access tabにある。

lazreport.lpk

レポートジェネレータのホームページは http://lazreport.sourceforge.net/である。 さらなる情報は ここにある。LazReportはPrinter4Lazarusパッケージに依存する。リビジョン11950 LazReportはLazarus SVN レポジトリに含まれる。

lazdbexport.lpk

lazdbexport参照。

外部パッケージ / ライブラリ

Zeosデータベースオブジェクト

これらのコンポーネントは異なるデータベースに対するアクセスを提供する。さらなる情報はここで得られる。このwikiにはまたZeos tutorialがある。

Pascalデータオブジェクト

現在ある別の選択肢である。

サポート:

  • MySQL 4.1と5.0
  • sqlite-2とsqlite-3
  • pgsql-8.1
  • interbase-5, interbase-6, firebird-1.0, firebird-1.5, firebird-1.5E, firebird-2.0, firebird-2.0E
  • mssql (Microsoftライブラリ) and sybase (FreeTDSライブラリ)
  • oracle

PHPデータオブジェクトに触発されたPascalデータオブジェクトというデータベース APIによって、ステートメント、バインディング、ストアドプロシージャがサポートされる。 この新しいAPIを用いるために必要なすべてのコードとドキュメンテーションはSourceforgeにある:

http://pdo.sourceforge.net

TPSQL

これらのコンポーネントはPostgreSQLに対するTCP/IP経由のアクセスを提供する。さらなる情報はこのページで得られる。

FIBL

これらのコンポーネントはInterbaseとFirebirdデータベースに対するアクセスを提供する。ホームページは[3]

IBX

IBX For LazarusはFirebirdデータベースに対するアクセスを提供するIBX参照。

FBLib Firebird ライブラリ

FBLibはFirebirdリレーショナルデータベースに対するBorland Delphi/Kylix、Free Pascal、Lazarusへの直接アクセスのためのオープンソースのデータ非感知型ライブラリである。

現在の特色には以下が含まれる:

  • Firebird 1.0.x, 1.5.x and 2.x ClassicまたはSuperServerへの直接アクセス
  • マルチプラットフォーム[Win32、Gnu/Linu、FreeBSD)
  • 「fbclient」もしくは「gds32」による自動クライアントライブラリ選択
  • パラメータクエリ
  • SQL Dialect 1/3のサポート
  • LGPLライセンス
  • メタデータの抽出
  • 簡単なスクリプトパーサ
  • 最終のEXEファイルにたった100-150 KBの追加
  • BLOBフィールドサポート
  • HTML SQLスクリプトへのデータエクスポート
  • サービスマネージャ(バックアップ、レストア、gfix...)
  • イベントアラート

FBLibのウェブサイトでドキュメンテーションをダウンロードできる。

Unified Interbase

UIB はInterbase、Firebird、YAFFILデータベースにに対するアクセスを提供する。ホームページはwww.progdigy.com。 SVNレポジトリはhttps://uib.svn.sourceforge.net/svnroot/uib以下で得られる。

TechInsite Object Persistence Framework (tiOPF)

tiOPFに対するさらなる情報はpageで得られる。

Advantage TDataSet Descendant

The Advantage TDataSet DescendantはAdvantage Database Serverに接続し(そしてテーブルを開く)手段を提供する。Advantageは柔軟で管理不要のデータベースで Clipper、FoxPro、Visual FoxPro 9 DBFファイルフォーマットに対するクライアント/サーバ、Peer-to-peerファイルフォーマット、 同様に新しい特徴を持つ独自ファイルフォーマットへの移行パスを提供する。

Key Features:

  • 利用料無料の、peer-to-peerデータベースアクセスをクライアントサーバへの移行
  • マルチプラットフォーム(クライアントはWindows、Linux、サーバはWindows、Linux、NetWare)
  • ナビゲーショナル、SQLデータベースアクセス
  • フルテキストサーチエンジン
  • テーブル、インデクス、メモ、通信暗号化
  • TDatasetコンポーネントとの互換性
  • オンラインバックアップ
  • サーバは冗長化をサポート

さらなる情報はAdvantage Database Server参照。

ZMSQL、sql強化されたインメモリデータベース

さらなる情報はZMSQL wikiページを参照。

ZMSQLはオープンソースのセミコロンをデリミタとする値のテーブルで操作されるFree Pascal(FPC)に向けられたインメモリメータベースである。 完全にPascalで書かれており、外部ライブラリの依存性がない。SQL実装にはJanSQLエンジンを用いている。

これにより:

  • 平文テキストテーブル、「から」、また、「へ」、入出力される。
  • データのクエリにSQLを用いる
  • 他のデータセットからデータとスキーマをコピーする
  • あらかじめ決められたフィールド定義またはその場でフィールドを生成する
  • マスタ/詳細フィルタリング
  • 参照完全性
  • パラメータ化されたクエリ

ダウンロードにはソースコード、いくつかのデモアプリケーション、コンポーネントの特徴、readmeが含まれる。

以下も参照のこと