Difference between revisions of "Databases/ja"
Tag: Undo |
|||
(43 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | {{Databases}} | ||
+ | |||
{{Japanese Menu}} | {{Japanese Menu}} | ||
− | |||
− | {{Infobox databases}} | + | {{Infobox databases/ja}} |
− | このページは「[[Lazarus]]と'''データベース''' | + | |
− | クライアントライブラリがインストールされているデータベースコンポーネント(もしデータベースがクライアントライブラリを必要とするなら) | + | このページは「[[Lazarus]]と'''データベース'''」の概要である。以下の表にはサポートされているデータベースが載せられている。 |
+ | |||
+ | クライアントライブラリがインストールされているデータベースコンポーネント(もしデータベースがクライアントライブラリを必要とするなら)に限る、さもないとLazarusはファイルがないために起動ができない可能性がある。そのコンポーネントのアンインストールが不可能なら、Lazarusを再インストールする必要がある。 | ||
=== サポートされるデータベース === | === サポートされるデータベース === | ||
Line 46: | 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''']||[[ | + | |[http://www.sqlite.org/ '''SQLite''']||[[SQLdb|SQLdb]]||はい||いいえ|| sqlite3 || すべて |
|---- | |---- | ||
− | |[http://www.sqlite.org/ '''SQLite''']||[[ | + | |[http://www.sqlite.org/ '''SQLite''']||[[SQLite/ja|SQLite(3)Laz]]||はい||いいえ|| sqlite2,sqlite3 || すべて |
|---- | |---- | ||
|'''Text files'''||sdf||いいえ||いいえ|| - || すべて | |'''Text files'''||sdf||いいえ||いいえ|| - || すべて | ||
Line 55: | Line 58: | ||
|} | |} | ||
− | <cite id="supported_db_1">[[Databases#supported_db_1_back|注意 (1):]]</cite> WindowsとLinux(おそらくmacOSも) | + | <cite id="supported_db_1">[[Databases#supported_db_1_back|注意 (1):]]</cite> WindowsとLinux(おそらくmacOSも)では組み込みバージョンのFirebirdが利用可能、またはWindows/Unix/macOS/FreeBSD/他のFirebirdがサポートするプラットフォームで稼働するFirebirdサーバに接続可能 |
<cite id="supported_db_2">[[Databases#supported_db_2_back|注意 (2):]]</cite> これらの接続にはドライバとしてFreeTDSライブラリが用いられる。FreeTDSドキュメンテーションはドライバが少なくともこれらのプラットフォームで構築されるはずであるとしている。Windows x86およびx64バージョンは例えば[ftp://ftp.freepascal.org/fpc/contrib/windows/dblib_x32.zip]および[ftp://ftp.freepascal.org/fpc/contrib/windows/dblib_x64.zip]からダウンロードできる | <cite id="supported_db_2">[[Databases#supported_db_2_back|注意 (2):]]</cite> これらの接続にはドライバとしてFreeTDSライブラリが用いられる。FreeTDSドキュメンテーションはドライバが少なくともこれらのプラットフォームで構築されるはずであるとしている。Windows x86およびx64バージョンは例えば[ftp://ftp.freepascal.org/fpc/contrib/windows/dblib_x32.zip]および[ftp://ftp.freepascal.org/fpc/contrib/windows/dblib_x64.zip]からダウンロードできる | ||
Line 62: | Line 65: | ||
== データベースクライアントへのバインディング == | == データベースクライアントへのバインディング == | ||
− | + | もしクライアントライブラリを必要とするデータベースを用いたいときは、そのライブラリをインストールしなければならない。今プログラミングを行っているコンピュータのみならず、アプリケーションを動作させるコンピュータにおいてもである。あるデータベース(特にMySQL)はそのバインディングが、インストールされたライブラリと同じバージョンからアプリケーションでコンパイルされた場合でのみ動作することに注意されたい。 | |
データベース開発元のウェブサイトでこれらのライブラリ(*nixシステムでは .so、Windowsでは .dllsファイル)のインストールの仕方を見つけることができる。バインディングユニットはFPCソースのpackages/baseディレクトリで見つけることができる。それらはmysql_connectのように基本的にそれぞれのデータベースで完全に異なるクライアントAPIからなっている。これらのユニットを用いてデータベースアプリケーションを書くことができるが、Lazarus DB-unitを用いるより通常工数が必要であり、バグに対して敏感である。 | データベース開発元のウェブサイトでこれらのライブラリ(*nixシステムでは .so、Windowsでは .dllsファイル)のインストールの仕方を見つけることができる。バインディングユニットはFPCソースのpackages/baseディレクトリで見つけることができる。それらはmysql_connectのように基本的にそれぞれのデータベースで完全に異なるクライアントAPIからなっている。これらのユニットを用いてデータベースアプリケーションを書くことができるが、Lazarus DB-unitを用いるより通常工数が必要であり、バグに対して敏感である。 | ||
+ | |||
これらのバインディングライブラリのほとんどはクライアントライブラリにハードリンクされている。アプリケーションがこれらのユニットを1つとコンパイルされるとクライアントライブラリがそのワークステーションで利用できないとアプリケーション全体がリンクされないことを意味する。これは、もし、-例えばコンピュータのMySQLクライアント、がインストールされていない状態で、プログラムの中でmysql4.ppユニットが使われているとそのプログラム実行ファイルは生成されないであろうことを示す。 | これらのバインディングライブラリのほとんどはクライアントライブラリにハードリンクされている。アプリケーションがこれらのユニットを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.)。言い換えれば: | + | もし、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.)。言い換えれば: これらのデータベースにとって、開発機にクライアントライブラリをインストールする必要があり、また、アプリケーションとともに(運用機にも)クライアントライブラリをインストールする必要がある。 |
+ | |||
そのような問題を避けるため、いくつかのパッケージはまた、ライブラリに動的にリンクできるようになっている。それらのライブラリに対するどのような呼び出しの前にも、そのユニットは「初期化」されなければならない。データベースクライアントがインストールされていないコンピュータではこの初期化が失敗する。プロクラムがクライアントライブラリを使う用意ができると、そのユニットは「解放」されなければならない。 | そのような問題を避けるため、いくつかのパッケージはまた、ライブラリに動的にリンクできるようになっている。それらのライブラリに対するどのような呼び出しの前にも、そのユニットは「初期化」されなければならない。データベースクライアントがインストールされていないコンピュータではこの初期化が失敗する。プロクラムがクライアントライブラリを使う用意ができると、そのユニットは「解放」されなければならない。 | ||
Line 71: | Line 76: | ||
=== データセットとデータベースの区別 === | === データセットとデータベースの区別 === | ||
多くのデータベースプログラミングの初心者はデータセットとデータベースの区別をしない。Firebird、Interbase、Oracle、Sybase、Microsoft Accessなどの多くのデータベースがある。 | 多くのデータベースプログラミングの初心者はデータセットとデータベースの区別をしない。Firebird、Interbase、Oracle、Sybase、Microsoft Accessなどの多くのデータベースがある。 | ||
− | もっとも単純に概念化すればLazarusのデータセット( | + | |
+ | もっとも単純に概念化すればLazarusのデータセット(TDatasetの派生、例えば、TSQLQueryなど)をデータベースから選んだレコードのコピーの一部と考えることである。以下のSQL文を用いてクエリを行ったとき: | ||
<syntaxhighlight lang=sql> | <syntaxhighlight lang=sql> | ||
Line 78: | Line 84: | ||
SQLQuery1をデータベース中のtable1を開き100と100に満たないid値をSQLQuery1にコピーする。 | SQLQuery1をデータベース中のtable1を開き100と100に満たないid値をSQLQuery1にコピーする。 | ||
+ | |||
このデータセット内容はTDatasetに順々に取得されたTDatasourceを介してTDBGrid、TDBEdiなどのデータベースコントロールを用いて視覚化される。 | このデータセット内容はTDatasetに順々に取得されたTDatasourceを介してTDBGrid、TDBEdiなどのデータベースコントロールを用いて視覚化される。 | ||
以下で説明されるinsert、edit、postなどのようなコマンドを用いてこのデータセットの内容を変更できるが、基本的にこれらの操作はデータセットに対してであり、データベーステーブル自身に対して行われるわけではない。 | 以下で説明されるinsert、edit、postなどのようなコマンドを用いてこのデータセットの内容を変更できるが、基本的にこれらの操作はデータセットに対してであり、データベーステーブル自身に対して行われるわけではない。 | ||
+ | |||
変更をデータベースに対して永続的に行うには、TDataSet.ApplyUpdatesを呼ぶまたは、SQL構文insert、update(これらはTDataset.insert、TDataset.updateとは異なる)を実行するなど、もう一手間必要である。 | 変更をデータベースに対して永続的に行うには、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プロパティを用いること) | **現在の行に対する特定のデータ値にアクセスする(AsString、AsIntegerなどといったAsプロパティを用いること) | ||
− | * | + | * 以下の双方を用いてTDatasetの派生のフィールドにアクセスする: |
**フィールドプロパティ即ち、Field[0]は最初のフィールとである | **フィールドプロパティ即ち、Field[0]は最初のフィールとである | ||
**フィールの名前によるメソッド即ち、FieldByName('年齢') はデータベースフィールド'年齢'と呼ばれるデータベースフィールドに紐づけられたフィールドを返す | **フィールの名前によるメソッド即ち、FieldByName('年齢') はデータベースフィールド'年齢'と呼ばれるデータベースフィールドに紐づけられたフィールドを返す | ||
− | フィールドの型については[[データベースフィールド型]] | + | フィールドの型については[[Database_field_type/ja|データベースフィールド型]]の一覧を参照のこと。 |
=== 視覚的(データ感知型の)コントロールを用いる === | === 視覚的(データ感知型の)コントロールを用いる === | ||
− | + | 「RAD」スタイルのLazarusアプリケーションで簡単にデータベースを用いるために、通常はデザインの時にデータセット派生を設定しデータ感知型コントロールを用いる。これを行うためには: | |
− | * | + | * 選択するデータセット派生を、サポートするコンポーネントとともにフォームに加え開くこと(「Active」プロパティをtrueにする)。 |
− | * [[TDataSource]] コンポーネントを ([[Data Access tab]]から) フォームに加えデータセットと「リンク」させる(DataSetプロパティを設定する)。 | + | * [[TDataSource/ja]] コンポーネントを ([[Data Access tab/ja]]から) フォームに加えデータセットと「リンク」させる(DataSetプロパティを設定する)。 |
− | * データ感知型コントロールを[[Data Controls tab]]からフォームに加え、それぞれを( | + | * データ感知型コントロールを[[Data Controls tab/ja]]からフォームに加え、それぞれを(データセットではなく)DataSourceコンポーネントにリンクすること。 |
* ほとんどのコントロールは1つのフィールドにリンクされるため、それぞれのタブのためにフィールドをセットすること。 | * ほとんどのコントロールは1つのフィールドにリンクされるため、それぞれのタブのためにフィールドをセットすること。 | ||
− | コントロールの詳細は以下の [[# | + | コントロールの詳細は以下の [[#データコントロール]]を見ること |
===データセット状態=== | ===データセット状態=== | ||
Line 129: | Line 141: | ||
|新しい行が挿入されている。これに値をセットすることができる。Postが実行されるまでレコードは保存されない | |新しい行が挿入されている。これに値をセットすることができる。Postが実行されるまでレコードは保存されない | ||
|} | |} | ||
− | 他の状態はかなり一時的で通常「自動的に」扱われる。それらは内部的に用いられ、より複雑なコードである。もしデータベースがデータだけを見ており、設計時にデータセットを開くのであれば、この状態は、データセットはほとんどdsBrowseにあるため、たいていは無視できる。しかし、ほとんどのアプリケーションはいずれかの段階でデータを変更する必要がある。もし、データ感知型コントロールを用いている場合、それらはこの多くを自動的に行うだろう。例えば、[[TDBEdit]]コントロールでテキストを変更すると、すでにdsEdit、あるいはdsInsert状態にいなければ、それはデータセットをdsEdit状態にする。現在の状態がdsEditもしくはdsInsertの時に他のレコードに「スクロール」するとそのレコードは「post」され、データセットはdsBrowseに戻るだろう。しかし、データセットをコードからアクセスしていると、たいてい同様にコードの中から状態を変更する必要が生じるだろう。[[TDBNavigator]]コントロール(以下参照)は明示的に状態を変えることができる。 | + | 他の状態はかなり一時的で通常「自動的に」扱われる。それらは内部的に用いられ、より複雑なコードである。もしデータベースがデータだけを見ており、設計時にデータセットを開くのであれば、この状態は、データセットはほとんどdsBrowseにあるため、たいていは無視できる。しかし、ほとんどのアプリケーションはいずれかの段階でデータを変更する必要がある。もし、データ感知型コントロールを用いている場合、それらはこの多くを自動的に行うだろう。例えば、[[TDBEdit/ja]]コントロールでテキストを変更すると、すでにdsEdit、あるいはdsInsert状態にいなければ、それはデータセットをdsEdit状態にする。現在の状態がdsEditもしくはdsInsertの時に他のレコードに「スクロール」するとそのレコードは「post」され、データセットはdsBrowseに戻るだろう。しかし、データセットをコードからアクセスしていると、たいてい同様にコードの中から状態を変更する必要が生じるだろう。[[TDBNavigator/ja]]コントロール(以下参照)は明示的に状態を変えることができる。 |
===データセット更新状態=== | ===データセット更新状態=== | ||
Line 155: | Line 167: | ||
===データセット更新状態=== | ===データセット更新状態=== | ||
更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 | 更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 | ||
− | '''例''' ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete) | + | '''例''' ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法: |
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
Line 174: | Line 186: | ||
* usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される | * usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される | ||
* usDeleted: レコードはデータベースに存在するが、局所的に削除される | * usDeleted: レコードはデータベースに存在するが、局所的に削除される | ||
− | |||
===ポストとキャンセル=== | ===ポストとキャンセル=== | ||
もしレコードを編集、挿入すると新しい値がバッファに保持される。 | もしレコードを編集、挿入すると新しい値がバッファに保持される。 | ||
*データセットキャンセルメソッドを呼ぶことは新しいレコードを除く(挿入)、またはその以前の値に戻す(編集) | *データセットキャンセルメソッドを呼ぶことは新しいレコードを除く(挿入)、またはその以前の値に戻す(編集) | ||
− | *ポストメソッドを呼ぶことは値(edit) | + | *ポストメソッドを呼ぶことは値(edit)、またはレコードを保存(insert)する |
− | + | あるデータセット派生ではデータは直ちにデータベースに書き込まれるのに対し、別のデータベースではすべての変更がさらに保存されるまで、アップデートリストにおかれるだろう。最後にデータが書き込まれても、それらが永続的にデータベースに書き込ませるために「commit」を呼ぶことがあるかもしれない。これらのすべてはまた、データセット派生で異なっているため、使っているものの子細を調べること。 | |
− | |||
=== 新しいレコードを挿入する === | === 新しいレコードを挿入する === | ||
− | [[TDataSet]] | + | [[TDataSet]]派生にデータを挿入するためには[http://www.freepascal.org/docs-html/fcl/db/tdataset.insert.html Insert]メソッドを用いるべきである。その後、フィールドに値をセットし、最後には新しいレコードを書き込むために、以下の例のようにPostを呼ぶことができる。この例ではまた、ファイルからBLOBデータを挿入する仕方を示している。ストリームデータからデータを取り込むためにLoadFromStreamを用いることもできる。 |
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
MyDataset.Insert; | MyDataset.Insert; | ||
Line 238: | Line 248: | ||
* .Filterを使う: | * .Filterを使う: | ||
− | ** [[TDbf]]、[[TBufDataset]] | + | ** [[TDbf]]、[[TBufDataset]] と派生、([[TSQLQuery/ja]]を含む)はTDBFフィルタリングパーサを用いる。これを使用する詳細は[[Lazarus Tdbf Tutorial#Expressions]]を見ること。 |
** [[TMemDataset]] は .Filterをサポートしない | ** [[TMemDataset]] は .Filterをサポートしない | ||
* 独自のフィルタ関数をプログラムできる[[callbOnFilterack]]/イベントプロシージャを用いること | * 独自のフィルタ関数をプログラムできる[[callbOnFilterack]]/イベントプロシージャを用いること | ||
Line 246: | Line 256: | ||
=== TSQLQueryを用いる === | === TSQLQueryを用いる === | ||
− | [[TSQLQuery]]に関する詳細な情報は[[Working With TSQLQuery]]を見ること | + | [[TSQLQuery]]に関する詳細な情報は[[Working With TSQLQuery/ja]]を見ること |
===エクスポート=== | ===エクスポート=== | ||
Line 332: | Line 342: | ||
password=masterkey | password=masterkey | ||
; ホスト名は様々だろう: | ; ホスト名は様々だろう: | ||
− | ; | + | ; 組み込みのFirebirdデータベースの場合は空白にしておくことができる |
hostname=192.168.0.42 | hostname=192.168.0.42 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | 4. source\packages\fcl-db\tests\dbtestframework.pasをコンパイルして実行する(またLazarusを用いてGUIバージョンのdbtestframework_guiをコンパイル、実行もできる) | + | 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を参照されたい。 | 詳細はsource\packages\fcl-db\tests\README.txtを参照されたい。 | ||
Line 363: | Line 373: | ||
=== sqlitelaz.lpk === | === sqlitelaz.lpk === | ||
− | + | このパッケージはSQLiteデータベースに対するアクセスを提供する。さらなる情報は[[Lazarus Database Overview/ja]]で得られる。 | |
− | |||
− | このパッケージはSQLiteデータベースに対するアクセスを提供する。さらなる情報は[[Lazarus Database Overview]]で得られる。 | ||
=== sdflaz.lpk === | === sdflaz.lpk === | ||
Line 459: | Line 467: | ||
これにより: | これにより: | ||
− | * | + | *平文テキストテーブル、「から」、また、「へ」、入出力される。 |
*データのクエリにSQLを用いる | *データのクエリにSQLを用いる | ||
*他のデータセットからデータとスキーマをコピーする | *他のデータセットからデータとスキーマをコピーする | ||
Line 471: | Line 479: | ||
== 以下も参照のこと == | == 以下も参照のこと == | ||
− | * [[Portal:Databases|Database Portal]] | + | * [[Portal:Databases/ja|Database Portal]] |
− | * [[Lazarus DB Faq]] | + | * [[Lazarus DB Faq/ja]] |
[[Category:Databases]] | [[Category:Databases]] |
Latest revision as of 16:50, 31 March 2024
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
italiano (it) │
日本語 (ja) │
português (pt) │
русский (ru) │
中文(中国大陆) (zh_CN) │
参照: チュートリアル/練習となる記事: 各種データベース |
このページは「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で始まるすべての姓)。
- .Filterを使う:
- TDbf、TBufDataset と派生、(TSQLQuery/jaを含む)はTDBFフィルタリングパーサを用いる。これを使用する詳細はLazarus Tdbf Tutorial#Expressionsを見ること。
- TMemDataset は .Filterをサポートしない
- 独自のフィルタ関数をプログラムできるcallbOnFilterack/イベントプロシージャを用いること
ロケート/ルックアップ
Non-SQLデータセットでより頻繁に用いられるが(例えば、TParadoxDataSet、TDbf)、locate/lookupを用いることでレコード間をジャンプできる。.
TSQLQueryを用いる
TSQLQueryに関する詳細な情報はWorking With TSQLQuery/jaを見ること
エクスポート
FPC/Lazarusはデータセットを様々な形式で出力する機能を持っている。例えば、以下を参照のこと
- fpXMLXSDExport
- fpdbfexport
- the other components on the Data Export tab
もちろん、これを手動的に行うこともできる(例えば、fpspreadsheetを用いてExcel形式で出力するにはFPSpreadsheet#Converting_a_database_to_a_spreadsheetを参照)
データコントロール
これらのコントロールのいずれを用いるときにも、そのコントロールをフォームに加え、少なくともデータソースプロパティを設定すること。他のプロパティはのちに述べる。
データソースコントロール
このコントロールは現在リンクされたどのコントロールが有効なのかを見ている。データソースコントロールはデータセット(例えば、TSQLQuery)にリンクされなければならない。
単一フィールドコントロール
これらのコントロールは単一のフィールドに付随する。データソース同様にフィールド名を設定する。これらのコントロールに含まれるのは:
- DBText control テキストフィールドを表示する(読み取りのみ、縁なし)
- DBEdit control エディットボックスとしてテキストフィールドを表示 / 編集する
- DBMemo control 複数行のエディットボックスでテキストフィールドを表示 / 編集する
- DBImage control BLOBとしてデータベースに保存された絵を表示する。注意: デフォルトでは, LazarusはデータベースBLOBフィールドに イメージデータの前にイメージタイプとヘッダを保存する。これはDelphiとは異なっている。しかし、TDBImageをDelphi互換にすることができる: Lazarus For Delphi Users#TDBImageを参照
- DBListBox controlとDBComboBox ControlコントロールのItemsプロパティの中の値のリストからデータベースフィールドに値を挿入できる
- DBLookupListBox controlとDBLookupComboBox control、またTDBLookupComboBox参照、別のテーブルのルックアップフィールドの内容を表示することによりデータベースに値を挿入できる。これらのコントロールは1つのフィールドにその結果を保存するが、ルックアップ値のためにもう1つのフィールドが必要である。注意: 少なくともDBLookupComboBoxについては, FPC 2.6.0ではデータソースの中にリストフィールドも存在していることが必要であるというバグがある。これは何もしないデータソースのデータセットのリストフィールドと同じ名前の計算されたフィールドを宣言することによって回避できる。
- DBCheckBox control チェックボックスをチェック / クリアすることにより、ブール値のフィールドを表示 / 編集する。
- DBRadioGroup control 通常のラジオグループとして項目を表示; マッチした値のリストから読み取る / 設定する
- DBCalendar control カレンダーパネルから日付フィールドを表示 / 編集する
- DBGroupBox control
DBGrid コントロール
このコントロールは数多いフィールドを行/列形式で表現する - 実際デフォルトではそれらすべてを表示する。しかし、特定のフィールドに制限する、およびそれぞれのカラムの幅とタイトルを設定するためにcolumns collection に見出しを設定することができる。
これに言及したドキュメンテーションとは別に, さらなる細目がここで見られるGrids Reference Page#TCustomDBGrid
このコントロールはデータセットに直接のコントロールを提供する。これにより:
- 次の、前の、もしくは、レコードの始まり、終わりに移動する
- 新しいレコードを加える(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
このパッケージは異なるデータベースへのアクセスを提供する。これらに含まれるものに:
- 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/jaで得られる。
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にある:
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が含まれる。