Sign in Join
Wiki copytemporary

Databases/ja: what changed

Revision 1 to 2. 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|**データベースのポータル**]]
66参照:
77
88 * Databases 概要
99 * [[Database libraries/ja|ライブラリ]]
1010 * [[Database field type/ja|フィールドの型]]
1111 * [[Data Controls tab/ja|コントロール]]
1212 * [[Lazarus DB Faq/ja|FAQ]]
1313 * [[SqlDBHowto/ja]]
1414 * [[Working With TSQLQuery/ja|TSQLQuery の利用]]
1515 * [[How to write in-memory database applications in Lazarus/FPC/ja|メモリ上で動作するデータベースの作り方]]
1616
1717チュートリアル/練習となる記事:
1818
1919 * [[Lazarus Database Overview/ja|概要]]
2020 * [[SQLdb Tutorial0/ja|0 - データベースのセットアップ]]
2121 * [[SQLdb Tutorial1/ja|1 - 開始]]
2222 * [[SQLdb Tutorial2/ja|2 - 編集]]
2323 * [[SQLdb Tutorial3/ja|3 - クエリ]]
2424 * [[SQLdb Tutorial4/ja|4 - データモジュール]]
2525 * [[SQLdb Programming Reference/ja]]
2626
2727各種データベース
2828
2929 [[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\)")
3030
3131このページは「[[Lazarus]]と**データベース** 」の概要である。以下の表にはサポートされているデータベースが載せられている。
3232
3333クライアントライブラリがインストールされているデータベースコンポーネント(もしデータベースがクライアントライブラリを必要とするなら)に限る、さもないとLazarusはファイルがないために起動ができない可能性がある。そのコンポーネントのアンインストールが不可能なら、Lazarusを再インストールする必要がある。
3434
3535## Contents
3636
3737 * 1 サポートされるデータベース
3838 * 2 データベースクライアントへのバインディング
3939 * 3 データセット
4040 * 3.1 データセットとデータベースの区別
4141 * 3.2 データセットの基本
4242 * 3.3 コードからデータセットを用いる
4343 * 3.4 視覚的(データ感知型の)コントロールを用いる
4444 * 3.5 データセット状態
4545 * 3.6 データセット更新状態
4646 * 3.7 データセット更新状態
4747 * 3.8 ポストとキャンセル
4848 * 3.9 新しいレコードを挿入する
4949 * 3.10 テーブルの中の1つの特定のレコードにジャンプする仕方
5050 * 3.10.1 テーブルのすべてのレコードを選択した後
5151 * 3.10.2 望むレコードのみを選択すること
5252 * 3.11 フィルタリング
5353 * 3.12 ロケート/ルックアップ
5454 * 3.13 TSQLQueryを用いる
5555 * 3.14 エクスポート
5656 * 4 データコントロール
5757 * 4.1 データソースコントロール
5858 * 4.2 単一フィールドコントロール
5959 * 4.3 DBGrid コントロール
6060 * 4.4 Navigator コントロール
6161 * 5 FPCデータベース稼働テスト
6262 * 6 Lazarusに含まれるデータベースパッケージ
6363 * 6.1 sqldblaz.lpk
6464 * 6.2 dbflaz.lpk
6565 * 6.3 sqlitelaz.lpk
6666 * 6.4 sdflaz.lpk
6767 * 6.5 lazreport.lpk
6868 * 6.6 lazdbexport.lpk
6969 * 7 外部パッケージ / ライブラリ
7070 * 7.1 Zeosデータベースオブジェクト
7171 * 7.2 Pascalデータオブジェクト
7272 * 7.3 TPSQL
7373 * 7.4 FIBL
7474 * 7.5 IBX
7575 * 7.6 FBLib Firebird ライブラリ
7676 * 7.7 Unified Interbase
7777 * 7.8 TechInsite Object Persistence Framework (tiOPF)
7878 * 7.9 Advantage TDataSet Descendant
7979 * 7.10 ZMSQL、sql強化されたインメモリデータベース
8080 * 8 以下も参照のこと
8181
8282### サポートされるデータベース
8383
8484データベース | パッケージ名 | クライアントライブラリが必要か | サーバが必要か | サポートされるバージョン | サポートされるプラットフォーム
8585---|---|---|---|---|---
8686[**Advantage**](<http://www.advantagedatabase.com/>) | TAdsDataSet | はい | いいえ | 10.1以降 | i386: Linux, Win32
8787**DTurboPower FlashFiler** | [[FlashFiler]] | いいえ | いいえ | - | Win 32, (win64?)
8888**In memory** | [[How to write in-memory database applications in Lazarus/FPC|memds]] | いいえ | いいえ | - | すべて
8989**In memory** | [[How to write in-memory database applications in Lazarus/FPC|bufdataset]] | いいえ | いいえ | - | すべて
9090[**Firebird**](<http://www.firebirdsql.org/>) | [[Firebird|SQLdb]] | はい | 場合による1 | 1 - 2.5 | i386: Linux, Win32
9191**(Visual) FoxPro** | [[Lazarus Tdbf Tutorial|DBFLaz]] | いいえ | いいえ | 2.0, 2.5, 3.0 (完全ではない) | すべて
9292[**Interbase**](<http://www.embarcadero.com/products/interbase-smp>) | [[Firebird|SQLdb]] | はい | はい | 4 - 6 | i386: Linux, Win32
9393[**Microsoft SQL Server**](<http://www.microsoft.com/sqlserver/>) | [[mssqlconn|SQLdb]] | はい | はい | 6- | FPC 2.6.2+. Linux, macOS, Win32, おそらく*BSD、おそらくSolaris2
9494[**MySQL**](<http://www.mysql.com/>) | [[mysql|SQLdb]] | はい | はい | 4.0 - 8.0 | i386: Linux, Win32
9595**ODBC** | [[ODBCConn|SQLdb]] | はい | 場合による | 3.x 3 | i386: Linux, Win32
9696[**Oracle**](<http://www.oracle.com/>) | [[Oracle|SQLdb]] | はい | はい | - | \-
9797**Paradox** | [[TParadoxDataSet]] | いいえ | いいえ | レベル 7まで(より上も ??) | すべて
9898**Paradox** | [[TParadox]] | はい | いいえ | | Win32
9999[**PostgreSQL**](<http://www.postgresql.org/>) | [[postgresql|SQLdb]] | はい | はい | 6.6 - 8 | i386: Linux, Win32
100100[**Sybase Adaptive Server Enterprise (ASE)**](<http://www.sybase.com/products/databasemanagement/adaptiveserverenterprise>) | [[mssqlconn|SQLdb]] | はい | はい | いずれも | Linux, macOS, Win32, おそらく*BSD、おそらくSolaris2)
101101[**SQLite**](<http://www.sqlite.org/>) | [[SQLdb]] | はい | いいえ | sqlite3 | すべて
102102[**SQLite**](<http://www.sqlite.org/>) | [[SQLite/ja|SQLite(3)Laz]] | はい | いいえ | sqlite2,sqlite3 | すべて
103103**Text files** | sdf | いいえ | いいえ | - | すべて
104104**ZMSQL** | zmsql | いいえ | いいえ | ? | ?
105105
106106[[Databases|注意 (1):]] WindowsとLinux(おそらくmacOSも)では組み込みバージョンのFirebirdが利用可能、またはWindows/Unix/macOS/FreeBSD/他のFirebirdがサポートするプラットフォームで稼働するFirebirdサーバに接続可能
107107
108108[[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>)からダウンロードできる
109109
110110[[Databases|注意 (3):]] このバージョン番号はODBCドライバ標準ものであり、ドライバまたはドライバマネージャのバージョン番号ではない。ほとんどのDBMSに対してODBC 3.x ドライバがある。
111111
112112## データベースクライアントへのバインディング
113113
114114もしクライアントライブラリを必要とするデータベースを用いたいときは、そのライブラリをインストールしなければならない。今プログラミングを行っているコンピュータのみならず、アプリケーションを動作させるコンピュータにおいてもである。あるデータベース(特にMySQL)はそのバインディングが、インストールされたライブラリと同じバージョンからアプリケーションでコンパイルされた場合でのみ動作することに注意されたい。 データベース開発元のウェブサイトでこれらのライブラリ(*nixシステムでは .so、Windowsでは .dllsファイル)のインストールの仕方を見つけることができる。バインディングユニットはFPCソースのpackages/baseディレクトリで見つけることができる。それらはmysql_connectのように基本的にそれぞれのデータベースで完全に異なるクライアントAPIからなっている。これらのユニットを用いてデータベースアプリケーションを書くことができるが、Lazarus DB-unitを用いるより通常工数が必要であり、バグに対して敏感である。
115115
116116これらのバインディングライブラリのほとんどはクライアントライブラリにハードリンクされている。アプリケーションがこれらのユニットを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.)。言い換えれば: これらのデータベースにとって、開発機にクライアントライブラリをインストールする必要があり、また、アプリケーションとともに(運用機にも)クライアントライブラリをインストールする必要がある。
117117
118118そのような問題を避けるため、いくつかのパッケージはまた、ライブラリに動的にリンクできるようになっている。それらのライブラリに対するどのような呼び出しの前にも、そのユニットは「初期化」されなければならない。データベースクライアントがインストールされていないコンピュータではこの初期化が失敗する。プロクラムがクライアントライブラリを使う用意ができると、そのユニットは「解放」されなければならない。
119119
120120## データセット
121121
122122### データセットとデータベースの区別
123123
124124多くのデータベースプログラミングの初心者はデータセットとデータベースの区別をしない。Firebird、Interbase、Oracle、Sybase、Microsoft Accessなどの多くのデータベースがある。
125125
126126もっとも単純に概念化すればLazarusのデータセット(TDatasetの派生、例えば、TSQLQueryなど)をデータベースから選んだレコードのコピーの一部と考えることである。以下のSQL文を用いてクエリを行ったとき:
127127```
128128SQLQuery1.SQL.Text:= 'select * from table1 where id <=100';
129129```
130130
131131SQLQuery1をデータベース中のtable1を開き100と100に満たないid値をSQLQuery1にコピーする。
132132
133133このデータセット内容はTDatasetに順々に取得されたTDatasourceを介してTDBGrid、TDBEdiなどのデータベースコントロールを用いて視覚化される。 以下で説明されるinsert、edit、postなどのようなコマンドを用いてこのデータセットの内容を変更できるが、基本的にこれらの操作はデータセットに対してであり、データベーステーブル自身に対して行われるわけではない。
134134
135135変更をデータベースに対して永続的に行うには、TDataSet.ApplyUpdatesを呼ぶまたは、SQL構文insert、update(これらはTDataset.insert、TDataset.updateとは異なる)を実行するなど、もう一手間必要である。
136136
137137データベースのトランザクションのプロパティを通してデータセットを閉じるときに自動的に保存(もしくは破棄)する変更を行う多くのやり方がある。
138138
139139### データセットの基本
140140
141141Lazarus(もしくはFree Pascal)で用いられるデータベースは基本的に[[TDataSet/ja]]クラスに基づいている。 これがアプリケーションに対しテーブルやクエリをもたらす。しかし、他の基底クラスのようにTDatasetは自身は用いず、その派生を用いることになる。これには多くがある。それらは、例えばローカルデータベース、テキストファイル、あるいはPostgreSQL、Firebird、MySQLなどといった異なるバックエンドデータベースへのアクセスをもたらす。いくつかのデータセットの派生はデータベーステーブルに直にリンクされていることもあるが、リンクをもたらすために他の追加のコンポーネントや、ライブラリを用いるものもある。
142142
143143不可視のコンポーネントであるデータセットの派生物は、普通はLazarus Component Library(LCL)というよりはFree Component Library(FCL)である。
144144
145145データセットはプログラム的、視覚的コントロールの双方で用いることができる。典型的なLazarusデータベースアプリケーションにはしばしば双方のメソッドを用いられるだろう。双方の場合で最初の一歩はTDatasetの派生を作成し、望むテーブルかクエリに接続し、開くことである。これは実行時にコードの中で、あるいは作成時にフォームへコンポーネントを配置し、そのプロパティを設定することのいずれでもなされる。 この詳細はTDatasetの派生により大きく異なっており、使っているデータベース応じて何をするべきなのかはDatabases/ja以下の様々なガイドを参照のこと。
146146
147147データセットが開かれると、開かれたテーブルもしくはクエリのそれぞれのフィールドまたはカラム1つに対し、フィールドコンポーネントが生成される。それぞれのフィールドコンポーネントはフィールドの特定のデータ型、即ち、TStringField、に対する派生である。
148148
149149### コードからデータセットを用いる
150150
151151プログラムによるアクセスは[データセットとフィールドコンポーネントを使う](</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\)")で詳述するが、簡単な例として:
152152
153153 * TDatasetの派生を用いテーブルもしくはクエリを開き、見たい行をすくいあげ、行から行へと移動すること。
154154 * 以下のためにTFieldの派生を使うこと:
155155 * フィールドに対する一般的な情報にアクセスする
156156 * 現在の行に対する特定のデータ値にアクセスする(AsString、AsIntegerなどといったAsプロパティを用いること)
157157 * 以下の双方を用いてTDatasetの派生のフィールドにアクセスする:
158158 * フィールドプロパティ即ち、Field[0]は最初のフィールとである
159159 * フィールの名前によるメソッド即ち、FieldByName('年齢') はデータベースフィールド'年齢'と呼ばれるデータベースフィールドに紐づけられたフィールドを返す
160160
161161フィールドの型については[[Database field type/ja|データベースフィールド型]]の一覧を参照のこと。
162162
163163### 視覚的(データ感知型の)コントロールを用いる
164164
165165「RAD」スタイルのLazarusアプリケーションで簡単にデータベースを用いるために、通常はデザインの時にデータセット派生を設定しデータ感知型コントロールを用いる。これを行うためには:
166166
167167 * 選択するデータセット派生を、サポートするコンポーネントとともにフォームに加え開くこと(「Active」プロパティをtrueにする)。
168168 * [[TDataSource/ja]] コンポーネントを ([[Data Access tab/ja]]から) フォームに加えデータセットと「リンク」させる(DataSetプロパティを設定する)。
169169 * データ感知型コントロールを[[Data Controls tab/ja]]からフォームに加え、それぞれを(データセットではなく)DataSourceコンポーネントにリンクすること。
170170 * ほとんどのコントロールは1つのフィールドにリンクされるため、それぞれのタブのためにフィールドをセットすること。
171171
172172コントロールの詳細は以下の #データコントロールを見ること
173173
174174### データセット状態
175175
176176データセットには多くの状態がある。非常に多くの状態があるが(ソースのTDataSetStateを見ること)。最初に注意すべきおもなものは
177177
178178状態 | 機能
179179---|---
180180dsInactive | データセットは閉じている
181181dsBrowse | データセットを閲覧、値を見ることができる
182182dsEdit | 現在の行の値を編集できる。Postが実行されるまで値は保存されない
183183dsInsert | 新しい行が挿入されている。これに値をセットすることができる。Postが実行されるまでレコードは保存されない
184184
185185他の状態はかなり一時的で通常「自動的に」扱われる。それらは内部的に用いられ、より複雑なコードである。もしデータベースがデータだけを見ており、設計時にデータセットを開くのであれば、この状態は、データセットはほとんどdsBrowseにあるため、たいていは無視できる。しかし、ほとんどのアプリケーションはいずれかの段階でデータを変更する必要がある。もし、データ感知型コントロールを用いている場合、それらはこの多くを自動的に行うだろう。例えば、[[TDBEdit/ja]]コントロールでテキストを変更すると、すでにdsEdit、あるいはdsInsert状態にいなければ、それはデータセットをdsEdit状態にする。現在の状態がdsEditもしくはdsInsertの時に他のレコードに「スクロール」するとそのレコードは「post」され、データセットはdsBrowseに戻るだろう。しかし、データセットをコードからアクセスしていると、たいてい同様にコードの中から状態を変更する必要が生じるだろう。[[TDBNavigator/ja]]コントロール(以下参照)は明示的に状態を変えることができる。
186186
187187### データセット更新状態
188188
189189更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 **例** ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:
190190```
191191procedure QueryAfterPost(DataSet: TDataSet);
192192 begin
193193 case DataSet.UpdateStatus of
194194 usUnmodified : ShowMessage('Unmodified');
195195 usModified : ShowMessage('Modified');
196196 usInserted : ShowMessage('Inserted');
197197 usDeleted : ShowMessage('Deleted');
198198 end;
199199 end;
200200```
201201
202202値の説明
203203
204204 * usUnmodified: レコードは変更されない
205205 * usModified: レコードはデータベースに存在するが、局所的に変更される
206206 * usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される
207207 * usDeleted: レコードはデータベースに存在するが、局所的に削除される
208208
209209### データセット更新状態
210210
211211更新状態は、アップデートがいまだにデータベースに対して行われていなければ、レコードバッファの現在の状態を決定する。 **例** ApplyUpdatesがデータを挿入(Insert)、更新(Update)もしくは削除(Delete)するときに検出する方法:
212212```
213213procedure QueryAfterPost(DataSet: TDataSet);
214214 begin
215215 case DataSet.UpdateStatus of
216216 usUnmodified : ShowMessage('Unmodified');
217217 usModified : ShowMessage('Modified');
218218 usInserted : ShowMessage('Inserted');
219219 usDeleted : ShowMessage('Deleted');
220220 end;
221221 end;
222222```
223223
224224値の説明
225225
226226 * usUnmodified: レコードは変更されない
227227 * usModified: レコードはデータベースに存在するが、局所的に変更される
228228 * usInserted: レコードはデータベースにまだ存在しないが、局所的に挿入される
229229 * usDeleted: レコードはデータベースに存在するが、局所的に削除される
230230
231231### ポストとキャンセル
232232
233233もしレコードを編集、挿入すると新しい値がバッファに保持される。
234234
235235 * データセットキャンセルメソッドを呼ぶことは新しいレコードを除く(挿入)、またはその以前の値に戻す(編集)
236236 * ポストメソッドを呼ぶことは値(edit)、またはレコードを保存(insert)する
237237
238238あるデータセット派生ではデータは直ちにデータベースに書き込まれるのに対し、別のデータベースではすべての変更がさらに保存されるまで、アップデートリストにおかれるだろう。最後にデータが書き込まれても、それらが永続的にデータベースに書き込ませるために「commit」を呼ぶことがあるかもしれない。これらのすべてはまた、データセット派生で異なっているため、使っているものの子細を調べること。
239239
240240### 新しいレコードを挿入する
241241
242242[[TDataSet]]派生にデータを挿入するためには[Insert](<http://www.freepascal.org/docs-html/fcl/db/tdataset.insert.html>)メソッドを用いるべきである。その後、フィールドに値をセットし、最後には新しいレコードを書き込むために、以下の例のようにPostを呼ぶことができる。この例ではまた、ファイルからBLOBデータを挿入する仕方を示している。ストリームデータからデータを取り込むためにLoadFromStreamを用いることもできる。
243243```
244244MyDataset.Insert;
245245 MyDataset.Fields[0].AsInteger := 4; //整数値フィールド
246246 MyDataset.Fields[1].AsString := 'First Name'; //文字列フィールド
247247 (MyDataset.Fields[2] as TBlobField).LoadFromFile('SomeBlobfile.bin'); //BLOB(バイナリ)フィールド
248248 MyDataset.Post;
249249```
250250
251251### テーブルの中の1つの特定のレコードにジャンプする仕方
252252
253253#### テーブルのすべてのレコードを選択した後
254254
255255テーブルのすべてのレコードを選択し、素早くその中に飛び込む欲求でSELECT * FROMを使うと、インデクスを作成し、それを探さなければならないかもしれない。これは望むレコードのみを選択するよりもより効果的である。
256256
257257#### 望むレコードのみを選択すること
258258
259259特定のレコードにジャンプし、それのみを選択する1つの早い解決法は例えばこのようなものである:
260260```
261261var
262262 MyDataset: TSQLQuery;
263263 begin
264264 //...
265265 MyDataset.FieldDefs.Add('SessionId', ftLargeint);
266266 MyDataset.FieldDefs.Add('GameEvent', ftLargeint);
267267 MyDataset.FieldDefs.Add('TableId', ftInteger);
268268 MyDataset.FieldDefs.Add('LoggedIn', ftBoolean);
269269 MyDataset.FieldDefs.Add('PlayerId', ftInteger);
270270 MyDataset.Active := False;
271271 { パラメータ化されていないフォーマット 'を含むテキストや日付では問題に出くわすかもしれない
272272 SQLText := Format('select * from "GameSession" WHERE "SessionId"=%d', [ASessionId]);
273273 }
274274 // 解決法: パラメータ化されたクエリ:
275275 // 実際, これがループの中で行われると、1回だけSQL.Textをセットするだけでよい
276276 // そしてパラメタ値だけ変更する
277277 MyDataset.SQL.Text := 'select * from "GameSession" WHERE "SessionID"=:SessionID');
278278 MyDataSet.ParamByName('SessionID').AsLargeInt := ASessionID;
279279 try
280280 MyDataset.Active := True;
281281 except
282282 //...
283283 end;
284284```
285285
286286そして、このようなことで情報を読むことができる:
287287```
288288lPlayerId := MyDataset.Fields[4].AsInteger;
289289```
290290
291291### フィルタリング
292292
293293望むサブセットにレコードを限定することでデータセットをフィルタリングできる(例えば、Smithで始まるすべての姓)。
294294
295295 * .Filterを使う:
296296 * [[TDbf]]、[[TBufDataset]] と派生、([[TSQLQuery/ja]]を含む)はTDBFフィルタリングパーサを用いる。これを使用する詳細は[[Lazarus Tdbf Tutorial|Lazarus Tdbf Tutorial#Expressions]]を見ること。
297297 * [[TMemDataset]] は .Filterをサポートしない
298298 * 独自のフィルタ関数をプログラムできる[callbOnFilterack](</index.php?title=callbOnFilterack&action=edit&redlink=1> "callbOnFilterack \(page does not exist\)")/イベントプロシージャを用いること
299299
300300### ロケート/ルックアップ
301301
302302Non-SQLデータセットでより頻繁に用いられるが(例えば、[[TParadoxDataSet]]、[[TDbf]])、[[locate]]/[[lookup]]を用いることでレコード間をジャンプできる。.
303303
304304### TSQLQueryを用いる
305305
306306[[TSQLQuery]]に関する詳細な情報は[[Working With TSQLQuery/ja]]を見ること
307307
308308### エクスポート
309309
310310FPC/Lazarusはデータセットを様々な形式で出力する機能を持っている。例えば、以下を参照のこと
311311
312312 * [[fpXMLXSDExport]]
313313 * [[fpdbfexport]]
314314 * the other components on the Data Export tab
315315
316316もちろん、これを手動的に行うこともできる(例えば、fpspreadsheetを用いてExcel形式で出力するには[[FPSpreadsheet|FPSpreadsheet#Converting_a_database_to_a_spreadsheet]]を参照)
317317
318318## データコントロール
319319
320320[![DataControl.png](/wiki-images/0/09/DataControl.png)](</File:DataControl.png>)
321321
322322これらのコントロールのいずれを用いるときにも、そのコントロールをフォームに加え、少なくともデータソースプロパティを設定すること。他のプロパティはのちに述べる。
323323
324324### データソースコントロール
325325
326326[![tdatasource 150.png](/wiki-images/5/58/tdatasource_150.png)](</File:tdatasource_150.png>)
327327
328328このコントロールは現在リンクされたどのコントロールが有効なのかを見ている。データソースコントロールはデータセット(例えば、TSQLQuery)にリンクされなければならない。
329329
330330### 単一フィールドコントロール
331331
332332これらのコントロールは単一のフィールドに付随する。データソース同様にフィールド名を設定する。これらのコントロールに含まれるのは:
333333
334334 * [DBText control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbtext.html> "doc:lcl/dbctrls/tdbtext.html") テキストフィールドを表示する(読み取りのみ、縁なし)
335335 * [DBEdit control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbedit.html> "doc:lcl/dbctrls/tdbedit.html") エディットボックスとしてテキストフィールドを表示 / 編集する
336336 * [DBMemo control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbmemo.html> "doc:lcl/dbctrls/tdbmemo.html") 複数行のエディットボックスでテキストフィールドを表示 / 編集する
337337 * [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]]を参照
338338 * [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プロパティの中の値のリストからデータベースフィールドに値を挿入できる
339339 * [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ではデータソースの中にリストフィールドも存在していることが必要であるというバグがある。これは何もしないデータソースのデータセットのリストフィールドと同じ名前の計算されたフィールドを宣言することによって回避できる。
340340 * [DBCheckBox control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbcheckbox.html> "doc:lcl/dbctrls/tdbcheckbox.html") チェックボックスをチェック / クリアすることにより、ブール値のフィールドを表示 / 編集する。
341341 * [DBRadioGroup control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbradiogroup.html> "doc:lcl/dbctrls/tdbradiogroup.html") 通常のラジオグループとして項目を表示; マッチした値のリストから読み取る / 設定する
342342 * [DBCalendar control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbcalendar.html> "doc:lcl/dbctrls/tdbcalendar.html") カレンダーパネルから日付フィールドを表示 / 編集する
343343 * [DBGroupBox control](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbgroupbox.html> "doc:lcl/dbctrls/tdbgroupbox.html")
344344
345345### [DBGrid コントロール](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbgrids/tdbgrid.html> "doc:lcl/dbgrids/tdbgrid.html")
346346
347347[![tdbgrid 150.png](/wiki-images/a/aa/tdbgrid_150.png)](</File:tdbgrid_150.png>)
348348
349349このコントロールは数多いフィールドを行/列形式で表現する - 実際デフォルトではそれらすべてを表示する。しかし、特定のフィールドに制限する、およびそれぞれのカラムの幅とタイトルを設定するために[columns collection](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbgrids/tdbgrid.columns.html> "doc:lcl/dbgrids/tdbgrid.columns.html") に見出しを設定することができる。
350350
351351[これに言及したドキュメンテーション](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbgrids/tdbgrid.html> "doc:lcl/dbgrids/tdbgrid.html")とは別に, さらなる細目がここで見られる[[Grids Reference Page|Grids Reference Page#TCustomDBGrid]]
352352
353353### [Navigator コントロール](<http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbnavigator.html>)
354354
355355[![tdbnavigator 150.png](/wiki-images/e/e7/tdbnavigator_150.png)](</File:tdbnavigator_150.png>)
356356
357357このコントロールはデータセットに直接のコントロールを提供する。これにより:
358358
359359 * 次の、前の、もしくは、レコードの始まり、終わりに移動する
360360 * 新しいレコードを加える(dataset.insertメソッドと同等)
361361 * データセットを編集モードにする
362362 * レコードを削除する
363363 * 現在の変更を実行、あるいはキャンセルする
364364 * データをリフレッシュする(マルチユーザーデータベースアプリケーションで有用である)
365365
366366鍵となるプロパティ:
367367
368368 * 可視ボタン: ユーザーができることを制御する。例えば、削除が許されていないと削除ボタンを不可視にする。もしDBGridが同じデータセットに設けられていると、次、前ボタンの要不要を決めなければならないかもしれない。
369369 * 幅: もしすべてのボタンを表示しないのであれば、その幅を高さ*可視ボタンに設定できる。
370370
371371## FPCデータベース稼働テスト
372372
373373Free Pascalデータベースコンポーネントには[[fpcunit]]ベースのテストフレームワークである、機能を確認するために用いられるdbtestframeworkが含まれている。FPCソースツリーのsource\packages\fcl-db\tests\ディレクトリを見てほしい。そこに含まれているのは、いくつかのほかのテスト同様に、様々なデータベーステスト(例えば、データベースエクスポートのテスト)と、コンポーネントで実行されるテストフレームワークである。
374374
375375あるデータベースのテストフレームワークを実行するには:
376376
3773771\. 保存 source\packages\fcl-db\tests\database.ini.txtをsource\packages\fcl-db\tests\database.iniに。
378378
3793792\. 変更 source\packages\fcl-db\tests\database.iniの中にあるうちの使うデータベースを選ぶ。
380380
381381Interbase/Firebirdの例は:
382382```
383383[Database]
384384 type=interbase
385385```
386386
3873873\. 同じファイルで使うデータベースに対する設定を状況に合わせて調整する。例えば、先にInterbaseを選んだなら:
388388```
389389[interbase]
390390 connector=sql
391391 connectorparams=interbase
392392 ; データベースの名前/パス (注意: データベースは既に存在している必要がある)
393393 ; エイリアスを用いることができる(Firebirdドキュメンテーションのaliases.confを参照)
394394 name=testdb
395395 user=sysdba
396396 password=masterkey
397397 ; ホスト名は様々だろう:
398398 ; 組み込みのFirebirdデータベースの場合は空白にしておくことができる
399399 hostname=192.168.0.42
400400```
401401
4024024\. source\packages\fcl-db\tests\dbtestframework.pasをコンパイルして実行する(またLazarusを用いてGUIバージョンのdbtestframework_guiをコンパイル、実行もできる)もしWindowsで組み込みのデータベース(例えば、Firebird 組み込み あるいは sqlite)を用いている場合、事前に必要とされるDLLファイルをそのディレクトリにコピーしておくこと。出力はXMLフォーマット(もしくは、dbtestframework_guiを用いた場合ディスプレイへ)である。
403403
404404詳細はsource\packages\fcl-db\tests\README.txtを参照されたい。
405405
406406## Lazarusに含まれるデータベースパッケージ
407407
408408### sqldblaz.lpk
409409
410410[![sqldb.png](/wiki-images/3/35/sqldb.png)](</File:sqldb.png>)
411411
412412このパッケージは異なるデータベースへのアクセスを提供する。これらに含まれるものに:
413413
414414 * Interbase/Firebird
415415 * Microsoft SQL Server (WindowsのLazarus/FPC x64を除く)
416416 * MySQL
417417 * Oracle (WindowsのLazarus/FPC x64を除く)
418418 * PostgreSQL (WindowsのLazarus/FPC x64を除く)
419419 * SQLite ([[Spatialite]]拡張を含む)
420420 * Sybase ASE (Adaptive Server Enterprise - Sybase ASAと混同しないこと) (WindowsのLazarus/FPC x64を除く)
421421 * ODBCドライバを用いるすべてのデータベース
422422
423423これらのコンポーネント(TSQLQuery, TSQLTransaction, TIBConnection, TODBCConnection, TOracleConnection, TMSSQLConnection, TMySQL40Connection, TMySQL41Connection, TMySQL50Connection, TPQConnection, TSybaseConnection) はコンポーネントパレットの「SQLdb」にある
424424
425425 * [[SQLdb Package]]
426426
427427### dbflaz.lpk
428428
429429このパッケージはdBaseとFoxProデータベースへのアクセスを提供する。[[Lazarus Tdbf Tutorial]]でさらなる情報が得られる。TDbfコンポーネントはコンポーネントパレットの[[Data Access tab]]にある。
430430
431431### sqlitelaz.lpk
432432
433433このパッケージはSQLiteデータベースに対するアクセスを提供する。さらなる情報は[[Lazarus Database Overview/ja]]で得られる。
434434
435435### sdflaz.lpk
436436
437437コンポーネント[[TSdfDataSet]]はコンポーネントパレットの[[Data Access tab]]にある。
438438
439439### lazreport.lpk
440440
441441レポートジェネレータのホームページは <http://lazreport.sourceforge.net/>である。 さらなる情報は[[Projects using Lazarus|ここ]]にある。LazReportはPrinter4Lazarusパッケージに依存する。リビジョン11950 LazReportはLazarus SVN レポジトリに含まれる。
442442
443443### lazdbexport.lpk
444444
445445[[lazdbexport]]参照。
446446
447447## 外部パッケージ / ライブラリ
448448
449449### Zeosデータベースオブジェクト
450450
451451これらのコンポーネントは異なるデータベースに対するアクセスを提供する。さらなる情報は[[ZeosDBO|ここ]]で得られる。このwikiにはまた[[Zeos tutorial]]がある。
452452
453453### Pascalデータオブジェクト
454454
455455現在ある別の選択肢である。
456456
457457サポート:
458458
459459 * MySQL 4.1と5.0
460460 * sqlite-2とsqlite-3
461461 * pgsql-8.1
462462 * interbase-5, interbase-6, firebird-1.0, firebird-1.5, firebird-1.5E, firebird-2.0, firebird-2.0E
463463 * mssql (Microsoftライブラリ) and sybase (FreeTDSライブラリ)
464464 * oracle
465465
466466PHPデータオブジェクトに触発されたPascalデータオブジェクトというデータベース APIによって、ステートメント、バインディング、ストアドプロシージャがサポートされる。 この新しいAPIを用いるために必要なすべてのコードとドキュメンテーションはSourceforgeにある:
467467
468468<http://pdo.sourceforge.net>
469469
470470### TPSQL
471471
472472これらのコンポーネントはPostgreSQLに対するTCP/IP経由のアクセスを提供する。さらなる情報は[[TPSQL|このページ]]で得られる。
473473
474474### FIBL
475475
476476これらのコンポーネントはInterbaseとFirebirdデータベースに対するアクセスを提供する。ホームページは[[3]](<http://sourceforge.net/projects/fiblhttp://sourceforge.net/projects/fibl>)。
477477
478478### IBX
479479
480480IBX For LazarusはFirebirdデータベースに対するアクセスを提供する[[IBX]]参照。
481481
482482### FBLib Firebird ライブラリ
483483
484484[FBLib](<http://fblib.altervista.org/>)はFirebirdリレーショナルデータベースに対するBorland Delphi/Kylix、Free Pascal、Lazarusへの直接アクセスのためのオープンソースのデータ非感知型ライブラリである。
485485
486486現在の特色には以下が含まれる:
487487
488488 * Firebird 1.0.x, 1.5.x and 2.x ClassicまたはSuperServerへの直接アクセス
489489 * マルチプラットフォーム[Win32、Gnu/Linu、FreeBSD)
490490 * 「fbclient」もしくは「gds32」による自動クライアントライブラリ選択
491491 * パラメータクエリ
492492 * SQL Dialect 1/3のサポート
493493 * LGPLライセンス
494494 * メタデータの抽出
495495 * 簡単なスクリプトパーサ
496496 * 最終のEXEファイルにたった100-150 KBの追加
497497 * BLOBフィールドサポート
498498 * HTML SQLスクリプトへのデータエクスポート
499499 * サービスマネージャ(バックアップ、レストア、gfix...)
500500 * イベントアラート
501501
502502[FBLibのウェブサイト](<http://fblib.altervista.org/>)でドキュメンテーションをダウンロードできる。
503503
504504### Unified Interbase
505505
506506UIB はInterbase、Firebird、YAFFILデータベースにに対するアクセスを提供する。ホームページは[www.progdigy.com](<http://www.progdigy.com>)。 SVNレポジトリはhttps://uib.svn.sourceforge.net/svnroot/uib以下で得られる。
507507
508508### TechInsite Object Persistence Framework (tiOPF)
509509
510510tiOPFに対するさらなる情報は[[tiOPF/ja|page]]で得られる。
511511
512512### Advantage TDataSet Descendant
513513
514514The Advantage TDataSet DescendantはAdvantage Database Serverに接続し(そしてテーブルを開く)手段を提供する。Advantageは柔軟で管理不要のデータベースで Clipper、FoxPro、Visual FoxPro 9 DBFファイルフォーマットに対するクライアント/サーバ、Peer-to-peerファイルフォーマット、 同様に新しい特徴を持つ独自ファイルフォーマットへの移行パスを提供する。
515515
516516Key Features:
517517
518518 * 利用料無料の、peer-to-peerデータベースアクセスをクライアントサーバへの移行
519519 * マルチプラットフォーム(クライアントはWindows、Linux、サーバはWindows、Linux、NetWare)
520520 * ナビゲーショナル、SQLデータベースアクセス
521521 * フルテキストサーチエンジン
522522 * テーブル、インデクス、メモ、通信暗号化
523523 * TDatasetコンポーネントとの互換性
524524 * オンラインバックアップ
525525 * サーバは冗長化をサポート
526526
527527さらなる情報は[Advantage Database Server](<http://www.advantagedatabase.com>)参照。
528528
529529### ZMSQL、sql強化されたインメモリデータベース
530530
531531さらなる情報は[[ZMSQL|ZMSQL wikiページ]]を参照。
532532
533533ZMSQLはオープンソースのセミコロンをデリミタとする値のテーブルで操作されるFree Pascal(FPC)に向けられたインメモリメータベースである。 完全にPascalで書かれており、外部ライブラリの依存性がない。SQL実装にはJanSQLエンジンを用いている。
534534
535535これにより:
536536
537537 * 平文テキストテーブル、「から」、また、「へ」、入出力される。
538538 * データのクエリにSQLを用いる
539539 * 他のデータセットからデータとスキーマをコピーする
540540 * あらかじめ決められたフィールド定義またはその場でフィールドを生成する
541541 * マスタ/詳細フィルタリング
542542 * 参照完全性
543543 * パラメータ化されたクエリ
544544
545545ダウンロードにはソースコード、いくつかのデモアプリケーション、コンポーネントの特徴、readmeが含まれる。
546546
547547## 以下も参照のこと
548548
549549 * [[Portal:Databases/ja|Database Portal]]
550550 * [[Lazarus DB Faq/ja]]
551551
552552---
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).*
553+*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