Sign in Join
Wiki copytemporary

Databases/ja: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11**日本語版メニュー**
22---
33[[Main Page/ja|メインページ]] \- [[Lazarus Documentation/ja|Lazarus Documentation日本語版]] \- [[Japanese Localization Notes|翻訳ノート]] \- [[Bug Tracking/ja|日本語障害情報]]
44---
55[[Portal:Databases/ja|**データベースのポータル**]]
6-参照:
7-
8- * Databases 概要
9- * [[Database libraries/ja|ライブラリ]]
10- * [[Database field type/ja|フィールドの型]]
11- * [[Data Controls tab/ja|コントロール]]
12- * [[Lazarus DB Faq/ja|FAQ]]
13- * [[SqlDBHowto/ja]]
14- * [[Working With TSQLQuery/ja|TSQLQuery の利用]]
15- * [[How to write in-memory database applications in Lazarus/FPC/ja|メモリ上で動作するデータベースの作り方]]
16-
17-チュートリアル/練習となる記事:
18-
19- * [[Lazarus Database Overview/ja|概要]]
20- * [[SQLdb Tutorial0/ja|0 - データベースのセットアップ]]
21- * [[SQLdb Tutorial1/ja|1 - 開始]]
22- * [[SQLdb Tutorial2/ja|2 - 編集]]
23- * [[SQLdb Tutorial3/ja|3 - クエリ]]
24- * [[SQLdb Tutorial4/ja|4 - データモジュール]]
25- * [[SQLdb Programming Reference/ja]]
26-
27-各種データベース
28-
29- [[Advantage Database Server/ja|Advantage]] \- [[MySQLDatabases/ja|MySQL]] \- [MSSQL](</index.php?title=mssqlconn/ja&action=edit&redlink=1> "mssqlconn/ja \(page does not exist\)") \- [[postgres/ja|Postgres]] \- [[Firebird/ja|Interbase]] \- [[Firebird/ja|Firebird]] \- [[Oracle/ja|Oracle]] \- [[ODBCConn/ja|ODBC]] \- [Paradox](</index.php?title=TParadox/ja&action=edit&redlink=1> "TParadox/ja \(page does not exist\)") \- [[SQLite/ja|SQLite]] \- [dBASE](</index.php?title=Lazarus_Tdbf_Tutorial/ja&action=edit&redlink=1> "Lazarus Tdbf Tutorial/ja \(page does not exist\)") \- [[MS Access/ja|MS Access]] \- [Zeos](</index.php?title=Zeos_tutorial/ja&action=edit&redlink=1> "Zeos tutorial/ja \(page does not exist\)")
6+参照: · Databases 概要 · [[Database libraries/ja|ライブラリ]] · [[Database field type/ja|フィールドの型]] · [[Data Controls tab/ja|コントロール]] · [[Lazarus DB Faq/ja|FAQ]] · [[SqlDBHowto/ja]] · [[Working With TSQLQuery/ja|TSQLQuery の利用]] · [[How to write in-memory database applications in Lazarus/FPC/ja|メモリ上で動作するデータベースの作り方]] · チュートリアル/練習となる記事: · [[Lazarus Database Overview/ja|概要]] · [[SQLdb Tutorial0/ja|0 - データベースのセットアップ]] · [[SQLdb Tutorial1/ja|1 - 開始]] · [[SQLdb Tutorial2/ja|2 - 編集]] · [[SQLdb Tutorial3/ja|3 - クエリ]] · [[SQLdb Tutorial4/ja|4 - データモジュール]] · [[SQLdb Programming Reference/ja]] · 各種データベース · [[Advantage Database Server/ja|Advantage]] \- [[MySQLDatabases/ja|MySQL]] \- [[mssqlconn/ja|MSSQL]] \- [[postgres/ja|Postgres]] \- [[Firebird/ja|Interbase]] \- [[Firebird/ja|Firebird]] \- [[Oracle/ja|Oracle]] \- [[ODBCConn/ja|ODBC]] \- [[TParadox/ja|Paradox]] \- [[SQLite/ja|SQLite]] \- [[Lazarus Tdbf Tutorial/ja|dBASE]] \- [[MS Access/ja|MS Access]] \- [[Zeos tutorial/ja|Zeos]]
307
318このページは「[[Lazarus]]と**データベース** 」の概要である。以下の表にはサポートされているデータベースが載せられている。
329
3310クライアントライブラリがインストールされているデータベースコンポーネント(もしデータベースがクライアントライブラリを必要とするなら)に限る、さもないとLazarusはファイルがないために起動ができない可能性がある。そのコンポーネントのアンインストールが不可能なら、Lazarusを再インストールする必要がある。
3411
35-## Contents
36-
37- * 1 サポートされるデータベース
38- * 2 データベースクライアントへのバインディング
39- * 3 データセット
40- * 3.1 データセットとデータベースの区別
41- * 3.2 データセットの基本
42- * 3.3 コードからデータセットを用いる
43- * 3.4 視覚的(データ感知型の)コントロールを用いる
44- * 3.5 データセット状態
45- * 3.6 データセット更新状態
46- * 3.7 データセット更新状態
47- * 3.8 ポストとキャンセル
48- * 3.9 新しいレコードを挿入する
49- * 3.10 テーブルの中の1つの特定のレコードにジャンプする仕方
50- * 3.10.1 テーブルのすべてのレコードを選択した後
51- * 3.10.2 望むレコードのみを選択すること
52- * 3.11 フィルタリング
53- * 3.12 ロケート/ルックアップ
54- * 3.13 TSQLQueryを用いる
55- * 3.14 エクスポート
56- * 4 データコントロール
57- * 4.1 データソースコントロール
58- * 4.2 単一フィールドコントロール
59- * 4.3 DBGrid コントロール
60- * 4.4 Navigator コントロール
61- * 5 FPCデータベース稼働テスト
62- * 6 Lazarusに含まれるデータベースパッケージ
63- * 6.1 sqldblaz.lpk
64- * 6.2 dbflaz.lpk
65- * 6.3 sqlitelaz.lpk
66- * 6.4 sdflaz.lpk
67- * 6.5 lazreport.lpk
68- * 6.6 lazdbexport.lpk
69- * 7 外部パッケージ / ライブラリ
70- * 7.1 Zeosデータベースオブジェクト
71- * 7.2 Pascalデータオブジェクト
72- * 7.3 TPSQL
73- * 7.4 FIBL
74- * 7.5 IBX
75- * 7.6 FBLib Firebird ライブラリ
76- * 7.7 Unified Interbase
77- * 7.8 TechInsite Object Persistence Framework (tiOPF)
78- * 7.9 Advantage TDataSet Descendant
79- * 7.10 ZMSQL、sql強化されたインメモリデータベース
80- * 8 以下も参照のこと
81-
8212### サポートされるデータベース
8313
8414データベース | パッケージ名 | クライアントライブラリが必要か | サーバが必要か | サポートされるバージョン | サポートされるプラットフォーム
8515---|---|---|---|---|---
8616[**Advantage**](<http://www.advantagedatabase.com/>) | TAdsDataSet | はい | いいえ | 10.1以降 | i386: Linux, Win32
8717**DTurboPower FlashFiler** | [[FlashFiler]] | いいえ | いいえ | - | Win 32, (win64?)
8818**In memory** | [[How to write in-memory database applications in Lazarus/FPC|memds]] | いいえ | いいえ | - | すべて
8919**In memory** | [[How to write in-memory database applications in Lazarus/FPC|bufdataset]] | いいえ | いいえ | - | すべて
9020[**Firebird**](<http://www.firebirdsql.org/>) | [[Firebird|SQLdb]] | はい | 場合による1 | 1 - 2.5 | i386: Linux, Win32
9121**(Visual) FoxPro** | [[Lazarus Tdbf Tutorial|DBFLaz]] | いいえ | いいえ | 2.0, 2.5, 3.0 (完全ではない) | すべて
9222[**Interbase**](<http://www.embarcadero.com/products/interbase-smp>) | [[Firebird|SQLdb]] | はい | はい | 4 - 6 | i386: Linux, Win32
9323[**Microsoft SQL Server**](<http://www.microsoft.com/sqlserver/>) | [[mssqlconn|SQLdb]] | はい | はい | 6- | FPC 2.6.2+. Linux, macOS, Win32, おそらく*BSD、おそらくSolaris2
9424[**MySQL**](<http://www.mysql.com/>) | [[mysql|SQLdb]] | はい | はい | 4.0 - 8.0 | i386: Linux, Win32
9525**ODBC** | [[ODBCConn|SQLdb]] | はい | 場合による | 3.x 3 | i386: Linux, Win32
9626[**Oracle**](<http://www.oracle.com/>) | [[Oracle|SQLdb]] | はい | はい | - | \-
9727**Paradox** | [[TParadoxDataSet]] | いいえ | いいえ | レベル 7まで(より上も ??) | すべて
9828**Paradox** | [[TParadox]] | はい | いいえ | | Win32
9929[**PostgreSQL**](<http://www.postgresql.org/>) | [[postgresql|SQLdb]] | はい | はい | 6.6 - 8 | i386: Linux, Win32
10030[**Sybase Adaptive Server Enterprise (ASE)**](<http://www.sybase.com/products/databasemanagement/adaptiveserverenterprise>) | [[mssqlconn|SQLdb]] | はい | はい | いずれも | Linux, macOS, Win32, おそらく*BSD、おそらくSolaris2)
10131[**SQLite**](<http://www.sqlite.org/>) | [[SQLdb]] | はい | いいえ | sqlite3 | すべて
10232[**SQLite**](<http://www.sqlite.org/>) | [[SQLite/ja|SQLite(3)Laz]] | はい | いいえ | sqlite2,sqlite3 | すべて
10333**Text files** | sdf | いいえ | いいえ | - | すべて
10434**ZMSQL** | zmsql | いいえ | いいえ | ? | ?
10535
10636[[Databases|注意 (1):]] WindowsとLinux(おそらくmacOSも)では組み込みバージョンのFirebirdが利用可能、またはWindows/Unix/macOS/FreeBSD/他のFirebirdがサポートするプラットフォームで稼働するFirebirdサーバに接続可能
10737
10838[[Databases|注意 (2):]] これらの接続にはドライバとしてFreeTDSライブラリが用いられる。FreeTDSドキュメンテーションはドライバが少なくともこれらのプラットフォームで構築されるはずであるとしている。Windows x86およびx64バージョンは例えば[[1]](<ftp://ftp.freepascal.org/fpc/contrib/windows/dblib_x32.zip>)および[[2]](<ftp://ftp.freepascal.org/fpc/contrib/windows/dblib_x64.zip>)からダウンロードできる
10939
11040[[Databases|注意 (3):]] このバージョン番号はODBCドライバ標準ものであり、ドライバまたはドライバマネージャのバージョン番号ではない。ほとんどのDBMSに対してODBC 3.x ドライバがある。
11141
11242## データベースクライアントへのバインディング
11343
11444もしクライアントライブラリを必要とするデータベースを用いたいときは、そのライブラリをインストールしなければならない。今プログラミングを行っているコンピュータのみならず、アプリケーションを動作させるコンピュータにおいてもである。あるデータベース(特にMySQL)はそのバインディングが、インストールされたライブラリと同じバージョンからアプリケーションでコンパイルされた場合でのみ動作することに注意されたい。 データベース開発元のウェブサイトでこれらのライブラリ(*nixシステムでは .so、Windowsでは .dllsファイル)のインストールの仕方を見つけることができる。バインディングユニットはFPCソースのpackages/baseディレクトリで見つけることができる。それらはmysql_connectのように基本的にそれぞれのデータベースで完全に異なるクライアントAPIからなっている。これらのユニットを用いてデータベースアプリケーションを書くことができるが、Lazarus DB-unitを用いるより通常工数が必要であり、バグに対して敏感である。
11545
11646これらのバインディングライブラリのほとんどはクライアントライブラリにハードリンクされている。アプリケーションがこれらのユニットを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.)。言い換えれば: これらのデータベースにとって、開発機にクライアントライブラリをインストールする必要があり、また、アプリケーションとともに(運用機にも)クライアントライブラリをインストールする必要がある。
11747
11848そのような問題を避けるため、いくつかのパッケージはまた、ライブラリに動的にリンクできるようになっている。それらのライブラリに対するどのような呼び出しの前にも、そのユニットは「初期化」されなければならない。データベースクライアントがインストールされていないコンピュータではこの初期化が失敗する。プロクラムがクライアントライブラリを使う用意ができると、そのユニットは「解放」されなければならない。
11949
12050## データセット
12151
12252### データセットとデータベースの区別
12353
12454多くのデータベースプログラミングの初心者はデータセットとデータベースの区別をしない。Firebird、Interbase、Oracle、Sybase、Microsoft Accessなどの多くのデータベースがある。
12555
12656もっとも単純に概念化すればLazarusのデータセット(TDatasetの派生、例えば、TSQLQueryなど)をデータベースから選んだレコードのコピーの一部と考えることである。以下のSQL文を用いてクエリを行ったとき:
12757```
12858SQLQuery1.SQL.Text:= 'select * from table1 where id <=100';
12959```
13060
13161SQLQuery1をデータベース中のtable1を開き100と100に満たないid値をSQLQuery1にコピーする。
13262
13363このデータセット内容はTDatasetに順々に取得されたTDatasourceを介してTDBGrid、TDBEdiなどのデータベースコントロールを用いて視覚化される。 以下で説明されるinsert、edit、postなどのようなコマンドを用いてこのデータセットの内容を変更できるが、基本的にこれらの操作はデータセットに対してであり、データベーステーブル自身に対して行われるわけではない。
13464
13565変更をデータベースに対して永続的に行うには、TDataSet.ApplyUpdatesを呼ぶまたは、SQL構文insert、update(これらはTDataset.insert、TDataset.updateとは異なる)を実行するなど、もう一手間必要である。
13666
13767データベースのトランザクションのプロパティを通してデータセットを閉じるときに自動的に保存(もしくは破棄)する変更を行う多くのやり方がある。
13868
13969### データセットの基本
14070
14171Lazarus(もしくはFree Pascal)で用いられるデータベースは基本的に[[TDataSet/ja]]クラスに基づいている。 これがアプリケーションに対しテーブルやクエリをもたらす。しかし、他の基底クラスのようにTDatasetは自身は用いず、その派生を用いることになる。これには多くがある。それらは、例えばローカルデータベース、テキストファイル、あるいはPostgreSQL、Firebird、MySQLなどといった異なるバックエンドデータベースへのアクセスをもたらす。いくつかのデータセットの派生はデータベーステーブルに直にリンクされていることもあるが、リンクをもたらすために他の追加のコンポーネントや、ライブラリを用いるものもある。
14272
14373不可視のコンポーネントであるデータセットの派生物は、普通はLazarus Component Library(LCL)というよりはFree Component Library(FCL)である。
14474
14575データセットはプログラム的、視覚的コントロールの双方で用いることができる。典型的なLazarusデータベースアプリケーションにはしばしば双方のメソッドを用いられるだろう。双方の場合で最初の一歩はTDatasetの派生を作成し、望むテーブルかクエリに接続し、開くことである。これは実行時にコードの中で、あるいは作成時にフォームへコンポーネントを配置し、そのプロパティを設定することのいずれでもなされる。 この詳細はTDatasetの派生により大きく異なっており、使っているデータベース応じて何をするべきなのかはDatabases/ja以下の様々なガイドを参照のこと。
14676
14777データセットが開かれると、開かれたテーブルもしくはクエリのそれぞれのフィールドまたはカラム1つに対し、フィールドコンポーネントが生成される。それぞれのフィールドコンポーネントはフィールドの特定のデータ型、即ち、TStringField、に対する派生である。
14878
14979### コードからデータセットを用いる
15080
151-プログラムによるアクセスは[データセットとフィールドコンポーネントを使う](</index.php?title=%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%A8%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%82%92%E4%BD%BF%E3%81%86&action=edit&redlink=1> "データセットとフィールドコンポーネントを使う \(page does not exist\)")で詳述するが、簡単な例として:
81+プログラムによるアクセスは[[データセットとフィールドコンポーネントを使う]]で詳述するが、簡単な例として:
15282
15383 * TDatasetの派生を用いテーブルもしくはクエリを開き、見たい行をすくいあげ、行から行へと移動すること。
15484 * 以下のためにTFieldの派生を使うこと:
15585 * フィールドに対する一般的な情報にアクセスする
15686 * 現在の行に対する特定のデータ値にアクセスする(AsString、AsIntegerなどといったAsプロパティを用いること)
15787 * 以下の双方を用いてTDatasetの派生のフィールドにアクセスする:
15888 * フィールドプロパティ即ち、Field[0]は最初のフィールとである
15989 * フィールの名前によるメソッド即ち、FieldByName('年齢') はデータベースフィールド'年齢'と呼ばれるデータベースフィールドに紐づけられたフィールドを返す
16090
16191フィールドの型については[[Database field type/ja|データベースフィールド型]]の一覧を参照のこと。
16292
16393### 視覚的(データ感知型の)コントロールを用いる
16494
16595「RAD」スタイルのLazarusアプリケーションで簡単にデータベースを用いるために、通常はデザインの時にデータセット派生を設定しデータ感知型コントロールを用いる。これを行うためには:
16696
16797 * 選択するデータセット派生を、サポートするコンポーネントとともにフォームに加え開くこと(「Active」プロパティをtrueにする)。
16898 * [[TDataSource/ja]] コンポーネントを ([[Data Access tab/ja]]から) フォームに加えデータセットと「リンク」させる(DataSetプロパティを設定する)。
16999 * データ感知型コントロールを[[Data Controls tab/ja]]からフォームに加え、それぞれを(データセットではなく)DataSourceコンポーネントにリンクすること。
170100 * ほとんどのコントロールは1つのフィールドにリンクされるため、それぞれのタブのためにフィールドをセットすること。
171101
172102コントロールの詳細は以下の #データコントロールを見ること
173103
174104### データセット状態
175105
176106データセットには多くの状態がある。非常に多くの状態があるが(ソースのTDataSetStateを見ること)。最初に注意すべきおもなものは
177107
178108状態 | 機能
179109---|---
180110dsInactive | データセットは閉じている
181111dsBrowse | データセットを閲覧、値を見ることができる
182112dsEdit | 現在の行の値を編集できる。Postが実行されるまで値は保存されない
183113dsInsert | 新しい行が挿入されている。これに値をセットすることができる。Postが実行されるまでレコードは保存されない
184114
185115他の状態はかなり一時的で通常「自動的に」扱われる。それらは内部的に用いられ、より複雑なコードである。もしデータベースがデータだけを見ており、設計時にデータセットを開くのであれば、この状態は、データセットはほとんどdsBrowseにあるため、たいていは無視できる。しかし、ほとんどのアプリケーションはいずれかの段階でデータを変更する必要がある。もし、データ感知型コントロールを用いている場合、それらはこの多くを自動的に行うだろう。例えば、[[TDBEdit/ja]]コントロールでテキストを変更すると、すでにdsEdit、あるいはdsInsert状態にいなければ、それはデータセットをdsEdit状態にする。現在の状態がdsEditもしくはdsInsertの時に他のレコードに「スクロール」するとそのレコードは「post」され、データセットはdsBrowseに戻るだろう。しかし、データセットをコードからアクセスしていると、たいてい同様にコードの中から状態を変更する必要が生じるだろう。[[TDBNavigator/ja]]コントロール(以下参照)は明示的に状態を変えることができる。
186116
187117### データセット更新状態
188118
189119更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 **例** ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:
190120```
191121procedure QueryAfterPost(DataSet: TDataSet);
192122 begin
193123 case DataSet.UpdateStatus of
194124 usUnmodified : ShowMessage('Unmodified');
195125 usModified : ShowMessage('Modified');
196126 usInserted : ShowMessage('Inserted');
197127 usDeleted : ShowMessage('Deleted');
198128 end;
199129 end;
200130```
201131
202-値の説明
132+**値の説明**
203133
204134 * usUnmodified: レコードは変更されない
205135 * usModified: レコードはデータベースに存在するが、局所的に変更される
206136 * usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される
207137 * usDeleted: レコードはデータベースに存在するが、局所的に削除される
208138
209139### データセット更新状態
210140
211141更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 **例** ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:
212142```
213143procedure QueryAfterPost(DataSet: TDataSet);
214144 begin
215145 case DataSet.UpdateStatus of
216146 usUnmodified : ShowMessage('Unmodified');
217147 usModified : ShowMessage('Modified');
218148 usInserted : ShowMessage('Inserted');
219149 usDeleted : ShowMessage('Deleted');
220150 end;
221151 end;
222152```
223153
224-値の説明
154+**値の説明**
225155
226156 * usUnmodified: レコードは変更されない
227157 * usModified: レコードはデータベースに存在するが、局所的に変更される
228158 * usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される
229159 * usDeleted: レコードはデータベースに存在するが、局所的に削除される
230160
231161### ポストとキャンセル
232162
233163もしレコードを編集、挿入すると新しい値がバッファに保持される。
234164
235165 * データセットキャンセルメソッドを呼ぶことは新しいレコードを除く(挿入)、またはその以前の値に戻す(編集)
236166 * ポストメソッドを呼ぶことは値(edit)、またはレコードを保存(insert)する
237167
238168あるデータセット派生ではデータは直ちにデータベースに書き込まれるのに対し、別のデータベースではすべての変更がさらに保存されるまで、アップデートリストにおかれるだろう。最後にデータが書き込まれても、それらが永続的にデータベースに書き込ませるために「commit」を呼ぶことがあるかもしれない。これらのすべてはまた、データセット派生で異なっているため、使っているものの子細を調べること。
239169
240170### 新しいレコードを挿入する
241171
242172[[TDataSet]]派生にデータを挿入するためには[Insert](<http://www.freepascal.org/docs-html/fcl/db/tdataset.insert.html>)メソッドを用いるべきである。その後、フィールドに値をセットし、最後には新しいレコードを書き込むために、以下の例のようにPostを呼ぶことができる。この例ではまた、ファイルからBLOBデータを挿入する仕方を示している。ストリームデータからデータを取り込むためにLoadFromStreamを用いることもできる。
243173```
244174MyDataset.Insert;
245175 MyDataset.Fields[0].AsInteger := 4; //整数値フィールド
246176 MyDataset.Fields[1].AsString := 'First Name'; //文字列フィールド
247177 (MyDataset.Fields[2] as TBlobField).LoadFromFile('SomeBlobfile.bin'); //BLOB(バイナリ)フィールド
248178 MyDataset.Post;
249179```
250180
251181### テーブルの中の1つの特定のレコードにジャンプする仕方
252182
253183#### テーブルのすべてのレコードを選択した後
254184
255185テーブルのすべてのレコードを選択し、素早くその中に飛び込む欲求でSELECT * FROMを使うと、インデクスを作成し、それを探さなければならないかもしれない。これは望むレコードのみを選択するよりもより効果的である。
256186
257187#### 望むレコードのみを選択すること
258188
259189特定のレコードにジャンプし、それのみを選択する1つの早い解決法は例えばこのようなものである:
260190```
261191var
262192 MyDataset: TSQLQuery;
263193 begin
264194 //...
265195 MyDataset.FieldDefs.Add('SessionId', ftLargeint);
266196 MyDataset.FieldDefs.Add('GameEvent', ftLargeint);
267197 MyDataset.FieldDefs.Add('TableId', ftInteger);
268198 MyDataset.FieldDefs.Add('LoggedIn', ftBoolean);
269199 MyDataset.FieldDefs.Add('PlayerId', ftInteger);
270200 MyDataset.Active := False;
271201 { パラメータ化されていないフォーマット 'を含むテキストや日付では問題に出くわすかもしれない
272202 SQLText := Format('select * from "GameSession" WHERE "SessionId"=%d', [ASessionId]);
273203 }
274204 // 解決法: パラメータ化されたクエリ:
275205 // 実際, これがループの中で行われると、1回だけSQL.Textをセットするだけでよい
276206 // そしてパラメタ値だけ変更する
277207 MyDataset.SQL.Text := 'select * from "GameSession" WHERE "SessionID"=:SessionID');
278208 MyDataSet.ParamByName('SessionID').AsLargeInt := ASessionID;
279209 try
280210 MyDataset.Active := True;
281211 except
282212 //...
283213 end;
284214```
285215
286216そして、このようなことで情報を読むことができる:
287217```
288218lPlayerId := MyDataset.Fields[4].AsInteger;
289219```
290220
291221### フィルタリング
292222
293223望むサブセットにレコードを限定することでデータセットをフィルタリングできる(例えば、Smithで始まるすべての姓)。
294224
295225 * .Filterを使う:
296226 * [[TDbf]]、[[TBufDataset]] と派生、([[TSQLQuery/ja]]を含む)はTDBFフィルタリングパーサを用いる。これを使用する詳細は[[Lazarus Tdbf Tutorial|Lazarus Tdbf Tutorial#Expressions]]を見ること。
297227 * [[TMemDataset]] は .Filterをサポートしない
298- * 独自のフィルタ関数をプログラムできる[callbOnFilterack](</index.php?title=callbOnFilterack&action=edit&redlink=1> "callbOnFilterack \(page does not exist\)")/イベントプロシージャを用いること
228+ * 独自のフィルタ関数をプログラムできる[[callbOnFilterack]]/イベントプロシージャを用いること
299229
300230### ロケート/ルックアップ
301231
302232Non-SQLデータセットでより頻繁に用いられるが(例えば、[[TParadoxDataSet]]、[[TDbf]])、[[locate]]/[[lookup]]を用いることでレコード間をジャンプできる。.
303233
304234### TSQLQueryを用いる
305235
306236[[TSQLQuery]]に関する詳細な情報は[[Working With TSQLQuery/ja]]を見ること
307237
308238### エクスポート
309239
310240FPC/Lazarusはデータセットを様々な形式で出力する機能を持っている。例えば、以下を参照のこと
311241
312242 * [[fpXMLXSDExport]]
313243 * [[fpdbfexport]]
314244 * the other components on the Data Export tab
315245
316246もちろん、これを手動的に行うこともできる(例えば、fpspreadsheetを用いてExcel形式で出力するには[[FPSpreadsheet|FPSpreadsheet#Converting_a_database_to_a_spreadsheet]]を参照)
317247
318248## データコントロール
319249
320250[![DataControl.png](/wiki-images/0/09/DataControl.png)](</File:DataControl.png>)
321251
322252これらのコントロールのいずれを用いるときにも、そのコントロールをフォームに加え、少なくともデータソースプロパティを設定すること。他のプロパティはのちに述べる。
323253
324254### データソースコントロール
325255
326256[![tdatasource 150.png](/wiki-images/5/58/tdatasource_150.png)](</File:tdatasource_150.png>)
327257
328258このコントロールは現在リンクされたどのコントロールが有効なのかを見ている。データソースコントロールはデータセット(例えば、TSQLQuery)にリンクされなければならない。
329259
330260### 単一フィールドコントロール
331261
332262これらのコントロールは単一のフィールドに付随する。データソース同様にフィールド名を設定する。これらのコントロールに含まれるのは:
333263
334264 * [DBText control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbtext.html> "doc:lcl/dbctrls/tdbtext.html") テキストフィールドを表示する(読み取りのみ、縁なし)
335265 * [DBEdit control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbedit.html> "doc:lcl/dbctrls/tdbedit.html") エディットボックスとしてテキストフィールドを表示 / 編集する
336266 * [DBMemo control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbmemo.html> "doc:lcl/dbctrls/tdbmemo.html") 複数行のエディットボックスでテキストフィールドを表示 / 編集する
337267 * [DBImage control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbimage.html> "doc:lcl/dbctrls/tdbimage.html") BLOBとしてデータベースに保存された絵を表示する。注意: デフォルトでは, LazarusはデータベースBLOBフィールドに イメージデータの前にイメージタイプとヘッダを保存する。これはDelphiとは異なっている。しかし、TDBImageをDelphi互換にすることができる: [[Lazarus For Delphi Users|Lazarus For Delphi Users#TDBImage]]を参照
338268 * [DBListBox control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdblistbox.html> "doc:lcl/dbctrls/tdblistbox.html")と[DBComboBox Control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbcombobox.html> "doc:lcl/dbctrls/tdbcombobox.html")コントロールのItemsプロパティの中の値のリストからデータベースフィールドに値を挿入できる
339269 * [DBLookupListBox control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdblookuplistbox.html> "doc:lcl/dbctrls/tdblookuplistbox.html")と[DBLookupComboBox control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdblookupcombobox.html> "doc:lcl/dbctrls/tdblookupcombobox.html")、また[[TDBLookupComboBox]]参照、別のテーブルのルックアップフィールドの内容を表示することによりデータベースに値を挿入できる。これらのコントロールは1つのフィールドにその結果を保存するが、ルックアップ値のためにもう1つのフィールドが必要である。**注意** : 少なくともDBLookupComboBoxについては, FPC 2.6.0ではデータソースの中にリストフィールドも存在していることが必要であるというバグがある。これは何もしないデータソースのデータセットのリストフィールドと同じ名前の計算されたフィールドを宣言することによって回避できる。
340270 * [DBCheckBox control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbcheckbox.html> "doc:lcl/dbctrls/tdbcheckbox.html") チェックボックスをチェック / クリアすることにより、ブール値のフィールドを表示 / 編集する。
341271 * [DBRadioGroup control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbradiogroup.html> "doc:lcl/dbctrls/tdbradiogroup.html") 通常のラジオグループとして項目を表示; マッチした値のリストから読み取る / 設定する
342272 * [DBCalendar control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbcalendar.html> "doc:lcl/dbctrls/tdbcalendar.html") カレンダーパネルから日付フィールドを表示 / 編集する
343273 * [DBGroupBox control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbgroupbox.html> "doc:lcl/dbctrls/tdbgroupbox.html")
344274
345275### [DBGrid コントロール](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbgrids/tdbgrid.html> "doc:lcl/dbgrids/tdbgrid.html")
346276
347277[![tdbgrid 150.png](/wiki-images/a/aa/tdbgrid_150.png)](</File:tdbgrid_150.png>)
348278
349279このコントロールは数多いフィールドを行/列形式で表現する - 実際デフォルトではそれらすべてを表示する。しかし、特定のフィールドに制限する、およびそれぞれのカラムの幅とタイトルを設定するために[columns collection](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbgrids/tdbgrid.columns.html> "doc:lcl/dbgrids/tdbgrid.columns.html") に見出しを設定することができる。
350280
351281[これに言及したドキュメンテーション](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbgrids/tdbgrid.html> "doc:lcl/dbgrids/tdbgrid.html")とは別に, さらなる細目がここで見られる[[Grids Reference Page|Grids Reference Page#TCustomDBGrid]]
352282
353283### [Navigator コントロール](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbnavigator.html>)
354284
355285[![tdbnavigator 150.png](/wiki-images/e/e7/tdbnavigator_150.png)](</File:tdbnavigator_150.png>)
356286
357287このコントロールはデータセットに直接のコントロールを提供する。これにより:
358288
359289 * 次の、前の、もしくは、レコードの始まり、終わりに移動する
360290 * 新しいレコードを加える(dataset.insertメソッドと同等)
361291 * データセットを編集モードにする
362292 * レコードを削除する
363293 * 現在の変更を実行、あるいはキャンセルする
364294 * データをリフレッシュする(マルチユーザーデータベースアプリケーションで有用である)
365295
366296鍵となるプロパティ:
367297
368298 * 可視ボタン: ユーザーができることを制御する。例えば、削除が許されていないと削除ボタンを不可視にする。もしDBGridが同じデータセットに設けられていると、次、前ボタンの要不要を決めなければならないかもしれない。
369299 * 幅: もしすべてのボタンを表示しないのであれば、その幅を高さ*可視ボタンに設定できる。
370300
371301## FPCデータベース稼働テスト
372302
373303Free Pascalデータベースコンポーネントには[[fpcunit]]ベースのテストフレームワークである、機能を確認するために用いられるdbtestframeworkが含まれている。FPCソースツリーのsource\packages\fcl-db\tests\ディレクトリを見てほしい。そこに含まれているのは、いくつかのほかのテスト同様に、様々なデータベーステスト(例えば、データベースエクスポートのテスト)と、コンポーネントで実行されるテストフレームワークである。
374304
375305あるデータベースのテストフレームワークを実行するには:
376306
3773071\. 保存 source\packages\fcl-db\tests\database.ini.txtをsource\packages\fcl-db\tests\database.iniに。
378308
3793092\. 変更 source\packages\fcl-db\tests\database.iniの中にあるうちの使うデータベースを選ぶ。
380310
381311Interbase/Firebirdの例は:
382312```
383313[Database]
384314 type=interbase
385315```
386316
3873173\. 同じファイルで使うデータベースに対する設定を状況に合わせて調整する。例えば、先にInterbaseを選んだなら:
388318```
389319[interbase]
390320 connector=sql
391321 connectorparams=interbase
392322 ; データベースの名前/パス (注意: データベースは既に存在している必要がある)
393323 ; エイリアスを用いることができる(Firebirdドキュメンテーションのaliases.confを参照)
394324 name=testdb
395325 user=sysdba
396326 password=masterkey
397327 ; ホスト名は様々だろう:
398328 ; 組み込みのFirebirdデータベースの場合は空白にしておくことができる
399329 hostname=192.168.0.42
400330```
401331
4023324\. source\packages\fcl-db\tests\dbtestframework.pasをコンパイルして実行する(またLazarusを用いてGUIバージョンのdbtestframework_guiをコンパイル、実行もできる)もしWindowsで組み込みのデータベース(例えば、Firebird 組み込み あるいは sqlite)を用いている場合、事前に必要とされるDLLファイルをそのディレクトリにコピーしておくこと。出力はXMLフォーマット(もしくは、dbtestframework_guiを用いた場合ディスプレイへ)である。
403333
404334詳細はsource\packages\fcl-db\tests\README.txtを参照されたい。
405335
406336## Lazarusに含まれるデータベースパッケージ
407337
408338### sqldblaz.lpk
409339
410340[![sqldb.png](/wiki-images/3/35/sqldb.png)](</File:sqldb.png>)
411341
412342このパッケージは異なるデータベースへのアクセスを提供する。これらに含まれるものに:
413343
414344 * Interbase/Firebird
415345 * Microsoft SQL Server (WindowsのLazarus/FPC x64を除く)
416346 * MySQL
417347 * Oracle (WindowsのLazarus/FPC x64を除く)
418348 * PostgreSQL (WindowsのLazarus/FPC x64を除く)
419349 * SQLite ([[Spatialite]]拡張を含む)
420350 * Sybase ASE (Adaptive Server Enterprise - Sybase ASAと混同しないこと) (WindowsのLazarus/FPC x64を除く)
421351 * ODBCドライバを用いるすべてのデータベース
422352
423353これらのコンポーネント(TSQLQuery, TSQLTransaction, TIBConnection, TODBCConnection, TOracleConnection, TMSSQLConnection, TMySQL40Connection, TMySQL41Connection, TMySQL50Connection, TPQConnection, TSybaseConnection) はコンポーネントパレットの「SQLdb」にある
424354
425355 * [[SQLdb Package]]
426356
427357### dbflaz.lpk
428358
429359このパッケージはdBaseとFoxProデータベースへのアクセスを提供する。[[Lazarus Tdbf Tutorial]]でさらなる情報が得られる。TDbfコンポーネントはコンポーネントパレットの[[Data Access tab]]にある。
430360
431361### sqlitelaz.lpk
432362
433363このパッケージはSQLiteデータベースに対するアクセスを提供する。さらなる情報は[[Lazarus Database Overview/ja]]で得られる。
434364
435365### sdflaz.lpk
436366
437367コンポーネント[[TSdfDataSet]]はコンポーネントパレットの[[Data Access tab]]にある。
438368
439369### lazreport.lpk
440370
441371レポートジェネレータのホームページは <http://lazreport.sourceforge.net/>である。 さらなる情報は[[Projects using Lazarus|ここ]]にある。LazReportはPrinter4Lazarusパッケージに依存する。リビジョン11950 LazReportはLazarus SVN レポジトリに含まれる。
442372
443373### lazdbexport.lpk
444374
445375[[lazdbexport]]参照。
446376
447377## 外部パッケージ / ライブラリ
448378
449379### Zeosデータベースオブジェクト
450380
451381これらのコンポーネントは異なるデータベースに対するアクセスを提供する。さらなる情報は[[ZeosDBO|ここ]]で得られる。このwikiにはまた[[Zeos tutorial]]がある。
452382
453383### Pascalデータオブジェクト
454384
455385現在ある別の選択肢である。
456386
457387サポート:
458388
459389 * MySQL 4.1と5.0
460390 * sqlite-2とsqlite-3
461391 * pgsql-8.1
462392 * interbase-5, interbase-6, firebird-1.0, firebird-1.5, firebird-1.5E, firebird-2.0, firebird-2.0E
463393 * mssql (Microsoftライブラリ) and sybase (FreeTDSライブラリ)
464394 * oracle
465395
466396PHPデータオブジェクトに触発されたPascalデータオブジェクトというデータベース APIによって、ステートメント、バインディング、ストアドプロシージャがサポートされる。 この新しいAPIを用いるために必要なすべてのコードとドキュメンテーションはSourceforgeにある:
467397
468398<http://pdo.sourceforge.net>
469399
470400### TPSQL
471401
472402これらのコンポーネントはPostgreSQLに対するTCP/IP経由のアクセスを提供する。さらなる情報は[[TPSQL|このページ]]で得られる。
473403
474404### FIBL
475405
476406これらのコンポーネントはInterbaseとFirebirdデータベースに対するアクセスを提供する。ホームページは[[3]](<http://sourceforge.net/projects/fiblhttp://sourceforge.net/projects/fibl>)。
477407
478408### IBX
479409
480410IBX For LazarusはFirebirdデータベースに対するアクセスを提供する[[IBX]]参照。
481411
482412### FBLib Firebird ライブラリ
483413
484414[FBLib](<http://fblib.altervista.org/>)はFirebirdリレーショナルデータベースに対するBorland Delphi/Kylix、Free Pascal、Lazarusへの直接アクセスのためのオープンソースのデータ非感知型ライブラリである。
485415
486416現在の特色には以下が含まれる:
487417
488418 * Firebird 1.0.x, 1.5.x and 2.x ClassicまたはSuperServerへの直接アクセス
489419 * マルチプラットフォーム[Win32、Gnu/Linu、FreeBSD)
490420 * 「fbclient」もしくは「gds32」による自動クライアントライブラリ選択
491421 * パラメータクエリ
492422 * SQL Dialect 1/3のサポート
493423 * LGPLライセンス
494424 * メタデータの抽出
495425 * 簡単なスクリプトパーサ
496426 * 最終のEXEファイルにたった100-150 KBの追加
497427 * BLOBフィールドサポート
498428 * HTML SQLスクリプトへのデータエクスポート
499429 * サービスマネージャ(バックアップ、レストア、gfix...)
500430 * イベントアラート
501431
502432[FBLibのウェブサイト](<http://fblib.altervista.org/>)でドキュメンテーションをダウンロードできる。
503433
504434### Unified Interbase
505435
506436UIB はInterbase、Firebird、YAFFILデータベースにに対するアクセスを提供する。ホームページは[www.progdigy.com](<http://www.progdigy.com>)。 SVNレポジトリはhttps://uib.svn.sourceforge.net/svnroot/uib以下で得られる。
507437
508438### TechInsite Object Persistence Framework (tiOPF)
509439
510440tiOPFに対するさらなる情報は[[tiOPF/ja|page]]で得られる。
511441
512442### Advantage TDataSet Descendant
513443
514444The Advantage TDataSet DescendantはAdvantage Database Serverに接続し(そしてテーブルを開く)手段を提供する。Advantageは柔軟で管理不要のデータベースで Clipper、FoxPro、Visual FoxPro 9 DBFファイルフォーマットに対するクライアント/サーバ、Peer-to-peerファイルフォーマット、 同様に新しい特徴を持つ独自ファイルフォーマットへの移行パスを提供する。
515445
516446Key Features:
517447
518448 * 利用料無料の、peer-to-peerデータベースアクセスをクライアントサーバへの移行
519449 * マルチプラットフォーム(クライアントはWindows、Linux、サーバはWindows、Linux、NetWare)
520450 * ナビゲーショナル、SQLデータベースアクセス
521451 * フルテキストサーチエンジン
522452 * テーブル、インデクス、メモ、通信暗号化
523453 * TDatasetコンポーネントとの互換性
524454 * オンラインバックアップ
525455 * サーバは冗長化をサポート
526456
527457さらなる情報は[Advantage Database Server](<http://www.advantagedatabase.com>)参照。
528458
529459### ZMSQL、sql強化されたインメモリデータベース
530460
531461さらなる情報は[[ZMSQL|ZMSQL wikiページ]]を参照。
532462
533463ZMSQLはオープンソースのセミコロンをデリミタとする値のテーブルで操作されるFree Pascal(FPC)に向けられたインメモリメータベースである。 完全にPascalで書かれており、外部ライブラリの依存性がない。SQL実装にはJanSQLエンジンを用いている。
534464
535465これにより:
536466
537467 * 平文テキストテーブル、「から」、また、「へ」、入出力される。
538468 * データのクエリにSQLを用いる
539469 * 他のデータセットからデータとスキーマをコピーする
540470 * あらかじめ決められたフィールド定義またはその場でフィールドを生成する
541471 * マスタ/詳細フィルタリング
542472 * 参照完全性
543473 * パラメータ化されたクエリ
544474
545475ダウンロードにはソースコード、いくつかのデモアプリケーション、コンポーネントの特徴、readmeが含まれる。
546476
547477## 以下も参照のこと
548478
549479 * [[Portal:Databases/ja|Database Portal]]
550480 * [[Lazarus DB Faq/ja]]
551481
552482---
553483*From the Free Pascal wiki, page "Databases/ja", as the Internet Archive kept it on 2025-01-17, last changed on 2024-09-28. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history