Sign in Join
Wiki copytemporary

Databases/ja: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Databases/ja

OldNewLine
1+**日本語版メニュー**
2+---
3+[[Main Page/ja|メインページ]] \- [[Lazarus Documentation/ja|Lazarus Documentation日本語版]] \- [[Japanese Localization Notes|翻訳ノート]] \- [[Bug Tracking/ja|日本語障害情報]]
4+---
5+[[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\)")
30+
31+このページは「[[Lazarus]]と**データベース** 」の概要である。以下の表にはサポートされているデータベースが載せられている。
32+
33+クライアントライブラリがインストールされているデータベースコンポーネント(もしデータベースがクライアントライブラリを必要とするなら)に限る、さもないとLazarusはファイルがないために起動ができない可能性がある。そのコンポーネントのアンインストールが不可能なら、Lazarusを再インストールする必要がある。
34+
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+
82+### サポートされるデータベース
83+
84+データベース | パッケージ名 | クライアントライブラリが必要か | サーバが必要か | サポートされるバージョン | サポートされるプラットフォーム
85+---|---|---|---|---|---
86+[**Advantage**](<http://www.advantagedatabase.com/>) | TAdsDataSet | はい | いいえ | 10.1以降 | i386: Linux, Win32
87+**DTurboPower FlashFiler** | [[FlashFiler]] | いいえ | いいえ | - | Win 32, (win64?)
88+**In memory** | [[How to write in-memory database applications in Lazarus/FPC|memds]] | いいえ | いいえ | - | すべて
89+**In memory** | [[How to write in-memory database applications in Lazarus/FPC|bufdataset]] | いいえ | いいえ | - | すべて
90+[**Firebird**](<http://www.firebirdsql.org/>) | [[Firebird|SQLdb]] | はい | 場合による1 | 1 - 2.5 | i386: Linux, Win32
91+**(Visual) FoxPro** | [[Lazarus Tdbf Tutorial|DBFLaz]] | いいえ | いいえ | 2.0, 2.5, 3.0 (完全ではない) | すべて
92+[**Interbase**](<http://www.embarcadero.com/products/interbase-smp>) | [[Firebird|SQLdb]] | はい | はい | 4 - 6 | i386: Linux, Win32
93+[**Microsoft SQL Server**](<http://www.microsoft.com/sqlserver/>) | [[mssqlconn|SQLdb]] | はい | はい | 6- | FPC 2.6.2+. Linux, macOS, Win32, おそらく*BSD、おそらくSolaris2
94+[**MySQL**](<http://www.mysql.com/>) | [[mysql|SQLdb]] | はい | はい | 4.0 - 8.0 | i386: Linux, Win32
95+**ODBC** | [[ODBCConn|SQLdb]] | はい | 場合による | 3.x 3 | i386: Linux, Win32
96+[**Oracle**](<http://www.oracle.com/>) | [[Oracle|SQLdb]] | はい | はい | - | \-
97+**Paradox** | [[TParadoxDataSet]] | いいえ | いいえ | レベル 7まで(より上も ??) | すべて
98+**Paradox** | [[TParadox]] | はい | いいえ | | Win32
99+[**PostgreSQL**](<http://www.postgresql.org/>) | [[postgresql|SQLdb]] | はい | はい | 6.6 - 8 | i386: Linux, Win32
100+[**Sybase Adaptive Server Enterprise (ASE)**](<http://www.sybase.com/products/databasemanagement/adaptiveserverenterprise>) | [[mssqlconn|SQLdb]] | はい | はい | いずれも | Linux, macOS, Win32, おそらく*BSD、おそらくSolaris2)
101+[**SQLite**](<http://www.sqlite.org/>) | [[SQLdb]] | はい | いいえ | sqlite3 | すべて
102+[**SQLite**](<http://www.sqlite.org/>) | [[SQLite/ja|SQLite(3)Laz]] | はい | いいえ | sqlite2,sqlite3 | すべて
103+**Text files** | sdf | いいえ | いいえ | - | すべて
104+**ZMSQL** | zmsql | いいえ | いいえ | ? | ?
105+
106+[[Databases|注意 (1):]] WindowsとLinux(おそらくmacOSも)では組み込みバージョンのFirebirdが利用可能、またはWindows/Unix/macOS/FreeBSD/他のFirebirdがサポートするプラットフォームで稼働するFirebirdサーバに接続可能
107+
108+[[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>)からダウンロードできる
109+
110+[[Databases|注意 (3):]] このバージョン番号はODBCドライバ標準ものであり、ドライバまたはドライバマネージャのバージョン番号ではない。ほとんどのDBMSに対してODBC 3.x ドライバがある。
111+
112+## データベースクライアントへのバインディング
113+
114+もしクライアントライブラリを必要とするデータベースを用いたいときは、そのライブラリをインストールしなければならない。今プログラミングを行っているコンピュータのみならず、アプリケーションを動作させるコンピュータにおいてもである。あるデータベース(特にMySQL)はそのバインディングが、インストールされたライブラリと同じバージョンからアプリケーションでコンパイルされた場合でのみ動作することに注意されたい。 データベース開発元のウェブサイトでこれらのライブラリ(*nixシステムでは .so、Windowsでは .dllsファイル)のインストールの仕方を見つけることができる。バインディングユニットはFPCソースのpackages/baseディレクトリで見つけることができる。それらはmysql_connectのように基本的にそれぞれのデータベースで完全に異なるクライアントAPIからなっている。これらのユニットを用いてデータベースアプリケーションを書くことができるが、Lazarus DB-unitを用いるより通常工数が必要であり、バグに対して敏感である。
115+
116+これらのバインディングライブラリのほとんどはクライアントライブラリにハードリンクされている。アプリケーションがこれらのユニットを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.)。言い換えれば: これらのデータベースにとって、開発機にクライアントライブラリをインストールする必要があり、また、アプリケーションとともに(運用機にも)クライアントライブラリをインストールする必要がある。
117+
118+そのような問題を避けるため、いくつかのパッケージはまた、ライブラリに動的にリンクできるようになっている。それらのライブラリに対するどのような呼び出しの前にも、そのユニットは「初期化」されなければならない。データベースクライアントがインストールされていないコンピュータではこの初期化が失敗する。プロクラムがクライアントライブラリを使う用意ができると、そのユニットは「解放」されなければならない。
119+
120+## データセット
121+
122+### データセットとデータベースの区別
123+
124+多くのデータベースプログラミングの初心者はデータセットとデータベースの区別をしない。Firebird、Interbase、Oracle、Sybase、Microsoft Accessなどの多くのデータベースがある。
125+
126+もっとも単純に概念化すればLazarusのデータセット(TDatasetの派生、例えば、TSQLQueryなど)をデータベースから選んだレコードのコピーの一部と考えることである。以下のSQL文を用いてクエリを行ったとき:
127+```
128+SQLQuery1.SQL.Text:= 'select * from table1 where id <=100';
129+```
130+
131+SQLQuery1をデータベース中のtable1を開き100と100に満たないid値をSQLQuery1にコピーする。
132+
133+このデータセット内容はTDatasetに順々に取得されたTDatasourceを介してTDBGrid、TDBEdiなどのデータベースコントロールを用いて視覚化される。 以下で説明されるinsert、edit、postなどのようなコマンドを用いてこのデータセットの内容を変更できるが、基本的にこれらの操作はデータセットに対してであり、データベーステーブル自身に対して行われるわけではない。
134+
135+変更をデータベースに対して永続的に行うには、TDataSet.ApplyUpdatesを呼ぶまたは、SQL構文insert、update(これらはTDataset.insert、TDataset.updateとは異なる)を実行するなど、もう一手間必要である。
136+
137+データベースのトランザクションのプロパティを通してデータセットを閉じるときに自動的に保存(もしくは破棄)する変更を行う多くのやり方がある。
138+
139+### データセットの基本
140+
141+Lazarus(もしくはFree Pascal)で用いられるデータベースは基本的に[[TDataSet/ja]]クラスに基づいている。 これがアプリケーションに対しテーブルやクエリをもたらす。しかし、他の基底クラスのようにTDatasetは自身は用いず、その派生を用いることになる。これには多くがある。それらは、例えばローカルデータベース、テキストファイル、あるいはPostgreSQL、Firebird、MySQLなどといった異なるバックエンドデータベースへのアクセスをもたらす。いくつかのデータセットの派生はデータベーステーブルに直にリンクされていることもあるが、リンクをもたらすために他の追加のコンポーネントや、ライブラリを用いるものもある。
142+
143+不可視のコンポーネントであるデータセットの派生物は、普通はLazarus Component Library(LCL)というよりはFree Component Library(FCL)である。
144+
145+データセットはプログラム的、視覚的コントロールの双方で用いることができる。典型的なLazarusデータベースアプリケーションにはしばしば双方のメソッドを用いられるだろう。双方の場合で最初の一歩はTDatasetの派生を作成し、望むテーブルかクエリに接続し、開くことである。これは実行時にコードの中で、あるいは作成時にフォームへコンポーネントを配置し、そのプロパティを設定することのいずれでもなされる。 この詳細はTDatasetの派生により大きく異なっており、使っているデータベース応じて何をするべきなのかはDatabases/ja以下の様々なガイドを参照のこと。
146+
147+データセットが開かれると、開かれたテーブルもしくはクエリのそれぞれのフィールドまたはカラム1つに対し、フィールドコンポーネントが生成される。それぞれのフィールドコンポーネントはフィールドの特定のデータ型、即ち、TStringField、に対する派生である。
148+
149+### コードからデータセットを用いる
150+
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\)")で詳述するが、簡単な例として:
152+
153+ * TDatasetの派生を用いテーブルもしくはクエリを開き、見たい行をすくいあげ、行から行へと移動すること。
154+ * 以下のためにTFieldの派生を使うこと:
155+ * フィールドに対する一般的な情報にアクセスする
156+ * 現在の行に対する特定のデータ値にアクセスする(AsString、AsIntegerなどといったAsプロパティを用いること)
157+ * 以下の双方を用いてTDatasetの派生のフィールドにアクセスする:
158+ * フィールドプロパティ即ち、Field[0]は最初のフィールとである
159+ * フィールの名前によるメソッド即ち、FieldByName('年齢') はデータベースフィールド'年齢'と呼ばれるデータベースフィールドに紐づけられたフィールドを返す
160+
161+フィールドの型については[[Database field type/ja|データベースフィールド型]]の一覧を参照のこと。
162+
163+### 視覚的(データ感知型の)コントロールを用いる
164+
165+「RAD」スタイルのLazarusアプリケーションで簡単にデータベースを用いるために、通常はデザインの時にデータセット派生を設定しデータ感知型コントロールを用いる。これを行うためには:
166+
167+ * 選択するデータセット派生を、サポートするコンポーネントとともにフォームに加え開くこと(「Active」プロパティをtrueにする)。
168+ * [[TDataSource/ja]] コンポーネントを ([[Data Access tab/ja]]から) フォームに加えデータセットと「リンク」させる(DataSetプロパティを設定する)。
169+ * データ感知型コントロールを[[Data Controls tab/ja]]からフォームに加え、それぞれを(データセットではなく)DataSourceコンポーネントにリンクすること。
170+ * ほとんどのコントロールは1つのフィールドにリンクされるため、それぞれのタブのためにフィールドをセットすること。
171+
172+コントロールの詳細は以下の #データコントロールを見ること
173+
174+### データセット状態
175+
176+データセットには多くの状態がある。非常に多くの状態があるが(ソースのTDataSetStateを見ること)。最初に注意すべきおもなものは
177+
178+状態 | 機能
179+---|---
180+dsInactive | データセットは閉じている
181+dsBrowse | データセットを閲覧、値を見ることができる
182+dsEdit | 現在の行の値を編集できる。Postが実行されるまで値は保存されない
183+dsInsert | 新しい行が挿入されている。これに値をセットすることができる。Postが実行されるまでレコードは保存されない
184+
185+他の状態はかなり一時的で通常「自動的に」扱われる。それらは内部的に用いられ、より複雑なコードである。もしデータベースがデータだけを見ており、設計時にデータセットを開くのであれば、この状態は、データセットはほとんどdsBrowseにあるため、たいていは無視できる。しかし、ほとんどのアプリケーションはいずれかの段階でデータを変更する必要がある。もし、データ感知型コントロールを用いている場合、それらはこの多くを自動的に行うだろう。例えば、[[TDBEdit/ja]]コントロールでテキストを変更すると、すでにdsEdit、あるいはdsInsert状態にいなければ、それはデータセットをdsEdit状態にする。現在の状態がdsEditもしくはdsInsertの時に他のレコードに「スクロール」するとそのレコードは「post」され、データセットはdsBrowseに戻るだろう。しかし、データセットをコードからアクセスしていると、たいてい同様にコードの中から状態を変更する必要が生じるだろう。[[TDBNavigator/ja]]コントロール(以下参照)は明示的に状態を変えることができる。
186+
187+### データセット更新状態
188+
189+更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 **例** ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:
190+```
191+procedure QueryAfterPost(DataSet: TDataSet);
192+ begin
193+ case DataSet.UpdateStatus of
194+ usUnmodified : ShowMessage('Unmodified');
195+ usModified : ShowMessage('Modified');
196+ usInserted : ShowMessage('Inserted');
197+ usDeleted : ShowMessage('Deleted');
198+ end;
199+ end;
200+```
201+
202+値の説明
203+
204+ * usUnmodified: レコードは変更されない
205+ * usModified: レコードはデータベースに存在するが、局所的に変更される
206+ * usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される
207+ * usDeleted: レコードはデータベースに存在するが、局所的に削除される
208+
209+### データセット更新状態
210+
211+更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 **例** ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:
212+```
213+procedure QueryAfterPost(DataSet: TDataSet);
214+ begin
215+ case DataSet.UpdateStatus of
216+ usUnmodified : ShowMessage('Unmodified');
217+ usModified : ShowMessage('Modified');
218+ usInserted : ShowMessage('Inserted');
219+ usDeleted : ShowMessage('Deleted');
220+ end;
221+ end;
222+```
223+
224+値の説明
225+
226+ * usUnmodified: レコードは変更されない
227+ * usModified: レコードはデータベースに存在するが、局所的に変更される
228+ * usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される
229+ * usDeleted: レコードはデータベースに存在するが、局所的に削除される
230+
231+### ポストとキャンセル
232+
233+もしレコードを編集、挿入すると新しい値がバッファに保持される。
234+
235+ * データセットキャンセルメソッドを呼ぶことは新しいレコードを除く(挿入)、またはその以前の値に戻す(編集)
236+ * ポストメソッドを呼ぶことは値(edit)、またはレコードを保存(insert)する
237+
238+あるデータセット派生ではデータは直ちにデータベースに書き込まれるのに対し、別のデータベースではすべての変更がさらに保存されるまで、アップデートリストにおかれるだろう。最後にデータが書き込まれても、それらが永続的にデータベースに書き込ませるために「commit」を呼ぶことがあるかもしれない。これらのすべてはまた、データセット派生で異なっているため、使っているものの子細を調べること。
239+
240+### 新しいレコードを挿入する
241+
242+[[TDataSet]]派生にデータを挿入するためには[Insert](<http://www.freepascal.org/docs-html/fcl/db/tdataset.insert.html>)メソッドを用いるべきである。その後、フィールドに値をセットし、最後には新しいレコードを書き込むために、以下の例のようにPostを呼ぶことができる。この例ではまた、ファイルからBLOBデータを挿入する仕方を示している。ストリームデータからデータを取り込むためにLoadFromStreamを用いることもできる。
243+```
244+MyDataset.Insert;
245+ MyDataset.Fields[0].AsInteger := 4; //整数値フィールド
246+ MyDataset.Fields[1].AsString := 'First Name'; //文字列フィールド
247+ (MyDataset.Fields[2] as TBlobField).LoadFromFile('SomeBlobfile.bin'); //BLOB(バイナリ)フィールド
248+ MyDataset.Post;
249+```
250+
251+### テーブルの中の1つの特定のレコードにジャンプする仕方
252+
253+#### テーブルのすべてのレコードを選択した後
254+
255+テーブルのすべてのレコードを選択し、素早くその中に飛び込む欲求でSELECT * FROMを使うと、インデクスを作成し、それを探さなければならないかもしれない。これは望むレコードのみを選択するよりもより効果的である。
256+
257+#### 望むレコードのみを選択すること
258+
259+特定のレコードにジャンプし、それのみを選択する1つの早い解決法は例えばこのようなものである:
260+```
261+var
262+ MyDataset: TSQLQuery;
263+ begin
264+ //...
265+ MyDataset.FieldDefs.Add('SessionId', ftLargeint);
266+ MyDataset.FieldDefs.Add('GameEvent', ftLargeint);
267+ MyDataset.FieldDefs.Add('TableId', ftInteger);
268+ MyDataset.FieldDefs.Add('LoggedIn', ftBoolean);
269+ MyDataset.FieldDefs.Add('PlayerId', ftInteger);
270+ MyDataset.Active := False;
271+ { パラメータ化されていないフォーマット 'を含むテキストや日付では問題に出くわすかもしれない
272+ SQLText := Format('select * from "GameSession" WHERE "SessionId"=%d', [ASessionId]);
273+ }
274+ // 解決法: パラメータ化されたクエリ:
275+ // 実際, これがループの中で行われると、1回だけSQL.Textをセットするだけでよい
276+ // そしてパラメタ値だけ変更する
277+ MyDataset.SQL.Text := 'select * from "GameSession" WHERE "SessionID"=:SessionID');
278+ MyDataSet.ParamByName('SessionID').AsLargeInt := ASessionID;
279+ try
280+ MyDataset.Active := True;
281+ except
282+ //...
283+ end;
284+```
285+
286+そして、このようなことで情報を読むことができる:
287+```
288+lPlayerId := MyDataset.Fields[4].AsInteger;
289+```
290+
291+### フィルタリング
292+
293+望むサブセットにレコードを限定することでデータセットをフィルタリングできる(例えば、Smithで始まるすべての姓)。
294+
295+ * .Filterを使う:
296+ * [[TDbf]]、[[TBufDataset]] と派生、([[TSQLQuery/ja]]を含む)はTDBFフィルタリングパーサを用いる。これを使用する詳細は[[Lazarus Tdbf Tutorial|Lazarus Tdbf Tutorial#Expressions]]を見ること。
297+ * [[TMemDataset]] は .Filterをサポートしない
298+ * 独自のフィルタ関数をプログラムできる[callbOnFilterack](</index.php?title=callbOnFilterack&action=edit&redlink=1> "callbOnFilterack \(page does not exist\)")/イベントプロシージャを用いること
299+
300+### ロケート/ルックアップ
301+
302+Non-SQLデータセットでより頻繁に用いられるが(例えば、[[TParadoxDataSet]]、[[TDbf]])、[[locate]]/[[lookup]]を用いることでレコード間をジャンプできる。.
303+
304+### TSQLQueryを用いる
305+
306+[[TSQLQuery]]に関する詳細な情報は[[Working With TSQLQuery/ja]]を見ること
307+
308+### エクスポート
309+
310+FPC/Lazarusはデータセットを様々な形式で出力する機能を持っている。例えば、以下を参照のこと
311+
312+ * [[fpXMLXSDExport]]
313+ * [[fpdbfexport]]
314+ * the other components on the Data Export tab
315+
316+もちろん、これを手動的に行うこともできる(例えば、fpspreadsheetを用いてExcel形式で出力するには[[FPSpreadsheet|FPSpreadsheet#Converting_a_database_to_a_spreadsheet]]を参照)
317+
318+## データコントロール
319+
320+[![DataControl.png](/wiki-images/0/09/DataControl.png)](</File:DataControl.png>)
321+
322+これらのコントロールのいずれを用いるときにも、そのコントロールをフォームに加え、少なくともデータソースプロパティを設定すること。他のプロパティはのちに述べる。
323+
324+### データソースコントロール
325+
326+[![tdatasource 150.png](/wiki-images/5/58/tdatasource_150.png)](</File:tdatasource_150.png>)
327+
328+このコントロールは現在リンクされたどのコントロールが有効なのかを見ている。データソースコントロールはデータセット(例えば、TSQLQuery)にリンクされなければならない。
329+
330+### 単一フィールドコントロール
331+
332+これらのコントロールは単一のフィールドに付随する。データソース同様にフィールド名を設定する。これらのコントロールに含まれるのは:
333+
334+ * [DBText control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbtext.html> "doc:lcl/dbctrls/tdbtext.html") テキストフィールドを表示する(読み取りのみ、縁なし)
335+ * [DBEdit control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbedit.html> "doc:lcl/dbctrls/tdbedit.html") エディットボックスとしてテキストフィールドを表示 / 編集する
336+ * [DBMemo control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbmemo.html> "doc:lcl/dbctrls/tdbmemo.html") 複数行のエディットボックスでテキストフィールドを表示 / 編集する
337+ * [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]]を参照
338+ * [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プロパティの中の値のリストからデータベースフィールドに値を挿入できる
339+ * [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ではデータソースの中にリストフィールドも存在していることが必要であるというバグがある。これは何もしないデータソースのデータセットのリストフィールドと同じ名前の計算されたフィールドを宣言することによって回避できる。
340+ * [DBCheckBox control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbcheckbox.html> "doc:lcl/dbctrls/tdbcheckbox.html") チェックボックスをチェック / クリアすることにより、ブール値のフィールドを表示 / 編集する。
341+ * [DBRadioGroup control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbradiogroup.html> "doc:lcl/dbctrls/tdbradiogroup.html") 通常のラジオグループとして項目を表示; マッチした値のリストから読み取る / 設定する
342+ * [DBCalendar control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbcalendar.html> "doc:lcl/dbctrls/tdbcalendar.html") カレンダーパネルから日付フィールドを表示 / 編集する
343+ * [DBGroupBox control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbgroupbox.html> "doc:lcl/dbctrls/tdbgroupbox.html")
344+
345+### [DBGrid コントロール](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbgrids/tdbgrid.html> "doc:lcl/dbgrids/tdbgrid.html")
346+
347+[![tdbgrid 150.png](/wiki-images/a/aa/tdbgrid_150.png)](</File:tdbgrid_150.png>)
348+
349+このコントロールは数多いフィールドを行/列形式で表現する - 実際デフォルトではそれらすべてを表示する。しかし、特定のフィールドに制限する、およびそれぞれのカラムの幅とタイトルを設定するために[columns collection](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbgrids/tdbgrid.columns.html> "doc:lcl/dbgrids/tdbgrid.columns.html") に見出しを設定することができる。
350+
351+[これに言及したドキュメンテーション](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbgrids/tdbgrid.html> "doc:lcl/dbgrids/tdbgrid.html")とは別に, さらなる細目がここで見られる[[Grids Reference Page|Grids Reference Page#TCustomDBGrid]]
352+
353+### [Navigator コントロール](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbnavigator.html>)
354+
355+[![tdbnavigator 150.png](/wiki-images/e/e7/tdbnavigator_150.png)](</File:tdbnavigator_150.png>)
356+
357+このコントロールはデータセットに直接のコントロールを提供する。これにより:
358+
359+ * 次の、前の、もしくは、レコードの始まり、終わりに移動する
360+ * 新しいレコードを加える(dataset.insertメソッドと同等)
361+ * データセットを編集モードにする
362+ * レコードを削除する
363+ * 現在の変更を実行、あるいはキャンセルする
364+ * データをリフレッシュする(マルチユーザーデータベースアプリケーションで有用である)
365+
366+鍵となるプロパティ:
367+
368+ * 可視ボタン: ユーザーができることを制御する。例えば、削除が許されていないと削除ボタンを不可視にする。もしDBGridが同じデータセットに設けられていると、次、前ボタンの要不要を決めなければならないかもしれない。
369+ * 幅: もしすべてのボタンを表示しないのであれば、その幅を高さ*可視ボタンに設定できる。
370+
371+## FPCデータベース稼働テスト
372+
373+Free Pascalデータベースコンポーネントには[[fpcunit]]ベースのテストフレームワークである、機能を確認するために用いられるdbtestframeworkが含まれている。FPCソースツリーのsource\packages\fcl-db\tests\ディレクトリを見てほしい。そこに含まれているのは、いくつかのほかのテスト同様に、様々なデータベーステスト(例えば、データベースエクスポートのテスト)と、コンポーネントで実行されるテストフレームワークである。
374+
375+あるデータベースのテストフレームワークを実行するには:
376+
377+1\. 保存 source\packages\fcl-db\tests\database.ini.txtをsource\packages\fcl-db\tests\database.iniに。
378+
379+2\. 変更 source\packages\fcl-db\tests\database.iniの中にあるうちの使うデータベースを選ぶ。
380+
381+Interbase/Firebirdの例は:
382+```
383+[Database]
384+ type=interbase
385+```
386+
387+3\. 同じファイルで使うデータベースに対する設定を状況に合わせて調整する。例えば、先にInterbaseを選んだなら:
388+```
389+[interbase]
390+ connector=sql
391+ connectorparams=interbase
392+ ; データベースの名前/パス (注意: データベースは既に存在している必要がある)
393+ ; エイリアスを用いることができる(Firebirdドキュメンテーションのaliases.confを参照)
394+ name=testdb
395+ user=sysdba
396+ password=masterkey
397+ ; ホスト名は様々だろう:
398+ ; 組み込みのFirebirdデータベースの場合は空白にしておくことができる
399+ hostname=192.168.0.42
400+```
401+
402+4\. source\packages\fcl-db\tests\dbtestframework.pasをコンパイルして実行する(またLazarusを用いてGUIバージョンのdbtestframework_guiをコンパイル、実行もできる)もしWindowsで組み込みのデータベース(例えば、Firebird 組み込み あるいは sqlite)を用いている場合、事前に必要とされるDLLファイルをそのディレクトリにコピーしておくこと。出力はXMLフォーマット(もしくは、dbtestframework_guiを用いた場合ディスプレイへ)である。
403+
404+詳細はsource\packages\fcl-db\tests\README.txtを参照されたい。
405+
406+## Lazarusに含まれるデータベースパッケージ
407+
408+### sqldblaz.lpk
409+
410+[![sqldb.png](/wiki-images/3/35/sqldb.png)](</File:sqldb.png>)
411+
412+このパッケージは異なるデータベースへのアクセスを提供する。これらに含まれるものに:
413+
414+ * Interbase/Firebird
415+ * Microsoft SQL Server (WindowsのLazarus/FPC x64を除く)
416+ * MySQL
417+ * Oracle (WindowsのLazarus/FPC x64を除く)
418+ * PostgreSQL (WindowsのLazarus/FPC x64を除く)
419+ * SQLite ([[Spatialite]]拡張を含む)
420+ * Sybase ASE (Adaptive Server Enterprise - Sybase ASAと混同しないこと) (WindowsのLazarus/FPC x64を除く)
421+ * ODBCドライバを用いるすべてのデータベース
422+
423+これらのコンポーネント(TSQLQuery, TSQLTransaction, TIBConnection, TODBCConnection, TOracleConnection, TMSSQLConnection, TMySQL40Connection, TMySQL41Connection, TMySQL50Connection, TPQConnection, TSybaseConnection) はコンポーネントパレットの「SQLdb」にある
424+
425+ * [[SQLdb Package]]
426+
427+### dbflaz.lpk
428+
429+このパッケージはdBaseとFoxProデータベースへのアクセスを提供する。[[Lazarus Tdbf Tutorial]]でさらなる情報が得られる。TDbfコンポーネントはコンポーネントパレットの[[Data Access tab]]にある。
430+
431+### sqlitelaz.lpk
432+
433+このパッケージはSQLiteデータベースに対するアクセスを提供する。さらなる情報は[[Lazarus Database Overview/ja]]で得られる。
434+
435+### sdflaz.lpk
436+
437+コンポーネント[[TSdfDataSet]]はコンポーネントパレットの[[Data Access tab]]にある。
438+
439+### lazreport.lpk
440+
441+レポートジェネレータのホームページは <http://lazreport.sourceforge.net/>である。 さらなる情報は[[Projects using Lazarus|ここ]]にある。LazReportはPrinter4Lazarusパッケージに依存する。リビジョン11950 LazReportはLazarus SVN レポジトリに含まれる。
442+
443+### lazdbexport.lpk
444+
445+[[lazdbexport]]参照。
446+
447+## 外部パッケージ / ライブラリ
448+
449+### Zeosデータベースオブジェクト
450+
451+これらのコンポーネントは異なるデータベースに対するアクセスを提供する。さらなる情報は[[ZeosDBO|ここ]]で得られる。このwikiにはまた[[Zeos tutorial]]がある。
452+
453+### Pascalデータオブジェクト
454+
455+現在ある別の選択肢である。
456+
457+サポート:
458+
459+ * MySQL 4.1と5.0
460+ * sqlite-2とsqlite-3
461+ * pgsql-8.1
462+ * interbase-5, interbase-6, firebird-1.0, firebird-1.5, firebird-1.5E, firebird-2.0, firebird-2.0E
463+ * mssql (Microsoftライブラリ) and sybase (FreeTDSライブラリ)
464+ * oracle
465+
466+PHPデータオブジェクトに触発されたPascalデータオブジェクトというデータベース APIによって、ステートメント、バインディング、ストアドプロシージャがサポートされる。 この新しいAPIを用いるために必要なすべてのコードとドキュメンテーションはSourceforgeにある:
467+
468+<http://pdo.sourceforge.net>
469+
470+### TPSQL
471+
472+これらのコンポーネントはPostgreSQLに対するTCP/IP経由のアクセスを提供する。さらなる情報は[[TPSQL|このページ]]で得られる。
473+
474+### FIBL
475+
476+これらのコンポーネントはInterbaseとFirebirdデータベースに対するアクセスを提供する。ホームページは[[3]](<http://sourceforge.net/projects/fiblhttp://sourceforge.net/projects/fibl>)。
477+
478+### IBX
479+
480+IBX For LazarusはFirebirdデータベースに対するアクセスを提供する[[IBX]]参照。
481+
482+### FBLib Firebird ライブラリ
483+
484+[FBLib](<http://fblib.altervista.org/>)はFirebirdリレーショナルデータベースに対するBorland Delphi/Kylix、Free Pascal、Lazarusへの直接アクセスのためのオープンソースのデータ非感知型ライブラリである。
485+
486+現在の特色には以下が含まれる:
487+
488+ * Firebird 1.0.x, 1.5.x and 2.x ClassicまたはSuperServerへの直接アクセス
489+ * マルチプラットフォーム[Win32、Gnu/Linu、FreeBSD)
490+ * 「fbclient」もしくは「gds32」による自動クライアントライブラリ選択
491+ * パラメータクエリ
492+ * SQL Dialect 1/3のサポート
493+ * LGPLライセンス
494+ * メタデータの抽出
495+ * 簡単なスクリプトパーサ
496+ * 最終のEXEファイルにたった100-150 KBの追加
497+ * BLOBフィールドサポート
498+ * HTML SQLスクリプトへのデータエクスポート
499+ * サービスマネージャ(バックアップ、レストア、gfix...)
500+ * イベントアラート
501+
502+[FBLibのウェブサイト](<http://fblib.altervista.org/>)でドキュメンテーションをダウンロードできる。
503+
504+### Unified Interbase
505+
506+UIB はInterbase、Firebird、YAFFILデータベースにに対するアクセスを提供する。ホームページは[www.progdigy.com](<http://www.progdigy.com>)。 SVNレポジトリはhttps://uib.svn.sourceforge.net/svnroot/uib以下で得られる。
507+
508+### TechInsite Object Persistence Framework (tiOPF)
509+
510+tiOPFに対するさらなる情報は[[tiOPF/ja|page]]で得られる。
511+
512+### Advantage TDataSet Descendant
513+
514+The Advantage TDataSet DescendantはAdvantage Database Serverに接続し(そしてテーブルを開く)手段を提供する。Advantageは柔軟で管理不要のデータベースで Clipper、FoxPro、Visual FoxPro 9 DBFファイルフォーマットに対するクライアント/サーバ、Peer-to-peerファイルフォーマット、 同様に新しい特徴を持つ独自ファイルフォーマットへの移行パスを提供する。
515+
516+Key Features:
517+
518+ * 利用料無料の、peer-to-peerデータベースアクセスをクライアントサーバへの移行
519+ * マルチプラットフォーム(クライアントはWindows、Linux、サーバはWindows、Linux、NetWare)
520+ * ナビゲーショナル、SQLデータベースアクセス
521+ * フルテキストサーチエンジン
522+ * テーブル、インデクス、メモ、通信暗号化
523+ * TDatasetコンポーネントとの互換性
524+ * オンラインバックアップ
525+ * サーバは冗長化をサポート
526+
527+さらなる情報は[Advantage Database Server](<http://www.advantagedatabase.com>)参照。
528+
529+### ZMSQL、sql強化されたインメモリデータベース
530+
531+さらなる情報は[[ZMSQL|ZMSQL wikiページ]]を参照。
532+
533+ZMSQLはオープンソースのセミコロンをデリミタとする値のテーブルで操作されるFree Pascal(FPC)に向けられたインメモリメータベースである。 完全にPascalで書かれており、外部ライブラリの依存性がない。SQL実装にはJanSQLエンジンを用いている。
534+
535+これにより:
536+
537+ * 平文テキストテーブル、「から」、また、「へ」、入出力される。
538+ * データのクエリにSQLを用いる
539+ * 他のデータセットからデータとスキーマをコピーする
540+ * あらかじめ決められたフィールド定義またはその場でフィールドを生成する
541+ * マスタ/詳細フィルタリング
542+ * 参照完全性
543+ * パラメータ化されたクエリ
544+
545+ダウンロードにはソースコード、いくつかのデモアプリケーション、コンポーネントの特徴、readmeが含まれる。
546+
547+## 以下も参照のこと
548+
549+ * [[Portal:Databases/ja|Database Portal]]
550+ * [[Lazarus DB Faq/ja]]
551+
552+---
553+*From the Free Pascal wiki, page "Databases/ja", as the Internet Archive kept it on 2025-01-17. 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