Difference between revisions of "Databases/ja"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{Japanese Menu}} {{Databases}} {{Infobox databases}} このページは'Lazarusと'''データベース''''のイントロダクションである。以下の表には...")
 
(Undo revision 159538 by Ariben (talk))
Tag: Undo
 
(107 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
{{Databases}}
 +
 
{{Japanese Menu}}
 
{{Japanese Menu}}
{{Databases}}
 
  
{{Infobox databases}}
+
{{Infobox databases/ja}}
このページは'[[Lazarus]]と'''データベース''''のイントロダクションである。以下の表にはサポートされているデータベースが載せられている。
+
 
クライアントライブラリがインストールされているデータベースコンポーネント(もしデータベースがクライアントライブラリを必要とするなら)に限る、さもないとLazarusはファイルがないために起動ができない可能性がある。その時は可能ならコンポーネントをアンインストールし、Lazarusを再インストールする必要がある。
+
このページは「[[Lazarus]]と'''データベース'''」の概要である。以下の表にはサポートされているデータベースが載せられている。
 +
 
 +
クライアントライブラリがインストールされているデータベースコンポーネント(もしデータベースがクライアントライブラリを必要とするなら)に限る、さもないとLazarusはファイルがないために起動ができない可能性がある。そのコンポーネントのアンインストールが不可能なら、Lazarusを再インストールする必要がある。
  
=== Supported databases ===
+
=== サポートされるデータベース ===
 
<!-- This is sorted alphabetically by default. Please insert in proper order!!! -->
 
<!-- This is sorted alphabetically by default. Please insert in proper order!!! -->
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
Line 32: Line 35:
 
|[http://www.microsoft.com/sqlserver/ '''Microsoft SQL Server''']||[[mssqlconn|SQLdb]]||はい||はい||6-||FPC 2.6.2+. Linux, macOS, Win32, おそらく*BSD、おそらくSolaris<sup id="supported_db_2_back">[[#supported_db_2|2]]</sup>
 
|[http://www.microsoft.com/sqlserver/ '''Microsoft SQL Server''']||[[mssqlconn|SQLdb]]||はい||はい||6-||FPC 2.6.2+. Linux, macOS, Win32, おそらく*BSD、おそらくSolaris<sup id="supported_db_2_back">[[#supported_db_2|2]]</sup>
 
|----
 
|----
|[http://www.mysql.com/ '''MySQL''']||[[mysql|SQLdb]]||はい||はい|| 3.0 - 5.5 || i386: Linux, Win32
+
|[http://www.mysql.com/ '''MySQL''']||[[mysql|SQLdb]]||はい||はい|| 4.0 - 8.0 || i386: Linux, Win32
 
|----
 
|----
 
|'''ODBC'''||[[ODBCConn|SQLdb]]||はい||場合による|| 3.x <sup id="supported_db_3_back">[[#supported_db_3|3]]</sup> || i386: Linux, Win32
 
|'''ODBC'''||[[ODBCConn|SQLdb]]||はい||場合による|| 3.x <sup id="supported_db_3_back">[[#supported_db_3|3]]</sup> || i386: Linux, Win32
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''']||[[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||いいえ||いいえ|| - || すべて
Line 55: Line 58:
 
|}
 
|}
  
<cite id="supported_db_1">[[Databases#supported_db_1_back|Note (1):]]</cite> WindowsとLinux(おそらくmacOSも)では組込バージョンのFirebirdが利用可能、またはWindows/Unix/macOS/FreeBSD/他のFirebirdがサポートするプラットフォームで稼働するFirebirdサーバに接続可能
+
<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|Note (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]からダウンロードできる
  
<cite id="supported_db_3">[[Databases#supported_db_3_back|Note (3):]]</cite> このバージョン番号はODBC標準ドライバのものであり、ドライバまたはドライバマネージャのバージョン番号ではない。ほとんどのDBMSに対してODBC 3.x ドライバがある。
+
<cite id="supported_db_3">[[Databases#supported_db_3_back|注意 (3):]]</cite> このバージョン番号はODBCドライバ標準ものであり、ドライバまたはドライバマネージャのバージョン番号ではない。ほとんどのDBMSに対してODBC 3.x ドライバがある。
  
 
== データベースクライアントへのバインディング ==
 
== データベースクライアントへのバインディング ==
もしクライアントライブラリを必要とするデータベースを用いたいときは、そのライブラリをインストールしなければならい。今プログラミングを行っているコンピュータのみならず、アプリケーションを動作させるコンピュータにおいてもである。あるデータベース(特にMySQL)はそのバインディングが、インストールされたライブラリと同じバージョンからアプリケーションでコンパイルされた場合でのみ動作することに注意されたい。
+
もしクライアントライブラリを必要とするデータベースを用いたいときは、そのライブラリをインストールしなければならない。今プログラミングを行っているコンピュータのみならず、アプリケーションを動作させるコンピュータにおいてもである。あるデータベース(特に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のデータセット(TDatasetを受け継いだもの、例えば、TSQLQueryなど)をデータベースから選んだレコードのコピーの一部と考えることである。以下のSQL文を用いてクエリを行ったとき:
+
 
 +
もっとも単純に概念化すればLazarusのデータセット(TDatasetの派生、例えば、TSQLQueryなど)をデータベースから選んだレコードのコピーの一部と考えることである。以下のSQL文を用いてクエリを行ったとき:
  
 
<syntaxhighlight lang=sql>
 
<syntaxhighlight lang=sql>
Line 77: Line 83:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
そしてSQLQuery1をデータベース中のtable1を開き100と100に満たないid値をSQLQuery1にコピーする。
+
SQLQuery1をデータベース中のtable1を開き100と100に満たないid値をSQLQuery1にコピーする。
 
  
The content of this dataset is visualized using database controls, like TDBGrid, TDBEdit, etc., via TDatasource which in turn is hooked to TDataset.
+
このデータセット内容はTDatasetに順々に取得されたTDatasourceを介してTDBGrid、TDBEdiなどのデータベースコントロールを用いて視覚化される。
 +
以下で説明されるinsert、edit、postなどのようなコマンドを用いてこのデータセットの内容を変更できるが、基本的にこれらの操作はデータセットに対してであり、データベーステーブル自身に対して行われるわけではない。
  
You may modify the content of this dataset using commands like insert, edit, delete, post, etc. which will be explained below, but basically these operations are done on datasets and not on the database table itself. You need another step to store the modifications to the database permanently, like calling TDataSet.ApplyUpdates or executing insert or update SQL statements (these are different from TDataset.insert or TDataset.update).
+
変更をデータベースに対して永続的に行うには、TDataSet.ApplyUpdatesを呼ぶまたは、SQL構文insert、update(これらはTDataset.insert、TDataset.updateとは異なる)を実行するなど、もう一手間必要である。
  
There are ways to set the modifications to the datasets to be saved (or discarded) automatically at the close of datasets through database properties of transactions.
+
データベースのトランザクションのプロパティを通してデータセットを閉じるときに自動的に保存(もしくは破棄)する変更を行う多くのやり方がある。
  
===Basics of Datasets===
+
=== データセットの基本 ===
Database use in Lazarus (or Free Pascal) is fundamentally based on the [[TDataSet]] class.  This represents a table or query to your application.  However, like many other such fundamental classes, you don't use the TDataset class itself, you use a descendant of it.  There are many of these.  They provide access to different kinds of databases, such as local dbase or text files, or back-end databases such as PostgreSQL, Firebird, MySQL and so forth.  Some dataset descendants link directly to database tables, while others use additional components or libraries to perform the link. 
+
Lazarus(もしくはFree Pascal)で用いられるデータベースは基本的に[[TDataSet/ja]]クラスに基づいている。
 +
これがアプリケーションに対しテーブルやクエリをもたらす。しかし、他の基底クラスのようにTDatasetは自身は用いず、その派生を用いることになる。これには多くがある。それらは、例えばローカルデータベース、テキストファイル、あるいはPostgreSQL、Firebird、MySQLなどといった異なるバックエンドデータベースへのアクセスをもたらす。いくつかのデータセットの派生はデータベーステーブルに直にリンクされていることもあるが、リンクをもたらすために他の追加のコンポーネントや、ライブラリを用いるものもある。
  
Dataset descendants, being non-visual components are (usually) part of the Free Component Library (FCL) rather than the Lazarus Component Library (LCL).
+
不可視のコンポーネントであるデータセットの派生物は、普通はLazarus Component Library(LCL)というよりはFree Component Library(FCL)である。
  
Datasets can be used both programmatically and with visual controls.  A typical Lazarus database application will often use both methods.  In either case, the first step is to create the TDataset descendant, initialise it to connect to the table or query you want, and open it.  This can be done either in code at run time or by putting a component on your form and setting it's properties at design time.  The details of this vary considerably with different TDataset descendants, so see the various guides under [[Databases]] for what has to be done for your database.
+
データセットはプログラム的、視覚的コントロールの双方で用いることができる。典型的なLazarusデータベースアプリケーションにはしばしば双方のメソッドを用いられるだろう。双方の場合で最初の一歩はTDatasetの派生を作成し、望むテーブルかクエリに接続し、開くことである。これは実行時にコードの中で、あるいは作成時にフォームへコンポーネントを配置し、そのプロパティを設定することのいずれでもなされる。
 +
この詳細はTDatasetの派生により大きく異なっており、使っているデータベース応じて何をするべきなのかは[[Databases/ja]]以下の様々なガイドを参照のこと。
  
When the dataset is opened, a set of field components are created, one for each field or column of the table or query you opened.  Each field component is a descendant of TField, appropriate to the particular data type of the field, eg, TStringField.
+
データセットが開かれると、開かれたテーブルもしくはクエリのそれぞれのフィールドまたはカラム1つに対し、フィールドコンポーネントが生成される。それぞれのフィールドコンポーネントはフィールドの特定のデータ型、即ち、TStringField、に対する派生である。
  
===Using datasets from code===
+
=== コードからデータセットを用いる ===
Programmatic access will be explained in more detail in [[Using Dataset and Field components]], but as a very simple overview:
+
プログラムによるアクセスは[[データセットとフィールドコンポーネントを使う]]で詳述するが、簡単な例として:
* Use the TDataset descendant to open the table or query, filter the rows you want to see, and to move from row to row. 
+
* TDatasetの派生を用いテーブルもしくはクエリを開き、見たい行をすくいあげ、行から行へと移動すること。
* Use the TField descendants to:  
+
* 以下のためにTFieldの派生を使うこと:
**Access general information about fields
+
**フィールドに対する一般的な情報にアクセスする
**Access the specific data values for the current row.  (use the As... properties, such as AsString, AsInteger, etc.)
+
**現在の行に対する特定のデータ値にアクセスする(AsString、AsIntegerなどといったAsプロパティを用いること)
* Access the fields of a TDataset descendant by using either:
+
* 以下の双方を用いてTDatasetの派生のフィールドにアクセスする:
**The fields property, eg Fields[0] is the first field,
+
**フィールドプロパティ即ち、Field[0]は最初のフィールとである
**The FieldByName method, eg FieldByName('AGE') returns the field associated with the database field called 'AGE'
+
**フィールの名前によるメソッド即ち、FieldByName('年齢') はデータベースフィールド'年齢'と呼ばれるデータベースフィールドに紐づけられたフィールドを返す
 +
フィールドの型については[[Database_field_type/ja|データベースフィールド型]]の一覧を参照のこと。
  
See [[Database_field_type]] for a list of field types.
+
=== 視覚的(データ感知型の)コントロールを用いる ===
 +
「RAD」スタイルのLazarusアプリケーションで簡単にデータベースを用いるために、通常はデザインの時にデータセット派生を設定しデータ感知型コントロールを用いる。これを行うためには:
 +
* 選択するデータセット派生を、サポートするコンポーネントとともにフォームに加え開くこと(「Active」プロパティをtrueにする)。
 +
* [[TDataSource/ja]] コンポーネントを ([[Data Access tab/ja]]から) フォームに加えデータセットと「リンク」させる(DataSetプロパティを設定する)。
 +
* データ感知型コントロールを[[Data Controls tab/ja]]からフォームに加え、それぞれを(データセットではなく)DataSourceコンポーネントにリンクすること。
 +
* ほとんどのコントロールは1つのフィールドにリンクされるため、それぞれのタブのためにフィールドをセットすること。
 +
コントロールの詳細は以下の [[#データコントロール]]を見ること
  
===Using the visual (data-aware) controls===
+
===データセット状態===
To use databases in a simple, "RAD" style Lazarus application, you usually configure the dataset descendant at design time and  the use the data-aware controls.  To do this:
+
データセットには多くの状態がある。非常に多くの状態があるが(ソースのTDataSetStateを見ること)。最初に注意すべきおもなものは
* Add the dataset descendant for the database of your choice, together with any supporting components, to your form, and open it (Set the ' Active' property to true )
 
* Add a [[TDataSource]] component (from the [[Data Access tab]]) to the form, and "link" it to the dataset (set the DataSet property)
 
* Add data-aware controls from the [[Data Controls tab]] to the form, and link each one to the DataSource (not dataset) component
 
* Most controls link to a single field, so you also need to set the Field for each tab.
 
See [[#Data Controls]] below for more details on the controls
 
 
 
=== Dataset State ===
 
Datasets can be in a number of states.  While there are quite a few (look up TDataSetState in the source), the main ones to be aware of initally are
 
 
{| class="wikitable"
 
{| class="wikitable"
!State
+
!状態
!Function
+
!機能
 
|-
 
|-
 
|dsInactive
 
|dsInactive
|The dataset is closed
+
|データセットは閉じている
 
|-
 
|-
 
|dsBrowse
 
|dsBrowse
|The user can browse through the dataset, looking at values
+
|データセットを閲覧、値を見ることができる
  
 
|-
 
|-
 
|dsEdit
 
|dsEdit
|The user can edit values on the current row.Values are not saved until a post is performed.
+
|現在の行の値を編集できる。Postが実行されるまで値は保存されない
 
|-
 
|-
 
|dsInsert
 
|dsInsert
|A new row has been added, and the user can set the values.The record is not saved until a post is performed
+
|新しい行が挿入されている。これに値をセットすることができる。Postが実行されるまでレコードは保存されない
 
|}
 
|}
The other states are fairly transitory, and are usually handled "automatically".  They are used internally and in more complicated code.  If your database only views data, and you open the dataset at design time, you can largely ignore the state, as it will mostly be dsBrowse.  However, most applications will want to change the data at some stage.  If you are using data-aware controls, they will handle a lot of this automatically.  If you change the text in a [[TDBEdit]] control, for example, it will put the dataset into dsEdit state - unless you are already in dsEdit or dsInsert.  If you "scroll" to a different record while the current state is dsEdit or dsInsert, that record will be "posted" and the dataset revert to dsBrowse.  However, if you are accessing the dataset from code, you will often have to change the state in code as well.  The [[TDBNavigator]] control (see below) allows the user to change the state explicitly.
+
他の状態はかなり一時的で通常「自動的に」扱われる。それらは内部的に用いられ、より複雑なコードである。もしデータベースがデータだけを見ており、設計時にデータセットを開くのであれば、この状態は、データセットはほとんどdsBrowseにあるため、たいていは無視できる。しかし、ほとんどのアプリケーションはいずれかの段階でデータを変更する必要がある。もし、データ感知型コントロールを用いている場合、それらはこの多くを自動的に行うだろう。例えば、[[TDBEdit/ja]]コントロールでテキストを変更すると、すでにdsEdit、あるいはdsInsert状態にいなければ、それはデータセットをdsEdit状態にする。現在の状態がdsEditもしくはdsInsertの時に他のレコードに「スクロール」するとそのレコードは「post」され、データセットはdsBrowseに戻るだろう。しかし、データセットをコードからアクセスしていると、たいてい同様にコードの中から状態を変更する必要が生じるだろう。[[TDBNavigator/ja]]コントロール(以下参照)は明示的に状態を変えることができる。
 
 
===Dataset UpdateStatus===
 
 
 
UpdateStatus determines the current state of the record buffer, if updates have not yet been
 
applied to the database.
 
  
'''Example''' how to detect if ApplyUpdates will Insert, Update or Delete data:
+
===データセット更新状態===
 +
更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。
 +
'''''' ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
Line 155: Line 159:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
;Value Explanation
+
;値の説明
* usUnmodified: Record is unmodified
+
* usUnmodified: レコードは変更されない
* usModified:  Record exists in the database but is locally modified
+
* usModified:  レコードはデータベースに存在するが、局所的に変更される
* usInserted:  Record does not yet exist in the database, but is locally inserted
+
* usInserted:  レコードはデータベースにまだ存在しないが、局所的に挿入される
* usDeleted:    Record exists in the database, but is locally deleted
+
* usDeleted:    レコードはデータベースに存在するが、局所的に削除される
  
===Post and Cancel===
+
===データセット更新状態===
If you have edited or inserted a record, the new values are held in a buffer.
+
更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。
* Calling the dataset cancel method removes the new record (insert) or reverts the values to their previous values (edit)
+
'''例''' ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:
* Calling the dataset post method saves the values (edit) or record (insert).  In some dataset descendants, they will be written to the database immediately, while in others they will be stored in a list of updates until a further call is made to save all changes to the database.  Finally, even when they are written to the database, you may still have to call a "commit" method to make the database write them permanently.  All of this also varies considerably with the dataset descendant, so look up the details for the one you are using.
 
  
===Inserting a new record===
+
<syntaxhighlight lang="pascal">
 +
procedure QueryAfterPost(DataSet: TDataSet);
 +
begin
 +
  case DataSet.UpdateStatus of
 +
    usUnmodified : ShowMessage('Unmodified');
 +
    usModified  : ShowMessage('Modified');
 +
    usInserted  : ShowMessage('Inserted');
 +
    usDeleted    : ShowMessage('Deleted');
 +
  end;
 +
end;
 +
</syntaxhighlight>
  
To insert a new record into a [[TDataSet]] descendent, one should use the method [http://www.freepascal.org/docs-html/fcl/db/tdataset.insert.html Insert]. After that one can set the field values and then finally call Post to commit the new record, as the example below shows.
+
;値の説明
 +
* usUnmodified: レコードは変更されない
 +
* usModified:  レコードはデータベースに存在するが、局所的に変更される
 +
* usInserted:  レコードはデータベースにまだ存在しないが、局所的に挿入される
 +
* usDeleted:    レコードはデータベースに存在するが、局所的に削除される
  
The example also shows how to insert BLOB data from a file - you can also use LoadFromStream to load the data from a stream.
+
===ポストとキャンセル===
 +
もしレコードを編集、挿入すると新しい値がバッファに保持される。
 +
*データセットキャンセルメソッドを呼ぶことは新しいレコードを除く(挿入)、またはその以前の値に戻す(編集)
 +
*ポストメソッドを呼ぶことは値(edit)、またはレコードを保存(insert)する
 +
あるデータセット派生ではデータは直ちにデータベースに書き込まれるのに対し、別のデータベースではすべての変更がさらに保存されるまで、アップデートリストにおかれるだろう。最後にデータが書き込まれても、それらが永続的にデータベースに書き込ませるために「commit」を呼ぶことがあるかもしれない。これらのすべてはまた、データセット派生で異なっているため、使っているものの子細を調べること。
  
 +
=== 新しいレコードを挿入する ===
 +
[[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;
   MyDataset.Fields[0].AsInteger := 4; //an integer field
+
   MyDataset.Fields[0].AsInteger := 4; //整数値フィールド
   MyDataset.Fields[1].AsString := 'First Name'; //a string field
+
   MyDataset.Fields[1].AsString := 'First Name'; //文字列フィールド
   (MyDataset.Fields[2] as TBlobField).LoadFromFile('SomeBlobfile.bin'); //blob field
+
   (MyDataset.Fields[2] as TBlobField).LoadFromFile('SomeBlobfile.bin'); //BLOB(バイナリ)フィールド
 
   MyDataset.Post;
 
   MyDataset.Post;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===How to quickly jump to 1 particular record in the table===
+
=== テーブルの中の1つの特定のレコードにジャンプする仕方 ===
  
====After selecting all records of the table====
+
==== テーブルのすべてのレコードを選択した後 ====
If you use SELECT * FROM to select all records of the table and then desires to quickly jump between them, you will have to build an index and search on it. It is more efficient to select only the record that you want.
+
テーブルのすべてのレコードを選択し、素早くその中に飛び込む欲求でSELECT * FROMを使うと、インデクスを作成し、それを探さなければならないかもしれない。これは望むレコードのみを選択するよりもより効果的である。
  
====Selecting only the desired record====
+
==== 望むレコードのみを選択すること ====
  
One fast solution to jump to a particular record is to select only it, for example doing:
+
特定のレコードにジャンプし、それのみを選択する1つの早い解決法は例えばこのようなものである:
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
Line 200: Line 223:
 
   MyDataset.FieldDefs.Add('PlayerId', ftInteger);
 
   MyDataset.FieldDefs.Add('PlayerId', ftInteger);
 
   MyDataset.Active := False;
 
   MyDataset.Active := False;
   { Non-parameterized format; may run into issues with text containing ' and dates
+
   { パラメータ化されていないフォーマット 'を含むテキストや日付では問題に出くわすかもしれない
 
   SQLText := Format('select * from "GameSession" WHERE "SessionId"=%d', [ASessionId]);
 
   SQLText := Format('select * from "GameSession" WHERE "SessionId"=%d', [ASessionId]);
 
   }
 
   }
   // Solution: parameterized query:
+
   // 解決法: パラメータ化されたクエリ:
   // Actually, if this is done in a loop, you only need to set the SQL.Text once,
+
   // 実際, これがループの中で行われると、1回だけSQL.Textをセットするだけでよい
   // and only change the parameter value
+
   // そしてパラメタ値だけ変更する
 
   MyDataset.SQL.Text := 'select * from "GameSession" WHERE "SessionID"=:SessionID');
 
   MyDataset.SQL.Text := 'select * from "GameSession" WHERE "SessionID"=:SessionID');
 
   MyDataSet.ParamByName('SessionID').AsLargeInt := ASessionID;
 
   MyDataSet.ParamByName('SessionID').AsLargeInt := ASessionID;
Line 215: Line 238:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
You can then read information using something like this:
+
そして、このようなことで情報を読むことができる:
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
Line 221: Line 244:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Filtering===
+
===フィルタリング===
You can filter your dataset to restrict the records to a subset you want (e.g. all surnames starting with Smith).
+
望むサブセットにレコードを限定することでデータセットをフィルタリングできる(例えば、Smithで始まるすべての姓)
  
* Using .Filter:
+
* .Filterを使う:
** [[TDbf]], [[TBufDataset]] and descendants (including [[TSQLQuery]]) use the TDBF filtering parser; see [[Lazarus Tdbf Tutorial#Expressions]] for details on using this.
+
** [[TDbf]][[TBufDataset]] と派生、([[TSQLQuery/ja]]を含む)はTDBFフィルタリングパーサを用いる。これを使用する詳細は[[Lazarus Tdbf Tutorial#Expressions]]を見ること。
** [[TMemDataset]] does not support .Filter
+
** [[TMemDataset]] .Filterをサポートしない
* Using a [[callback]]/event procedure with OnFilter where you can program your own filter function
+
* 独自のフィルタ関数をプログラムできる[[callbOnFilterack]]/イベントプロシージャを用いること
  
===Locate/lookup===
+
=== ロケート/ルックアップ ===
Although more often used in non-SQL datasets (e.g. [[TParadoxDataSet]], [[TDbf]]) you can jump between records using [[locate]]/[[lookup]].
+
Non-SQLデータセットでより頻繁に用いられるが(例えば、[[TParadoxDataSet]][[TDbf]])[[locate]]/[[lookup]]を用いることでレコード間をジャンプできる。.
  
===Using TSQLQuery===
+
=== TSQLQueryを用いる ===
For more information about [[TSQLQuery]] see [[Working With TSQLQuery]]
+
[[TSQLQuery]]に関する詳細な情報は[[Working With TSQLQuery/ja]]を見ること
  
===Exporting===
+
===エクスポート===
FPC/Lazarus contains functionality to let you export datasets to various formats; see e.g.
+
FPC/Lazarusはデータセットを様々な形式で出力する機能を持っている。例えば、以下を参照のこと
 
* [[fpXMLXSDExport]]
 
* [[fpXMLXSDExport]]
 
* [[fpdbfexport]]
 
* [[fpdbfexport]]
 
* the other components on the Data Export tab
 
* the other components on the Data Export tab
  
Of course, you could also do it manually (see e.g. [[FPSpreadsheet#Converting_a_database_to_a_spreadsheet]] for export to Excel format using fpspreadsheet)
+
もちろん、これを手動的に行うこともできる(例えば、fpspreadsheetを用いてExcel形式で出力するには[[FPSpreadsheet#Converting_a_database_to_a_spreadsheet]]を参照)
 +
 
 +
==データコントロール==
 +
[[File:DataControl.png‎]]
  
==Data Controls==
+
これらのコントロールのいずれを用いるときにも、そのコントロールをフォームに加え、少なくともデータソースプロパティを設定すること。他のプロパティはのちに述べる。
 +
=== データソースコントロール ===
 +
[[File:tdatasource_150.png‎]]
  
To use any of these controls, add the control to a form and set at least the datasource property.  Other key properties will be noted.
+
このコントロールは現在リンクされたどのコントロールが有効なのかを見ている。データソースコントロールはデータセット(例えば、TSQLQuery)にリンクされなければならない。
  
===Datasource Control===
+
===単一フィールドコントロール===
This control keeps track of which record the linked controls currently are on. The datasource contorl must be linked to a dataset (e.g. a TSQLQuery).
 
  
===Single Field Controls===
+
これらのコントロールは単一のフィールドに付随する。データソース同様にフィールド名を設定する。これらのコントロールに含まれるのは:
 +
*[[doc:lcl/dbctrls/tdbtext.html|DBText control]] テキストフィールドを表示する(読み取りのみ、縁なし)
 +
*[[doc:lcl/dbctrls/tdbedit.html|DBEdit control]] エディットボックスとしてテキストフィールドを表示 / 編集する
 +
*[[doc:lcl/dbctrls/tdbmemo.html|DBMemo control]] 複数行のエディットボックスでテキストフィールドを表示 / 編集する
 +
*[[doc:lcl/dbctrls/tdbimage.html|DBImage control]] BLOBとしてデータベースに保存された絵を表示する。注意: デフォルトでは, LazarusはデータベースBLOBフィールドに イメージデータの前にイメージタイプとヘッダを保存する。これはDelphiとは異なっている。しかし、TDBImageをDelphi互換にすることができる: [[Lazarus For Delphi Users#TDBImage]]を参照
 +
*[[doc:lcl/dbctrls/tdblistbox.html|DBListBox control]]と[[doc:lcl/dbctrls/tdbcombobox.html|DBComboBox Control]]コントロールのItemsプロパティの中の値のリストからデータベースフィールドに値を挿入できる
 +
*[[doc:lcl/dbctrls/tdblookuplistbox.html|DBLookupListBox control]]と[[doc:lcl/dbctrls/tdblookupcombobox.html|DBLookupComboBox control]]、また[[TDBLookupComboBox]]参照、別のテーブルのルックアップフィールドの内容を表示することによりデータベースに値を挿入できる。これらのコントロールは1つのフィールドにその結果を保存するが、ルックアップ値のためにもう1つのフィールドが必要である。'''注意''': 少なくともDBLookupComboBoxについては, FPC 2.6.0ではデータソースの中にリストフィールドも存在していることが必要であるというバグがある。これは何もしないデータソースのデータセットのリストフィールドと同じ名前の計算されたフィールドを宣言することによって回避できる。
 +
*[[doc:lcl/dbctrls/tdbcheckbox.html|DBCheckBox control]] チェックボックスをチェック / クリアすることにより、ブール値のフィールドを表示 / 編集する。
 +
*[[doc:lcl/dbctrls/tdbradiogroup.html|DBRadioGroup control]] 通常のラジオグループとして項目を表示; マッチした値のリストから読み取る / 設定する
 +
*[[doc:lcl/dbctrls/tdbcalendar.html|DBCalendar control]] カレンダーパネルから日付フィールドを表示 / 編集する
 +
*[[doc:lcl/dbctrls/tdbgroupbox.html|DBGroupBox control]]
  
These controls all attach to a single field. As well as datasource, set the field name.  Controls include:
+
=== [[doc:lcl/dbgrids/tdbgrid.html|DBGrid コントロール]] ===
  
*[[doc:lcl/dbctrls/tdbtext.html|DBText control]] Displays a text field (readonly, no border)
+
[[File:tdbgrid_150.png]]
*[[doc:lcl/dbctrls/tdbedit.html|DBEdit control]] Displays / edits a text field as an edit box
 
*[[doc:lcl/dbctrls/tdbmemo.html|DBMemo control]] Displays / edits a text field in a multi-line edit box
 
*[[doc:lcl/dbctrls/tdbimage.html|DBImage control]] Displays a picture stored in a database as a BLOB. Note: by default, Lazarus stores a header with the image type before the image data in the database BLOB field. This is different from Delphi. However, you can make TDBImage Delphi compatible: see [[Lazarus For Delphi Users#TDBImage]]
 
*[[doc:lcl/dbctrls/tdblistbox.html|DBListBox control]] and [[doc:lcl/dbctrls/tdbcombobox.html|DBComboBox Control]] Allow the user to insert values into a database field from the list of values in the Items property of the controls
 
*[[doc:lcl/dbctrls/tdblookuplistbox.html|DBLookupListBox control]] and [[doc:lcl/dbctrls/tdblookupcombobox.html|DBLookupComboBox control]], see also [[TDBLookupComboBox]] Allow the user to insert values into a database field by displaying the contents of a lookup field in another table. Though these controls store their results in a single field, you need another field for the lookup values. '''Note''': at lest for DBLookupComboBox, there is a bug with FPC 2.6.0 that requires the listfield to be present in the datasource as well, you can bypass it by declaring a calculated field with the same name as the listfield in the datasource's dataset that does nothing.
 
*[[doc:lcl/dbctrls/tdbcheckbox.html|DBCheckBox control]] Displays / edits a boolean field by checking/clearing a check box
 
*[[doc:lcl/dbctrls/tdbradiogroup.html|DBRadioGroup control]] Displays the items as in a normal radio group, reading/setting the field value from a matching values list
 
*[[doc:lcl/dbctrls/tdbcalendar.html|DBCalendar control]] Displays / edits a date field using a calendar panel
 
*[[doc:lcl/dbctrls/tdbgroupbox.html|DBGroupBox control]]
 
  
===[[doc:lcl/dbgrids/tdbgrid.html|DBGrid control]]===
+
このコントロールは数多いフィールドを行/列形式で表現する - 実際デフォルトではそれらすべてを表示する。しかし、特定のフィールドに制限する、およびそれぞれのカラムの幅とタイトルを設定するために[[doc:lcl/dbgrids/tdbgrid.columns.html|columns collection]] に見出しを設定することができる。
  
This control can show a number of fields in a row/column layout - in fact by default it shows them all.  However, you can put entries into the [[doc:lcl/dbgrids/tdbgrid.columns.html|columns collection]] to restrict it to specific fields and to set the widths and titles of each column.
+
[[doc:lcl/dbgrids/tdbgrid.html|これに言及したドキュメンテーション]]とは別に, さらなる細目がここで見られる[[Grids Reference Page#TCustomDBGrid]]
  
Apart from the [[doc:lcl/dbgrids/tdbgrid.html|mentioned documentation]], some more detail can be found here: [[Grids Reference Page#TCustomDBGrid]]
+
===[http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbnavigator.html Navigator コントロール]===
 +
[[File:tdbnavigator_150.png]]
  
===[http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbnavigator.html Navigator Control]===
+
このコントロールはデータセットに直接のコントロールを提供する。これにより:
 +
* 次の、前の、もしくは、レコードの始まり、終わりに移動する
 +
* 新しいレコードを加える(dataset.insertメソッドと同等)
 +
* データセットを編集モードにする
 +
* レコードを削除する
 +
* 現在の変更を実行、あるいはキャンセルする
 +
* データをリフレッシュする(マルチユーザーデータベースアプリケーションで有用である)
  
This control gives the user some direct control over the dataset.  It allows the user to:
+
鍵となるプロパティ:
* Move to the next or previous record, or to the start or end of the records
+
* 可視ボタン: ユーザーができることを制御する。例えば、削除が許されていないと削除ボタンを不可視にする。もしDBGridが同じデータセットに設けられていると、次、前ボタンの要不要を決めなければならないかもしれない。
* Add a new record (equivalent to a dataset.insert method call)
+
* 幅: もしすべてのボタンを表示しないのであれば、その幅を高さ*可視ボタンに設定できる。
* Put the dataset into edit mode
 
* Delete a record
 
* Post or Cancel current changes
 
* Refresh the data (useful in multiuser database applications)
 
  
Key Properties:
+
== FPCデータベース稼働テスト ==
* VisibleButtons:  Lets you control what the user can do.  For example, if deletes are not allowed, hide the delete button.  If you have a DBGrid attached to the same dataset, you may decide you do not need the next and prior buttons.
+
Free Pascalデータベースコンポーネントには[[fpcunit]]ベースのテストフレームワークである、機能を確認するために用いられるdbtestframeworkが含まれている。FPCソースツリーのsource\packages\fcl-db\tests\ディレクトリを見てほしい。そこに含まれているのは、いくつかのほかのテスト同様に、様々なデータベーステスト(例えば、データベースエクスポートのテスト)と、コンポーネントで実行されるテストフレームワークである。
* Width:  If you do not show all buttons, you may want to set the width to (height*number_of_visible_buttons)
 
  
== Running FPC database tests ==
+
あるデータベースのテストフレームワークを実行するには:
Free Pascal database components include a [[fpcunit]]-based test framework, dbtestframework, that can be used to verify functionality.
 
See the directory source\packages\fcl-db\tests\ in your FPC source tree.
 
Included is a test framework that can be run on various database components, as well as some other tests (e.g. test of database export).
 
  
To run the test framework on a certain database:
+
1. 保存
 +
source\packages\fcl-db\tests\database.ini.txtをsource\packages\fcl-db\tests\database.iniに。
  
1. Save
+
2. 変更
source\packages\fcl-db\tests\database.ini.txt
+
source\packages\fcl-db\tests\database.iniの中にあるうちの使うデータベースを選ぶ。
as
 
source\packages\fcl-db\tests\database.ini
 
  
2. Modify
+
Interbase/Firebirdの例は:
source\packages\fcl-db\tests\database.ini
 
to choose which database type you will use.
 
  
Example for Interbase/Firebird:
 
 
<syntaxhighlight lang="ini">
 
<syntaxhighlight lang="ini">
 
[Database]
 
[Database]
Line 307: Line 330:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
3. In the same file, customize settings for your database. E.g. if you chose interbase before:
+
3. 同じファイルで使うデータベースに対する設定を状況に合わせて調整する。例えば、先にInterbaseを選んだなら:
  
 
<syntaxhighlight lang="ini">
 
<syntaxhighlight lang="ini">
Line 313: Line 336:
 
connector=sql
 
connector=sql
 
connectorparams=interbase
 
connectorparams=interbase
; Database name/path (note: database needs to exist already)
+
; データベースの名前/パス (注意: データベースは既に存在している必要がある)
; You can use aliases (see aliases.conf in your Firebird documentation)
+
; エイリアスを用いることができる(Firebirdドキュメンテーションのaliases.confを参照)
 
name=testdb
 
name=testdb
 
user=sysdba
 
user=sysdba
 
password=masterkey
 
password=masterkey
; your hostname may very well differ:
+
; ホスト名は様々だろう:
; Leave blank if you want to use an embedded Firebird database
+
; 組み込みのFirebirdデータベースの場合は空白にしておくことができる
 
hostname=192.168.0.42
 
hostname=192.168.0.42
 
</syntaxhighlight>
 
</syntaxhighlight>
  
4. Compile and run source\packages\fcl-db\tests\dbtestframework.pas
+
4. source\packages\fcl-db\tests\dbtestframework.pasをコンパイルして実行する(またLazarusを用いてGUIバージョンのdbtestframework_guiをコンパイル、実行もできる)もしWindowsで組み込みのデータベース(例えば、Firebird 組み込み あるいは sqlite)を用いている場合、事前に必要とされるDLLファイルをそのディレクトリにコピーしておくこと。出力はXMLフォーマット(もしくは、dbtestframework_guiを用いた場合ディスプレイへ)である。
(You can also use Lazarus to compile and run the GUI version, dbtestframework_gui)
 
If you are using an embedded database on Windows (e.g. Firebird embedded or sqlite), copy the required DLL files to the directory first.
 
The output will be in XML format (or displayed on your screen if you use dbtestframework_gui).
 
  
Please see source\packages\fcl-db\tests\README.txt for more details.
+
詳細はsource\packages\fcl-db\tests\README.txtを参照されたい。
  
 
== Database packages contained in Lazarus ==
 
== Database packages contained in Lazarus ==
  
 
=== sqldblaz.lpk ===
 
=== sqldblaz.lpk ===
[[File:sqldbcomponents.png‎]]
 
  
This package provides access to different databases. These include:
+
[[File:sqldb.png‎]]
 +
 
 +
このパッケージは異なるデータベースへのアクセスを提供する。これらに含まれるものに:
 
* Interbase/Firebird
 
* Interbase/Firebird
* Microsoft SQL Server (except on Lazarus/FPC x64 for Windows)
+
* Microsoft SQL Server (WindowsのLazarus/FPC x64を除く)
 
* MySQL
 
* MySQL
* Oracle (except on Lazarus/FPC x64 for Windows)
+
* Oracle (WindowsのLazarus/FPC x64を除く)
* PostgreSQL (except on Lazarus/FPC x64 for Windows)
+
* PostgreSQL (WindowsのLazarus/FPC x64を除く)
* SQLite (with support for the [[Spatialite]] extension)
+
* SQLite ([[Spatialite]]拡張を含む)
* Sybase ASE (Adaptive Server Enterprise - not to be confused with Sybase ASA) (except on Lazarus/FPC x64 for Windows)
+
* Sybase ASE (Adaptive Server Enterprise - Sybase ASAと混同しないこと) (WindowsのLazarus/FPC x64を除く)
* any database that has an ODBC driver.
+
* ODBCドライバを用いるすべてのデータベース
  
The components (TSQLQuery, TSQLTransaction, TIBConnection, TODBCConnection, TOracleConnection, TMSSQLConnection, TMySQL40Connection, TMySQL41Connection, TMySQL50Connection, TPQConnection, TSybaseConnection) are on the 'SQLdb' tab in the component palette.
+
これらのコンポーネント(TSQLQuery, TSQLTransaction, TIBConnection, TODBCConnection, TOracleConnection, TMSSQLConnection, TMySQL40Connection, TMySQL41Connection, TMySQL50Connection, TPQConnection, TSybaseConnection) はコンポーネントパレットの「SQLdb」にある
 
*[[SQLdb Package]]
 
*[[SQLdb Package]]
  
 
=== dbflaz.lpk ===
 
=== dbflaz.lpk ===
This package provides access to dBase and FoxPro databases. You can get more information in the [[Lazarus Tdbf Tutorial]]. The TDbf component is on the [[Data Access tab]] in the component palette.
+
このパッケージはdBaseとFoxProデータベースへのアクセスを提供する。[[Lazarus Tdbf Tutorial]]でさらなる情報が得られる。TDbfコンポーネントはコンポーネントパレットの[[Data Access tab]]にある。
  
 
=== sqlitelaz.lpk ===
 
=== sqlitelaz.lpk ===
This package provides access to SQLite databases. You can get more information in the [[Lazarus Database Overview]].
+
このパッケージはSQLiteデータベースに対するアクセスを提供する。さらなる情報は[[Lazarus Database Overview/ja]]で得られる。
  
 
=== sdflaz.lpk ===
 
=== sdflaz.lpk ===
The component [[TSdfDataSet]] can be found on the [[Data Access tab]] in the component palette.
+
コンポーネント[[TSdfDataSet]]はコンポーネントパレットの[[Data Access tab]]にある。
  
 
=== lazreport.lpk ===
 
=== lazreport.lpk ===
The homepage of the report generator is [http://lazreport.sourceforge.net/ http://lazreport.sourceforge.net/].
+
レポートジェネレータのホームページは [http://lazreport.sourceforge.net/ http://lazreport.sourceforge.net/]である。
More informationen (et al. an additional link) can be found [[Projects_using_Lazarus#LazReport| here]].
+
さらなる情報は[[Projects_using_Lazarus#LazReport| ここ]]にある。LazReportはPrinter4Lazarusパッケージに依存する。リビジョン11950 LazReportはLazarus SVN レポジトリに含まれる。
LazReport depends on the Printer4Lazarus package.
 
With revision 11950 LazReport was included in the Lazarus SVN repository.
 
  
 
=== lazdbexport.lpk ===
 
=== lazdbexport.lpk ===
See [[lazdbexport]].
+
[[lazdbexport]]参照。
  
== External packages / libraries ==
+
== 外部パッケージ / ライブラリ ==
  
=== Zeos DataBase Objects ===
+
=== Zeosデータベースオブジェクト ===
These components provide access to different databases. You can find more information [[ZeosDBO|here]]. This wiki also contains a [[Zeos tutorial]].
+
これらのコンポーネントは異なるデータベースに対するアクセスを提供する。さらなる情報は[[ZeosDBO|ここ]]で得られる。このwikiにはまた[[Zeos tutorial]]がある。
  
=== Pascal Data Objects ===
+
=== Pascalデータオブジェクト ===
There is now an alternative. 
+
現在ある別の選択肢である。
  
Support:
+
サポート:
*MySQL 4.1 and 5.0  
+
*MySQL 4.1と5.0  
*sqlite-2 and sqlite-3
+
*sqlite-2とsqlite-3
*pgsql-8.1  
+
*pgsql-8.1
 
*interbase-5, interbase-6, firebird-1.0, firebird-1.5, firebird-1.5E, firebird-2.0, firebird-2.0E
 
*interbase-5, interbase-6, firebird-1.0, firebird-1.5, firebird-1.5E, firebird-2.0, firebird-2.0E
*mssql (Microsoft library) and sybase (FreeTDS library)  
+
*mssql (Microsoftライブラリ) and sybase (FreeTDSライブラリ)  
 
*oracle
 
*oracle
  
like prepared statements, binding, and stored procedures are supported by database API called Pascal Data Objects, which is inspired by PHP Data Objects.  All the code and documentation necessary to use this new API is available on Sourceforge:
+
PHPデータオブジェクトに触発されたPascalデータオブジェクトというデータベース APIによって、ステートメント、バインディング、ストアドプロシージャがサポートされる。
 +
この新しいAPIを用いるために必要なすべてのコードとドキュメンテーションはSourceforgeにある:
  
 
http://pdo.sourceforge.net
 
http://pdo.sourceforge.net
  
 
=== TPSQL ===
 
=== TPSQL ===
These components provide access via TCP/IP to PostgreSQL databases. You can find more information on [[TPSQL|this page]].
+
これらのコンポーネントはPostgreSQLに対するTCP/IP経由のアクセスを提供する。さらなる情報は[[TPSQL|このページ]]で得られる。
  
 
=== FIBL ===
 
=== FIBL ===
These components provide access to Interbase and Firebird databases. The homepage is [http://sourceforge.net/projects/fibl http://sourceforge.net/projects/fibl].
+
これらのコンポーネントはInterbaseとFirebirdデータベースに対するアクセスを提供する。ホームページは[http://sourceforge.net/projects/fiblhttp://sourceforge.net/projects/fibl]
  
 
=== IBX ===
 
=== IBX ===
IBX For Lazarus are components to access Firebird databases: see [[IBX]]
+
IBX For LazarusはFirebirdデータベースに対するアクセスを提供する[[IBX]]参照。
  
=== FBLib Firebird Library ===
+
=== FBLib Firebird ライブラリ ===
  
[http://fblib.altervista.org/ FBLib] is an open Source Library No Data Aware for direct access to Firebird Relational Database from Borland Delphi/Kylix, Free Pascal and Lazarus.
+
[http://fblib.altervista.org/ FBLib]はFirebirdリレーショナルデータベースに対するBorland Delphi/Kylix、Free Pascal、Lazarusへの直接アクセスのためのオープンソースのデータ非感知型ライブラリである。
  
Current Features include:
+
現在の特色には以下が含まれる:
  
* Direct Access to Firebird 1.0.x, 1.5.x and 2.x Classic or SuperServer
+
* Firebird 1.0.x, 1.5.x and 2.x ClassicまたはSuperServerへの直接アクセス
* Multiplatform [Win32,Gnu/Linux,FreeBSD)
+
* マルチプラットフォーム[Win32、Gnu/Linu、FreeBSD)
* Automatic select client library 'fbclient' or 'gds32'
+
* 「fbclient」もしくは「gds32」による自動クライアントライブラリ選択
* Query with params
+
* パラメータクエリ
* Support SQL Dialect 1/3
+
* SQL Dialect 1/3のサポート
* LGPL License agreement
+
* LGPLライセンス
* Extract Metadata
+
* メタデータの抽出
* Simple Script Parser
+
* 簡単なスクリプトパーサ
* Only 100-150 KB added into final EXE
+
* 最終のEXEファイルにたった100-150 KBの追加
* Support BLOB Fields
+
* BLOBフィールドサポート
* Export Data to HTML SQL Script
+
* HTML SQLスクリプトへのデータエクスポート
* Service manager (backup,restore,gfix...)
+
* サービスマネージャ(バックアップ、レストア、gfix...)
* Events Alerter
+
* イベントアラート
  
You can download documentation on [http://fblib.altervista.org/ FBLib's website].
+
[http://fblib.altervista.org/ FBLibのウェブサイト]でドキュメンテーションをダウンロードできる。
  
 
=== Unified Interbase ===
 
=== Unified Interbase ===
  
UIB provides access to Interbase, Firebird and YAFFIL databases. The homepage is [http://www.progdigy.com www.progdigy.com]. A svn repository is available under https://uib.svn.sourceforge.net/svnroot/uib .
+
UIB はInterbase、Firebird、YAFFILデータベースにに対するアクセスを提供する。ホームページは[http://www.progdigy.com www.progdigy.com]。 SVNレポジトリはhttps://uib.svn.sourceforge.net/svnroot/uib以下で得られる。
  
 
=== TechInsite Object Persistence Framework (tiOPF) ===
 
=== TechInsite Object Persistence Framework (tiOPF) ===
More information about tiOPF can be found on this [[tiOPF|page]].
+
tiOPFに対するさらなる情報は[[tiOPF|page]]で得られる。
  
 
=== Advantage TDataSet Descendant ===
 
=== Advantage TDataSet Descendant ===
The Advantage TDataSet Descedant provides a means of connecting to (and opening tables with) the Advantage Database Server.  Advantage is a flexible, administration-free embedded database that provides Client/Server as well as Peer-to-peer access to Clipper, FoxPro and Visual FoxPro 9 DBF file formats, as well as a proprietary file format that provides a migration path allowing the use of newer features.
+
The Advantage TDataSet DescendantはAdvantage Database Serverに接続し(そしてテーブルを開く)手段を提供する。Advantageは柔軟で管理不要のデータベースで Clipper、FoxPro、Visual FoxPro 9 DBFファイルフォーマットに対するクライアント/サーバ、Peer-to-peerファイルフォーマット、 同様に新しい特徴を持つ独自ファイルフォーマットへの移行パスを提供する。
  
 
Key Features:
 
Key Features:
* Royalty-free peer-to-peer database access with migration path to Client/Server
+
* 利用料無料の、peer-to-peerデータベースアクセスをクライアントサーバへの移行
* Multi-Platform (Clients supported on Windows and Linux, Server supported on Windows, Linux, and NetWare)
+
* マルチプラットフォーム(クライアントはWindows、Linux、サーバはWindows、Linux、NetWare)
* Supports Both navigational and relational SQL database access
+
* ナビゲーショナル、SQLデータベースアクセス
* Full-text search engine
+
* フルテキストサーチエンジン
* Table, Index, Memo, and communication encryption
+
* テーブル、インデクス、メモ、通信暗号化
* Compatible with native TDataset components
+
* TDatasetコンポーネントとの互換性
* Online Backup
+
* オンラインバックアップ
* Server supports Replication
+
* サーバは冗長化をサポート
  
For more information, see the [http://www.advantagedatabase.com Advantage Database Server] website.
+
さらなる情報は[http://www.advantagedatabase.com Advantage Database Server]参照。
  
=== ZMSQL, sql-enhanced in-memory database ===
+
=== ZMSQL、sql強化されたインメモリデータベース ===
For more information, see the [http://wiki.lazarus.freepascal.org/ZMSQL ZMSQL wiki page]
+
さらなる情報は[http://wiki.lazarus.freepascal.org/ZMSQL ZMSQL wikiページ]を参照。
  
ZMSQL is an open source, TBufDataset descendant SQL enhanced in-memory database for Free Pascal (FPC), operating with semicolon-separated values flat text tables. Completely written in Pascal, it has no dependencies on external libraries. It uses JanSQL engine for SQL implementation.
+
ZMSQLはオープンソースのセミコロンをデリミタとする値のテーブルで操作されるFree Pascal(FPC)に向けられたインメモリメータベースである。
 +
完全にPascalで書かれており、外部ライブラリの依存性がない。SQL実装にはJanSQLエンジンを用いている。
  
It offers:
+
これにより:
  
*Loading from and saving to flat text tables
+
*平文テキストテーブル、「から」、また、「へ」、入出力される。
*Use of SQL to query the data
+
*データのクエリにSQLを用いる
*Copy data and schema from other datasets
+
*他のデータセットからデータとスキーマをコピーする
*Option to predefine fielddefs or create it on-the fly
+
*あらかじめ決められたフィールド定義またはその場でフィールドを生成する
*Master/detail filtering
+
*マスタ/詳細フィルタリング
*Referential integrity
+
*参照完全性
*Parameterized queries
+
*パラメータ化されたクエリ
  
The download contains the source code, some demo applications illustrating the features of the component as well as a readme.
+
ダウンロードにはソースコード、いくつかのデモアプリケーション、コンポーネントの特徴、readmeが含まれる。
  
== See also ==
+
== 以下も参照のこと ==
  
* [[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 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/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にある:

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が含まれる。

以下も参照のこと