Sign in Join
Wiki copytemporary

SQLdb Tutorial1/ja: what changed

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

OldNewLine
1-## 概要
2-
3-このチュートリアルでは、[[SQLdb Package]] に基づいた実用的なコード例を使用してデータベースをプログラミングする方法を示す。 主に初心者を対象としている。データベースと SQL の基本を探している人は、関連する書籍やドキュメントを読む必要がある。 このチュートリアルでは、サンプル データベースemployee.fdbとともにFirebirdを使用する。他のデータベースも使用できる。本文に記載されているように、いくつかの調整を行う必要がある。
4-
5-このチュートリアルは長く見えるかもしれないが、ほとんどの場合、入力する内容を入力する必要がある理由を説明する大量のテキストだけである。最後に見られるように、アプリケーションを動作させるために必要な実際のコードの量はそれほど多くはない。経験豊富な開発者であれば、説明をざっと読んで、何が起こっているのかをすぐに理解できるだろう。 また、Basic example章の最後で停止して、動作するプログラムを作成することもできる。
6-
7-このチュートリアルは、Swen による [[SQLdb Tutorial1/de|ドイツ語チュートリアル]] に基づいているが、特に Basic example 以降は拡張されている。Swen はドイツ語版を現状のままにしておきたいと考えている。これが問題となる場合は、このバージョンの名前を変更し、それに基づいて新しいドイツ語訳を作成することができる。
8-
9-スウェンより: JoostとMichaelに感謝。 彼らの助けがなければ、このチュートリアルはおそらく決して実現しなかっただろう。
10-
11-## 必要事項
12-
13-このチュートリアルは、最近の Lazarus(Laz 1.0) を使い作成されている; また、より古いバージョンの Lazarus 0.9.30 でも動くだろう。
14-
15-また、事前に [[SQLdb Tutorial0]] を読み、サンプルのデータベースを生成のこと。
16-
17-## Basic example
18-
19-### プロジェクトとコンポーネント
20-
21-[[TSQLTransaction]]、および 1 つの [[TSQLQuery]] コンポーネントが必要である。
22-
23-![](/wiki-images/c/c1/Sqldbcomponents-n.png)
24-
25-[[TIBConnection]] は、Interbase/Firebird 固有の接続コンポーネントである。 別のデータベースを使用している場合は、[[SQLdb tub]] の適切なコンポーネントを置き換える。 SQLite データベースの場合は '[[TSQLite3Connection/ja]]'、PostgreSQL データベースの場合は [[TPQConnection]]。 データベース アクセス ライブラリのセットアップに関する説明は、このチュートリアルの範囲外である。そのために[[Databases/ja|Databases/jaを]]参照のこと。 。
26-
27-フォーム上の [[TIBConnection/ja]] (または同等の接続コンポーネント) をクリックし、オブジェクトインスペクタで名前を *DBConnection* に変更する。 これにより、別のデータベースを使用する場合のチュートリアルの残りの部分がを簡素にできる。 また、一般に、コンポーネントにプログラム内で役立つ名前 (MainframeDBConnection など) を付けて、それが何を表しているのかわかるようにすることを勧める。
28-
29-他の2つのコンポーネント [[TSQLTransaction/ja]] と [[TSQLQuery/ja]] は、SQLdb でサポートされるすべてのデータベースに使用できる。
30-
31-データを表示するには、[[TDBGrid/ja]] コンポーネントを使用する。このコンポーネントは、'Data Controls' タブにある。このコンポーネントをデータベースコンポーネントに接続するには、'[[Data Access tab]]' の [[TDataSource/ja]] コンポーネントが必要である。
32-
33-これで、最初の例に必要なデータベース コンポーネントがすべて揃った。TDBGrid を拡大して、すべてのデータを表示するのに十分なスペースを確保できる。
34-
35-### コンポーネントをリンクする
36-
37-次に、コンポーネントを接続する必要があります。 非常に簡単な方法はオブジェクトインスペクタを使用することだが、これをソースコード内で実行することもできる。
38-
39-DBConnection の *Transaction* プロパティを 'SQLTransaction1' に変更する。 これにより、SQLTransaction1 の *Database* プロパティが自動的に 'DBConnection' に変更される。
40-
41-次に、SQLQuery1 の *Database* プロパティを 'DBConnection' に変更する。Lazarus は、「トランザクション」プロパティの値を自動的に追加する。
42-
43-次に、Datasource1 の *Dataset* プロパティを 'SQLQuery1' に変更する。
44-
45-最後に、DBGrid1 の *Datasource* プロパティを 'Datasource1' に変更する。
46-
47-これで、デフォルトのトランザクションをトランザクション コンポーネントにリンクする接続が完成した。 トランザクションコンポーネントは、そのデータベース プロパティを接続オブジェクトにリンクする。 これら 2 つのコンポーネントは、接続して命令を実行するには十分ですが、クエリを表示するには十分ではない。 このために、データベースを指す(およびそのデフォルトのトランザクションにリンクする) SQLQuery コンポーネントが使用される。SQLQuery を使用して、後でデータを取得し、データベースにポストバックする。
48-
49-最後に、クエリコンポーネントにリンクされているデータソースコンポーネントは、一種のプレースホルダーです。 クエリデータセット内のどこにいるかを追跡し、GUI コンポーネントがそれにリンクされているため、すべてが同じレコードを表示する。
50-
51-これが意味不明であっても、絶望しないこと。もう少し作業を加えるだけで、最初のデータを表示できるようになる。
52-
53-### データベースに接続する
54-
55-データベースのデータを画面に表示するにはどうするか?
56-
57-まず、DBConnection に、employee.fdb データベースがどこにあるかを伝える必要がある。そのデータベースの場所はオペレーティング システムによって異なる。次のような場所である:
58-
59-- .../examples/empbuild/ Linux 上の Firebird インストールのサブディレクトリ
60-- Windows マシンの場合は C:\Program Files\Firebird\Firebird_2_5\examples\empbuild\EMPLOYEE.FDB
61-- Firebird 埋め込みを使用する場合、ファイルはプロジェクト ディレクトリにある必要がある
62-
63-ここでも選択が可能だ: オブジェクトインスペクタを使用してパスを割り当てるか、ソースコードで直接行うことができる。
64-
65-オブジェクトインスペクタを使用することを選択する。DBConnection の「HostName」プロパティを Firebird サーバ名または IP アドレスに設定する。 Firebird サーバが開発マシンで実行されている場合は、localhost を使用します。 埋め込み Firebird クライアントを使用する場合は、空白の値を使用する。 DBConnection の *DatabaseName* プロパティを、データベース サーバ上のemployee.fdb ファイルへのパスに変更します。埋め込み Firebird を使用する場合、パス部分は空にし、ファイル名のみを指定する必要がある。
66-
67-データベースサーバはデータへのアクセスを許可する前に、ユーザー名とパスワードによる承認をチェックします。本格的なデータベース アプリケーションは、アプリケーションの起動時に両方の値をユーザーに要求し、接続時にこれらをサーバに送信する。これを行う可能な方法は [[SQLdb Tutorial3]] に示されている。
68-
69-ただし、今のところ、問題を単純化するために、オブジェクトインスペクタを再度使用してこれらをハードコーディングします。「UserName」プロパティを「SYSDBA」に変更し、「Password」を「masterkey」に変更する(もちろん、データベースのインストールに別のユーザー名/パスワードがある場合は調整のこと)。
70-
71-ここで、これまでの設定がすべて正しいかどうかを確認する。「Connected」プロパティを「True」に設定します。 データベースのパスが正しくない場合、またはユーザー名またはパスワードが間違っている場合は、エラーメッセージが表示される。接続が成功した場合は、ここで切断する必要があります (「Connected」を「False」に設定する)。
72-
73-#### PostgreSQL
74-
75-PostgreSQL の状況は Firebird の状況と非常に似ている。データベース名にはパスがない。名前の部分 (例: 「employee」) を指定するだけである。 PostgreSQL には埋め込みモードがないため、接続テストを機能させるには「HostName」プロパティを入力する必要がある。
76-
77-#### SQLite
78-
79-SQLite の場合、「HostName」、「UserName」、および「Password」プロパティを空のままにすることができます。 「DatabaseName」を SQLite ファイルの名前に設定します。従業員.sqlite。注: sqlite は、指定されたデータベースが存在しない場合にそれを作成するため、ここでは注意のこと。
80-
81-次のスクリーンショットのようなものが表示されるはずだ - todo: このスクリーンショットは実際にはさらに進んでおり、現在はボタンだけがある。 [framed|center|Form and components set up](/wiki-images/b/b2/SQLTut1ComponentsSetUp.png)
82-
83-DBGrid のプロパティ「Options」→「dgDisplayMemoText」を「(True)」に変更する。 それ以外の場合は、すべてのデータ フィールドに (MEMO) が表示される。
1+---
2+[[Portal:Databases/ja|**データベースのポータル**]]
3+参照: · [[Databases/ja|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 - データベースのセットアップ]] · 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]]
4+
5+DBGrid のプロパティ「Options」→「dgDisplayMemoText」を「(True)」に変更する。 それ以外の場合は、すべてのデータ フィールドに (MEMO) が表示される。
846
857### 表示するデータの選択
868
87-接続は成功したが、データが表示されなかった。 理由は簡単である。 どのデータを返すかをデータベース サーバに伝えていない。employee.fdb データベースにはいくつかのテーブルが含まれており、確認したいテーブルを Firebird に伝えていない。 データベースの構造がわからない場合は、[FlameRobin](http://www.flamerobin.org/index.php) などのツールを使用して内容を表示できる。 Lazarus はそのようなツール、[[DataDesktop]] も提供する。 これは、Lazarus の /tools/lazdatadesktop/ サブディレクトリにある。 プロジェクトを保存し、プロジェクト lazdatadesktop.lpi を開いてコンパイルする。
9+接続は成功したが、データが表示されなかった。 理由は簡単である。 どのデータを返すかをデータベース サーバに伝えていない。employee.fdb データベースにはいくつかのテーブルが含まれており、確認したいテーブルを Firebird に伝えていない。 データベースの構造がわからない場合は、[FlameRobin](<http://www.flamerobin.org/index.php>) などのツールを使用して内容を表示できる。 Lazarus はそのようなツール、[[DataDesktop]] も提供する。 これは、Lazarus の /tools/lazdatadesktop/ サブディレクトリにある。 プロジェクトを保存し、プロジェクト lazdatadesktop.lpi を開いてコンパイルする。
8810
89-[framed|center|DataDesktopが起動したときの様子](/wiki-images/d/da/DataDictonary1.png)
11+[![](/wiki-images/d/da/DataDictonary1.png)](</File:DataDictonary1.png>)
9012
91-例に戻る。
13+DataDesktopが起動したときの様子
9214
93-テーブル「CUSTOMER」のすべてのデータを表示したいと考えている。 そのための SQL 命令は次のとおりである。
15+例に戻る。
9416
95-``` sql
17+テーブル「CUSTOMER」のすべてのデータを表示したいと考えている。 そのための SQL 命令は次のとおりである。
18+```
9619select * from CUSTOMER
9720```
9821
99-このコマンドを SQLQuery1 の 'SQL' プロパティに割り当てる必要がある。 私たちのプロジェクトのソースコードでは、これは次のようになる。
100-
101-``` pascal
22+このコマンドを SQLQuery1 の 'SQL' プロパティに割り当てる必要がある。 私たちのプロジェクトのソースコードでは、これは次のようになる。
23+```
10224SQLQuery1.SQL.Text := 'select * from CUSTOMER';
10325```
10426
105-SQL 命令は一重引用符で囲む必要がある。 別のコンポーネント (Edit1.Text など) のコンテンツを割り当てることもできる。 これは必ずしも良い考えとは限らない。 SQL インジェクションの詳細については、[[Secure programming]] (より高度なテキスト) を参照のこと。
106-
107-フォームの「標準」タブから「TButton」を追加する。 ユーザーがボタンをクリックすると、データの取得が開始される。 *Caption* プロパティを「Button1」から「Show data」に変更する。
27+SQL 命令は一重引用符で囲む必要がある。 別のコンポーネント (Edit1.Text など) のコンテンツを割り当てることもできる。 これは必ずしも良い考えとは限らない。 SQL インジェクションの詳細については、[[Secure programming]] (より高度なテキスト) を参照のこと。
10828
109-これにはコードが必要になる。 Button1 をダブルクリックする。 次に、Lazarusは必要な手順の骨格を作成する。 ソースコードには次の行があるはずだ。
29+フォームの「標準」タブから「TButton」を追加する。 ユーザーがボタンをクリックすると、データの取得が開始される。 _Caption_ プロパティを「Button1」から「Show data」に変更する。
11030
111-``` pascal
31+これにはコードが必要になる。 Button1 をダブルクリックする。 次に、Lazarusは必要な手順の骨格を作成する。 ソースコードには次の行があるはずだ。
32+```
11233procedure TForm1.Button1Click(Sender: TObject);
113-begin
114-
115-end;
34+ begin
35+
36+ end;
11637```
11738
118-「begin」と「end」の間に、データを表示するために必要な命令を入力する必要がある。明らかに、これは SQLQuery1 と関係がある。
119-
120-SQLQuery1 の 'SQL' プロパティは、SQLQuery1 がアクティブでない場合にのみ変更できる。 そのため、最初にコンポーネントを閉じる。
39+「begin」と「end」の間に、データを表示するために必要な命令を入力する必要がある。明らかに、これは SQLQuery1 と関係がある。
12140
122-``` pascal
41+SQLQuery1 の 'SQL' プロパティは、SQLQuery1 がアクティブでない場合にのみ変更できる。 そのため、最初にコンポーネントを閉じる。
42+```
12343SQLQuery1.Close;
12444```
12545
126-次に、SQL 命令を「SQL」プロパティに割り当て、以前の SQL コマンドを上書きする。
127-
128-``` pascal
46+次に、SQL 命令を「SQL」プロパティに割り当て、以前の SQL コマンドを上書きする。
47+```
12948SQLQuery1.SQL.Text := 'select * from CUSTOMER';
13049```
13150
132-次に、データベースへの接続を確立し、トランザクションをアクティブにしてクエリを開く必要がある。
133-
134-``` pascal
51+次に、データベースへの接続を確立し、トランザクションをアクティブにしてクエリを開く必要がある。
52+```
13553DBConnection.Connected := True;
136-SQLTransaction1.Active := True;
137-SQLQuery1.Open;
54+ SQLTransaction1.Active := True;
55+ SQLQuery1.Open;
13856```
13957
140-最初の 2 つの命令は 3 番目の命令によって自動的に実行されるため、省略できる。 この時点でプロジェクトをコンパイルすると、CUSTOMER」テーブルのデータがすでに表示されているはずだ。
141-
142-ただし、本格的なアプリケーションでは、開いているすべてのデータベース接続が不要になったときに適切に閉じられるようにする必要がある。 そうでなければ、2次的な影響は予測できない。そこで、フォームの OnClose イベントを使用する (オブジェクトインスペクタでダブルクリックして作成する)。
58+最初の 2 つの命令は 3 番目の命令によって自動的に実行されるため、省略できる。 この時点でプロジェクトをコンパイルすると、CUSTOMER」テーブルのデータがすでに表示されているはずだ。
14359
144-``` pascal
60+ただし、本格的なアプリケーションでは、開いているすべてのデータベース接続が不要になったときに適切に閉じられるようにする必要がある。 そうでなければ、2次的な影響は予測できない。そこで、フォームの OnClose イベントを使用する (オブジェクトインスペクタでダブルクリックして作成する)。
61+```
14562procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
146-begin
147-
148-end;
63+ begin
64+
65+ end;
14966```
15067
151-接続を閉じるには、開始コードとは逆の順序を使用する。
152-
153-``` pascal
68+接続を閉じるには、開始コードとは逆の順序を使用する。
69+```
15470SQLQuery1.Close;
155-SQLTransaction1.Active := False;
156-DBConnection.Connected := False;
71+ SQLTransaction1.Active := False;
72+ DBConnection.Connected := False;
15773```
15874
159-DBConnection.Connected を False に設定すると、トランザクションとクエリは自動的に閉じられるため、手動で閉じる必要はない。
75+DBConnection.Connected を False に設定すると、トランザクションとクエリは自動的に閉じられるため、手動で閉じる必要はない。
16076
16177## 要約
16278
163-ここまで、SQLdb パッケージを使用してデータベースに接続する方法と、テーブルの内容を画面に表示する方法を学習した。 編集などの機能をさらに追加したい場合は、SQLdb チュートリアル 2 に進まれたい。
164-
165-前の手順に従った場合、コードは次のようになる:
79+ここまで、SQLdb パッケージを使用してデータベースに接続する方法と、テーブルの内容を画面に表示する方法を学習した。 編集などの機能をさらに追加したい場合は、SQLdb チュートリアル 2 に進まれたい。
16680
167-``` pascal
81+前の手順に従った場合、コードは次のようになる:
82+```
16883unit Unit1;
169-
170-{$mode objfpc}{$H+}
171-
172-interface
173-
174-uses
175- Classes, SysUtils, IBConnection, sqldb, db, FileUtil, Forms, Controls,
176- Graphics, Dialogs, DBGrids, StdCtrls;
177-
178-type
179-
180- { TForm1 }
181-
182- TForm1 = class(TForm)
183- Button1: TButton;
184- Datasource1: TDatasource;
185- DBGrid1: TDBGrid;
186- DBConnection: TIBConnection;
187- SQLQuery1: TSQLQuery;
188- SQLTransaction1: TSQLTransaction;
189- procedure Button1Click(Sender: TObject);
190- procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
191- private
192- { private declarations }
193- public
194- { public declarations }
195- end;
196-
197-var
198- Form1: TForm1;
199-
200-implementation
201-
202-{$R *.lfm}
203-
204-{ TForm1 }
205-
206-procedure TForm1.Button1Click(Sender: TObject);
207-begin
208- SQLQuery1.Close;
209- SQLQuery1.SQL.Text:= 'select * from CUSTOMER';
210- DBConnection.Connected:= True;
211- SQLTransaction1.Active:= True;
212- SQLQuery1.Open;
213-end;
214-
215-procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
216-begin
217- SQLQuery1.Close;
218- SQLTransaction1.Active:= False;
219- DBConnection.Connected:= False;
220-end;
221-
222-end.
84+
85+ {$mode objfpc}{$H+}
86+
87+ interface
88+
89+ uses
90+ Classes, SysUtils, IBConnection, sqldb, db, FileUtil, Forms, Controls,
91+ Graphics, Dialogs, DBGrids, StdCtrls;
92+
93+ type
94+
95+ { TForm1 }
96+
97+ TForm1 = class(TForm)
98+ Button1: TButton;
99+ Datasource1: TDatasource;
100+ DBGrid1: TDBGrid;
101+ DBConnection: TIBConnection;
102+ SQLQuery1: TSQLQuery;
103+ SQLTransaction1: TSQLTransaction;
104+ procedure Button1Click(Sender: TObject);
105+ procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
106+ private
107+ { private declarations }
108+ public
109+ { public declarations }
110+ end;
111+
112+ var
113+ Form1: TForm1;
114+
115+ implementation
116+
117+ {$R *.lfm}
118+
119+ { TForm1 }
120+
121+ procedure TForm1.Button1Click(Sender: TObject);
122+ begin
123+ SQLQuery1.Close;
124+ SQLQuery1.SQL.Text:= 'select * from CUSTOMER';
125+ DBConnection.Connected:= True;
126+ SQLTransaction1.Active:= True;
127+ SQLQuery1.Open;
128+ end;
129+
130+ procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
131+ begin
132+ SQLQuery1.Close;
133+ SQLTransaction1.Active:= False;
134+ DBConnection.Connected:= False;
135+ end;
136+
137+ end.
223138```
224139
225140## 関連情報
226141
227-- [[SQLdb Tutorial0/ja]]: チュートリアルに用いるサンプルの表/データを設定する方法を説明します。
228-- [[SQLdb Tutorial1/ja]]: DB チュートリアルの第一の部分。データベースのデータを、どのように grid に表示させるかを学びます。
229-- [[SQLdb Tutorial2/ja]]: DB チュートリアルの第二の部分。データベースのデータの挿入や編集について学びます。
230-- [[SQLdb Tutorial3/ja]]: DB チュートリアルの第三の部分。複数のデータベースについてのプログラムやログインフォームの使い方を学びます。
231-- [[SQLdb Tutorial4/ja]]: DB チュートリアルの第四の部分。どのようにデータモジュールを用いるかを学びます。
232-- [[Lazarus Database Overview/ja]]: Lazarus がサポートしているデータベースについての情報。 データベースごとの記述へのリンクを含みます。
233-- [[SQLdb Package/ja]]: SQLdb パッケージについての情報
234-- [[SQLdb Programming Reference/ja]]: SQLdb データベースコンポーネントの入出力の概要
235-- [[SqlDBHowto/ja]]: SQLdb パッケージを用いることについての情報
236-- [[Working With TSQLQuery/ja]]: TSQLQuery についての情報
142+ * [[SQLdb Tutorial0/ja]]: チュートリアルに用いるサンプルの表/データを設定する方法を説明します。
143+ * SQLdb Tutorial1/ja: DB チュートリアルの第一の部分。データベースのデータを、どのように grid に表示させるかを学びます。
144+ * [[SQLdb Tutorial2/ja]]: DB チュートリアルの第二の部分。データベースのデータの挿入や編集について学びます。
145+ * [[SQLdb Tutorial3/ja]]: DB チュートリアルの第三の部分。複数のデータベースについてのプログラムやログインフォームの使い方を学びます。
146+ * [[SQLdb Tutorial4/ja]]: DB チュートリアルの第四の部分。どのようにデータモジュールを用いるかを学びます。
147+ * [[Lazarus Database Overview/ja]]: Lazarus がサポートしているデータベースについての情報。 データベースごとの記述へのリンクを含みます。
148+ * [[SQLdb Package/ja]]: SQLdb パッケージについての情報
149+ * [[SQLdb Programming Reference/ja]]: SQLdb データベースコンポーネントの入出力の概要
150+ * [[SqlDBHowto/ja]]: SQLdb パッケージを用いることについての情報
151+ * [[Working With TSQLQuery/ja]]: TSQLQuery についての情報
237152
238153---
239-*From the Free Pascal wiki, page "SQLdb Tutorial1/ja", as it stood on 2024-03-31 after a change by Ariben, out of the wiki's dump of 2024-05-26. 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).*
154+*From the Free Pascal wiki, page "SQLdb Tutorial1/ja", as the Internet Archive kept it on 2025-01-13, last changed on 2024-09-23. 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