Sign in Join
Wiki copytemporary

Lazarus Database Tutorial/ja: what changed

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

OldNewLine
11## 概要
22
33このチュートリアルは、Lazarusでいろいろなデータベースの操作を行うためのものです。 Lazarusでは、いくつかのデータベースを外部的にサポートしています。しかし、それぞれのデータベースにたいして開発者は適切なパッケージをインストールしなくてはなりません。 データベースには、コードを書いたり、フォーム上のコンポーネントをドロップしてアクセスすることができます。データアウェアコンポーネントは、DataSourceプロパティをTDatasetに設定することで、接続し、フィールドに対応して表示することができます。データソースはあるテーブルをあらわし、データベースコンポーネント(たとえば、TPSQLDatabase, TSQLiteDataSet)へDataSetプロパティをとおして接続されます。 データアウェアコンポーネントは、IDE上の"Data Controls"タブ上にあり、データソースとデータベースのコントロールは"Data Access"タブ上にあります。
44
55## Lazarus と MySQL
66
77### MySQLをLinuxやWindowsで動作させる
88
99MySQL User Manualの指示に従って進めてください。インストール後、mysqldデーモンが動作していることを確認してください。また、セキュリティを保ちうる範囲で、すべての必要なホスト('localhost',ホスト名,ネットワーク上の他のホスト名)から、すべての必要なユーザー(ルート、mysql、あなた自身、他に必要なユーザーを含む)に、必要な権限が与えられているか、確認してください。
1010
1111ルートを含むすべてのユーザがパスワードを持っているのが、望ましいです。 マニュアルにある例でデータベース・システムの機能をテストしてください。そして、本当にすべてのユーザが信頼できるアクセスができるかチェックしてください。
1212
1313(訳注:データベースに接続できない場合、プログラムのプロパティの設定が悪い場合もありますが、そもそも、プログラムの前に、インストール、PCの設定、ユーザー、それぞれの権限の設定がきちんとできているか、データベースのサンプルなどであらかじめ確認しておくことが必要です。)
1414
1515### MySQLをFPCのテキストモードで動かしてみよう
1616
1717例となるフォルダが\$(fpcsrcdir)/packages/base/mysql/にあります。 LazarusのIDEで、menu -\> Environment Options -\> Paths tab -\> FPC source directoryにFPCのソースディレクトリがあります。MySQLが置いてある可能性のあるディレクトリは、rpmによるインストールだと、/usr/share/fpcsrc/packages/base/mysql/ Windowsでは C:\lazarus\fpcsrc\packages\base\mysql\です。
1818
1919このディレクトリには、mysql.pp, mysql_com.pp そして mysql_version.ppがあります。 テストスクリプトを実行する前に、testdbというデータベースを生成する必要があります。 これをおこなうには、MySQL monitorにrootとして、全権限をもってログインして、次のステートメントを発行します。
2020
2121``` sql
2222 CREATE DATABASE testdb;
2323```
2424
2525それから、すべて関連しているユーザが適切なアクセス権を持っていることを確認してください。
2626
2727``` sql
2828 GRANT ALL ON testdb TO johnny-user IDENTIFIED BY 'johnnyspassword';
2929```
3030
3131ここに、いま実行すべきであるmkdbと呼ばれるスクリプトがあります。
3232
33-`sh ./mkdb`
33+```text
34+sh ./mkdb
35+```
3436
3537システムが、匿名のユーザにデータベースへのアクセスを許可していないとき、これはたぶん失敗するでしょう。 その場合は、エディタをつかって、MySQLがその行を呼び出すように、スクリプトを変更してください。
3638
37-`mysql -u root -p  ${1-testdb} << EOF >/dev/null`
39+```text
40+mysql -u root -p ${1-testdb} << EOF >/dev/null
41+```
3842
3943そして、再度mkdbを走らせてみます。プロンプトが出たら、パスワードを入力してください。
4044
4145幸運にも、あなたは何とかテストデータベースを作成したに違いありません。MySQL monitorにログインしている間、 MySQLステートメントを発行して、テストしてください。
4246
4347``` sql
4448 select * from FPdev;
4549```
4650
4751そうすると、FPC開発者のID,ユーザー名、電子メールアドレスが表記されているテーブルを見ることができるでしょう。
4852
4953今度は、testdb.ppというプログラムを実行させてみてください。 (これは、コンパイルしてください。ほとんど最初は失敗するでしょうけど) 私はこのプログラムはいくつかの理由でmysqlに接続できないことを発見しました。
5054
5155- 私の環境(SuSE Linux v9.0)で mysql v4.0.15をインストールしました。パッケージが設計されたバージョン3ではありません。
5256
5357- プログラムはデータベースにアクセスするためにユーザー名、パスワードが必要です。
5458
5559- コンパイラに、どこにmysqlのライブラリを探せばいいか知らせる必要があります。(もしMySQLの開発ライブラリをインストールしていなければ、今インストールしましょう。)
5660
5761私はオリジナルを修正したくなかったのでtestdb.ppからtrydb.ppと名づけてコピーを作成しました。オリジナルファイルはCVSを使ったアップデートで修正されてしまうからです。
5862
5963私はさらに、mysql/ver40/というサブディレクトリの中のファイル群を、 メインのmysql/サブディレクトリに、それぞれのファイルの名前が規則性をたもつように、mysql_v4.pp, mysql_com_v4.pp,mysql_version_v4.ppと名前をかえてコピーしました。
6064
6165私はtrydb.ppのusesを次のように変更しました。
6266
6367``` pascal
6468 uses mysql_v4
6569```
6670
6771そして、mysql_v4.ppのusesも次のように変更しました。
6872
6973``` pascal
7074 uses mysql_com_v4
7175```
7276
7377/etc/fpc.cfgに、自分のライブラリを指すように次の行を加えました。
7478
75-`-Fl/lib;/usr/lib`
79+```text
80+-Fl/lib;/usr/lib
81+```
7682
7783次のステップは、devel-librariesがあなたのためにリンクとしてインストールされている場合、必要ないかもしれませんが、チェックして損はありません。
7884
7985私は/usr/libディレクトリのmysqlclintライブラリの本当の名前を調べる必要がありました。そして、私の場合、シェルコマンドを発行しました。
8086
81-`ln -s libmysqlclient.so.12.0.0 lmysqlclient`
87+```text
88+ln -s libmysqlclient.so.12.0.0 lmysqlclient
89+```
8290
8391FPCがライブラリを見つけられるよう、シンボリックリンクを生成するために、です。 また、私は次のようなリンクを作成しました。
8492
85-`ln -s libmysqlclient.so.12.0.0 mysqlclient`
93+```text
94+ln -s libmysqlclient.so.12.0.0 mysqlclient
95+```
8696
8797そして、同じように色々なほかのディレクトリのリンクを設置しました。 厳密には、必要ではないのですが、このケースではそうしました。
8898
8999他のユーザーでは、次のようなリンクが必要かもしれません。
90100
91-`ln -s libmysqlclient.so.12.0.0 libmysqlclient.so`
101+```text
102+ln -s libmysqlclient.so.12.0.0 libmysqlclient.so
103+```
92104
93105私はtrydb.ppをユーザーの詳細を含むように修正しました。最初にhost,user,passwordを定数としてもつように。
94106
95107``` pascal
96108 const
97109 host : Pchar= 'localhost';
98110 user : Pchar= 'myusername';
99111 passwd: Pchar = 'mypassword';
100112```
101113
102114それでも私は、mysql_connect()をコールしても、まだmysqlに接続できないでいました。しかし、より多くのパラメータを必要とするmysql_real_connect()を使うべきだったのです。さらに物事を複雑にしていたのは、多くのパラメータがversion3(パラメータは7個)とversion4(パラメータは8個)の間で変わっているように思えました。
103115
104116また、mysql_real_connectを使う前に、mysql_init()を使う必要がありました。 これは、オリジナルのmysql.ppにはありませんでしたが、mysql_v4.ppにはあります。
105117
106118ここまでで、接続するためのコードは次のようになりました。
107119
108120``` pascal
109121 { いくつかの追加の変数 }
110122 var
111123 alloc : PMYSQL;
112124
113125 {メインプログラム断片}
114126
115127 begin
116128 if paramcount=1 then
117129 begin
118130 Dummy:=Paramstr(1)+#0;
119131 DataBase:=@Dummy[1];
120132 end;
121133
122134 Writeln ('Allocating Space...');
123135 alloc := mysql_init(PMYSQL(@qmysql));
124136 Write ('Connecting to MySQL...');
125137 sock := mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
126138 if sock=Nil then
127139 begin
128140 Writeln (stderr,'Couldn''t connect to MySQL.');
129141 Writeln (stderr, 'Error was: ', mysql_error(@qmysql));
130142 halt(1);
131143 end;
132144 Writeln ('Done.');
133145 Writeln ('Connection data:');
134146 {$ifdef Unix}
135147 writeln ('Mysql_port : ',mysql_port);
136148 writeln ('Mysql_unix_port : ',mysql_unix_port);
137149 {$endif}
138150 writeln ('Host info : ',mysql_get_host_info(sock));
139151 writeln ('Server info : ',mysql_stat(sock));
140152 writeln ('Client info : ',mysql_get_client_info);
141153
142154 Writeln ('Selecting Database ',DataBase,'...');
143155 if mysql_select_db(sock,DataBase) < 0 then
144156 begin
145157 Writeln (stderr,'Couldn''t select database ',Database);
146158 Writeln (stderr,mysql_error(sock));
147159 halt (1);
148160 end;
149161 { ... testdb.ppの本来のコードとして }
150162```
151163
152164それでは、tyrdb.ppのコンパイルを開始する準備はいいですか?
153165
154-` fpc trydb`
166+```text
167+ fpc trydb
168+```
155169
156170成功しました!それでは実行してみましょう。
157171
158-` ./trydb`
172+```text
173+ ./trydb
174+```
159175
160176おっ!FPC開発者のリストの一覧を得ることができました!
161177
162178いくつかの、さらなる改善点があります。 ユーザーに関する詳細のエントリを作る時、あるいは、MySQLのコマンドを双方向にしたいとき、定数よりは変数の方がいいでしょう。そして、いくつかの発行したいSQLコマンドに、結果を返さないコマンドでも([[Lazarus Database Tutorial/TryDbpp|full program listingを]]見てください)ユーザーの詳細情報をコンソールから入力する部分、プログラムがSQLコマンドがコンソールから入力されるループにはいる部分、結果等について、quitがキーボードから入力されるまで、プリントアウトできるようにしてください。
163179
164180こちらを見てください。[[Lazarus Database Tutorial/SampleListing|Sample Console Listing]]
165181
166182### LazarusアプリケーションからMySQLへの接続
167183
168184このチュートリアルでは、基本的なLazarusコンポーネントのみを使って、LazarusでどのようにMySQLに接続するか、そして簡単なクエリを実行するかを示します。 このとき、Data Aware コンポーネントは使いません。しかし、データベースとインターフェースする原理を解説します。
169185
170186Lazarusで新しいプロジェクトを生成してください。
171187
172-`Project -> New Project -> Application`
188+```text
189+Project -> New Project -> Application
190+```
173191
174192自動的に生成されたフォームが現れます。 フォームをスクリーンの半分くらいになるように大きくして、フォームの名前とキャプションを、'TryMySQL'としてください。
175193
176194コンポーネントパレットのStandardのタブから、3つのエディットボックスを、フォームの左上のほうへ置いてください。そして、それぞれのエディットボックスの真上にラベルを置いてください。 ラベルのキャプションを'Host'としてHostLabel,エディットをHostEditとしてください。 同様に、'UserName'としてUserLabel,UserEditとしてください。 同様に、'Password'としてPasswdLabel,PasswdEditとしてください。 これらのかわりに、LabeledEditコンポーネントをAdditionalタブから使うことができます。
177195
178196PasswdEditを選択して、PasswordCharプロパティを見つけて、これを * か、他のキャラクタにしてください。そうすることで、画面にパスワードをキーボードから入力したときに表示されないように、かわりに、*の文字を表示するようにします。 それぞれのエディットボックスのTextプロパティが空白であることを確認してください。
179197
180198ここでさらに、もうひとつエディットボックスとラベルを、フォームの右上に置いてください。 ラベルのCaptionを、'Enter SQL Command'に、NameをCommadEditにしてください。
181199
1822003つのボタンをフォームに置きます。2つは、EditBoxの下の左のほうへ、もう一つは、右のコマンドボックスの下へ置いてください。
183201
184202左のボタンは、Caption='Connect to Database'、Name='ConnectButton'、もうひとつは、Caption='Exit'、Name='ExitButton'としてください。右のボタンは Caption='Send Query'、Name='QueryButton'としてください。
185203
186204大きなメモをフォームの右下に貼り付けて、使えるだけのスペースを使って配置して、'Result'と表示してName='ResultMemo'としてください。テキストがあふれたときに自動的にスクロールバーがつくように、ScrollBars='ssAutoBoth'にしてください。また、WordWrap='True'としてください。
187205
188206Commonコントロールタブから、ステータスバーをフォームの下に置き、SimpleText='TryMySQL'としてください。
189207
190208このフォームのスクリーンショットを置いておきます。:[Mysql Example Screenshot](http://lazarus-ccr.sourceforge.net/kbdata/trymysqldb.png)
191209
192210これで、必要なイベントハンドラを書くことが出来ます。 左にある3つのエディットボックスはホスト名、ユーザ名、パスワードの入力に使います。これらの3つの入力がきちんと終わったら、Connectボタンをクリックします。このボタンのOnClickイベントハンドラは、先ほどのテキストモードのFPCプログラムの一部とほとんど同じです。
193211
194212データベースからのレスポンスはPascalのwrite文やwriteln文を使って書かれてはいません。しかし、返答はstringsに変換され、Memoに表示されます。Pascalのwriteとwriteln文は沢山の型変換を実行時に行う能力がある一方、Memoを使ってテキストを出力する際に、明確なデータ型変換をstringの正しい形式にすることが必要です。なので、PChar変数はStrPasを使って変換されなければならず、Integer変数はIntToStrを使って変換されなければなりません。
195213
196214(訳注:Delphiで慣れた方々には当たり前に思えるかもしれませんが、本来、Pascalでの文字列形式出力はwriteやwritelnを使うものであり、それは、実行時に変数の型を明示しなくても、自動的に適切な文字列として表示することができます。)
197215
198216文字列はMemoに下記のような関数をつかって表示されます。
199217
200218``` pascal
201219 procedure ShowString (S : string);
202220 (* display a string in a Memo box *)
203221 begin
204222 trymysqlForm1.ResultsMemo.Lines.Add (S)
205223 end;
206224```
207225
208226Connectボタンのイベントハンドラは次のようにします。
209227
210228``` pascal
211229 procedure TtrymysqlForm1.ConnectButtonClick(Sender: TObject);
212230 (* Connect to MySQL using user data from Text entry boxes on Main Form *)
213231 var strg: string;
214232
215233 begin
216234
217235 dummy1 := trymysqlForm1.HostEdit.text+#0;
218236 host := @dummy1[1];
219237 dummy2 := trymysqlForm1.UserEdit.text+#0;
220238 user := @dummy2[1] ;
221239 dummy3 := trymysqlForm1.PasswdEdit.text+#0;
222240 passwd := @dummy3[1] ;
223241
224242 alloc := mysql_init(PMYSQL(@qmysql));
225243 sock := mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
226244 if sock=Nil then
227245 begin
228246 strg :='Couldn''t connect to MySQL.'; showstring (strg);
229247 Strg :='Error was: '+ StrPas(mysql_error(@qmysql)); showstring (strg);
230248 end
231249 else
232250 begin
233251 trymysqlForm1.statusBar1.simpletext := 'Connected to MySQL';
234252 strg := 'Now choosing database : ' + database; showstring (strg);
235253 {$ifdef Unix}
236254 strg :='Mysql_port : '+ IntToStr(mysql_port); showstring (strg);
237255 strg :='Mysql_unix_port : ' + StrPas(mysql_unix_port); showstring (strg);
238256 {$endif}
239257 Strg :='Host info : ' + StrPas(mysql_get_host_info(sock));
240258 showstring (strg);
241259 Strg :='Server info : ' + StrPas(mysql_stat(sock)); showstring (strg);
242260 Strg :='Client info : ' + Strpas(mysql_get_client_info); showstring (strg);
243261
244262 trymysqlForm1.statusbar1.simpletext := 'Selecting Database ' + DataBase +'...';
245263 if mysql_select_db(sock,DataBase) < 0 then
246264 begin
247265 strg :='Couldn''t select database '+ Database; ShowString (strg);
248266 Strg := mysql_error(sock); ShowString (strg);
249267 end
250268 end;
251269 end;
252270```
253271
254272右のテキストボックスはSQL文を入力するものです。終了のセミコロンなしで良いです。 きちんとしたSQL文を入力して、SendQueryボタンを押すとクエリが実行され、ResultMemoの中に結果が表示されます。
255273
256274SendQueryのイベントハンドラもFPCのテキストモードの時とほとんど同じですが、表示の際に明示的な型変換をおこなうことを除いてという点は、先ほどの例と同じです。
257275
258276テキストモードのFPCプログラムと違う点は、エラーが検出されたときにプログラムは停止せず、MySQLもクローズされないところです。そのかわり、制御がメインフォームに戻り、コマンドが再発行できるように修正する機会が与えられます。
259277
260278アプリケーションは最終的に、Exitボタンがクリックされたときに、MySQLをクローズして終了します。 SendQueryは次のようになっています。
261279
262280``` pascal
263281 procedure TtrymysqlForm1.QueryButtonClick(Sender: TObject);
264282 var
265283 dumquery, strg: string;
266284 begin
267285 dumquery := TrymysqlForm1.CommandEdit.text;
268286 dumquery := dumquery+#0;
269287 query := @dumquery[1];
270288 trymysqlForm1.statusbar1.simpletext := 'Executing query : '+ dumQuery +'...';
271289 strg := 'Executing query : ' + dumQuery; showstring (strg);
272290 if (mysql_query(sock,Query) < 0) then
273291 begin
274292 Strg :='Query failed '+ StrPas(mysql_error(sock)); showstring (strg);
275293 end
276294 else
277295 begin
278296 recbuf := mysql_store_result(sock);
279297 if RecBuf=Nil then
280298 begin
281299 Strg :='Query returned nil result.'; showstring (strg);
282300 end
283301 else
284302 begin
285303 strg :='Number of records returned : ' + IntToStr(mysql_num_rows (recbuf));
286304 Showstring (strg);
287305 Strg :='Number of fields per record : ' + IntToStr(mysql_num_fields(recbuf));
288306 showstring (strg);
289307 rowbuf := mysql_fetch_row(recbuf);
290308 while (rowbuf <>nil) do
291309 begin
292310 Strg :='(Id: '+ rowbuf[0]+', Name: ' + rowbuf[1]+ ', Email : ' +
293311 rowbuf[2] +')';
294312 showstring (strg);
295313 rowbuf := mysql_fetch_row(recbuf);
296314 end;
297315 end;
298316 end;
299317 end;
300318```
301319
302320プロジェクトを保存して、メニューからRun -\> Runを選んでください。
303321
304322#### MySQLのソースコードをダウンロードする
305323
306324全ソースコードは次からダウンロードできます。[Sample Source Code](http://lazarus-ccr.sourceforge.net/kbdata/mysqldemo.tar.gz)
307325
308326## Lazarus と PostGreSQL
309327
310328これは、Lazarus 0.9.12以降と、PostGresSQLデータベースを、ローカル、リモートの両方でTPQConnectionを使って接続するためのとても短いチュートリアルです。
311329
312330インストールを正しくおこなったの後で、次のステップをやってみてください。
313331
314332- SQLdbタブから、PQConnectionを置く
315333- SQLdbタブから、SQLQueryを置く
316334- SQLdbタブから、SQLTransactionを置く
317335- DataAccessタブから、DataSourceを置く
318336- DataControlsタブから、DBGridを置く
319337
320338- PQConnectionのプロパティを適切に設定してください。
321339 - transaction propertyに、SQLTransactionオブジェクトを参照させる。
322340 - Database name
323341 - HostName
324342 - UserName + password
325343
326344- SQLTransactionが自動的にPQConnectionを示すように変更されたとこに注意してください。
327345
328346- SQLQueryのプロパティを適切に埋めてください。
329347 - transaction プロパティに適切なオブジェクト
330348 - database プロパティに適切なオブジェクト
331349 - SQL (たとえば、'select * from anytable' などとしてください。)
332350
333351- DataSourceオブジェクトのDataSetプロパティに、SQLQueryオブジェクトを指定してください。
334352
335353- DBGridオブジェクトのDataSourceプロパティにDataSourceオブジェクトを設定してください。
336354
337355すべてをconnectedとactiveにすると、設計時においても、DBGridに表示がされます。 TDBTextとTDBEditは、私には、ただ値を表示するだけのように見えます。
338356
339357To change contents in the database, I called the DB Engine direct with the following code: データベースの内容を更新するには、私は次のようにDBエンジンをダイレクトに呼び出します。
340358
341359``` pascal
342360 try
343361 sql:= 'UPDATE table SET setting=1';
344362 PQDataBase.Connected:=True;
345363 PQDataBase.ExecuteDirect('Begin Work;');
346364 PQDataBase.ExecuteDirect(sql);
347365 PQDataBase.ExecuteDirect('Commit Work;');
348366 PQDataBase.Connected:=False;
349367 except
350368 on E : EDatabaseError do
351369 MemoLog.Append('DB ERROR:'+sql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message);
352370 on E : Exception do
353371 MemoLog.Append('ERROR:'+sql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message);
354372 end;
355373```
356374
357375- ノート:
358376 - Lazarus 0.9.12 + PGSQL 8.3.1にて、Windowsでテストしました。
359377 - Lazarus 0.9.12 and PGSQL 8.0.xで、Linuxでテストしました。
360378
361379- インストレーションとエラー:
362380 - Lazarus 0.9.12のテストバージョン では、"text" と "numeric" の型にバグがあります。
363381 - 固定長のキャラクタと、intとfloat8では、私は問題なく使えました。
364382 - 時々Lazarusを再起動することでくだらないエラーを解決できた
365383 - いくつかのエラーの後で、トランザクションがアクティブのまま残り、手動でデアクティベートしなくてはならなかった。
366384 - Lazarusによって行われた変更は、もちろん、トランザクションがコミットされるまでは見ることができません。(訳注:他のトランザクションでは、ということ)
367385 - IDEのデバッガは(少なくともWindowsにおいては)バグがあるようです。時々IDEの外で走らせるとエラーの発生を見つけるのに役立ちます。
368386 - Linuxでは、特定のエラーメッセージがコンソールに出力されることがあります。--もし、コマンドラインで走らせているなら、時々デバッグに役立つ情報があります。
369387 - このようなエラーが発生することがあります。: "Can not load Postgresql client. Is it installed (libpq.so) ?"
370388 - PostgreSQLをインストールした所から、libpq*を探して、パスに加えて下さい。
371389 - Linuxでは、pathにlibpq.soファイルを、/etc/fpc.cfgの中のライブラリセクションに加えてください。たとえば、次のように:-Fl/usr/local/pgsql/lib
372390 - Windowsでは、これらのライブラリを、環境変数のパスのどこにでも追加してください。また、プロジェクトディレクトリに加えてもかまいません。
373391 - 私は、すべてのDLLを自分のパソコンのC:\Program Files\PostgreSQL\8.1\bin などに入れて、パスを通しています。
374392
375393## Lazarus と SQLite
376394
377395Luiz Américo による
378396
379397### イントロダクション
380398
381399TSQLLiteDatasetとTSQLLite3DatasetはTDatasetの派生クラスで、2.8.xと3.2.xのSQLLiteデータベースにアクセスします。下記は主な特徴と欠点です。
382400
383401特徴:
384402
385403- 自由度が高い: データベースはシンプルなテーブルレイアウトでも、複雑なSQLを使ってもよいので、プログラマは、SQLを使っても良いし、使わなくても良い。
386404- 自動データ更新: SQL文でデータベースを手動でアップデートする必要はありません。1つの命令で更新ができます。
387405- 高速: メモリにデータをキャッシュするため、データセットを高速にブラウズします。
388406- サーバーインストール、設定が不要:SQLLiteダイナミックライブラリと一緒に配布するだけです。
389407
390408欠点
391409
392410- 外部ファイルを必要とします。(sqlite library)
393411
394412### 要求事項
395413
396414- sqlite2のためには:
397415 - fpc 2.0.0
398416 - Lazarus 0.9.10
399417 - sqlite runtime library 2.8.15 以上(www.sqlite.orgから)
400418
401419- sqlite3のためには:
402420 - fpc 2.0.2
403421 - Lazarus 0.9.11 (svn revision 8443 以上)
404422 - sqlite runtime library 3.2.1 以上 (www.sqlite.orgから)
405423
406424**Lazarusのプロジェクトを作る前に、次の事を確認してください。:**
407425
408426- SQLLiteライブラリがシステムパスか、実行できるディレクトリにあるかどうか。
409427- Linuxでは、cmemを メインプログラムのusesの最初のユニットにしているかどうか
410428
411429### 使い方 (基本)
412430
413431/components/sqlite にあるパッケージをインストールしてください。([[Install Packages|ここにその]]方法があります。) 設計時に下記のプロパティをセットして下さい。
414432
415433- FileName: sqliteファイルへのパス\[必須\]
416434- TableName: sql文で使うテーブル名\[必須\]
417435- Sql: SQLのSELECT文 \[必要に応じて\]
418436
419437**テーブルを作成する(Dataset)**
420438
421439コンポーネントアイコンをダブルクックするか、右マウスボタンのクリックで現れるポップアップメニューで、'Create Table'を選択します。
422440
423441簡単な説明のあるテーブルエディタが表示されます。
424442
425-` 下記はTSqliteDatasetとTSqlite3Datasetでサポートされているすべてのフィールドの型です。`
443+```text
444+ 下記はTSqliteDatasetとTSqlite3Datasetでサポートされているすべてのフィールドの型です。
445+```
426446
427-` Integer`\
428-` AutoInc`\
429-` String`\
430-` Memo`\
431-` Bool `\
432-` Float`\
433-` Word`\
434-` DateTime`\
435-` Date`\
436-` Time`\
437-` LargeInt`\
438-` Currency`\
439-` `
447+```text
448+ Integer
449+ AutoInc
450+ String
451+ Memo
452+ Bool
453+ Float
454+ Word
455+ DateTime
456+ Date
457+ Time
458+ LargeInt
459+ Currency
460+```
440461
441462**データを取得する**
442463
443464テーブルを生成した後か、以前作ったテーブルで作業する場合、Open手続きでデータセットを開いて下さい。 SQLプロパティがセットしていない場合、すべてのフィールドのすべてのレコードを取得するためには、次のような1文をSQLにセットします。:
444465
445-` SQL:='Select * from TABLENAME'; `
466+``` pascal
467+ SQL:='Select * from TABLENAME';
468+```
446469
447470**データファイル上に変更を保存する**
448471
449472ApplyUpdates関数を使うために, データセットは主キーの条件にあうための、少なくとも1つのフィールドを持っていなければなりません。(つまり、ユニークであって、NULLではない、という条件です。)
450473
451474更新をおこなうために2つの方法が可能です。
452475
453476- PrimaryKeyプロパティに主キーになっているフィールド名を指定する。
454477- AutoIncフィールドを加える。(これはTSqliteDatasetが自動的にそれを主キーとしてみなすので簡単です。)
455478
456479もし、2つの条件のうち、1つをセットしたら、次のように呼び出すだけです。
457480
458-` ApplyUpdates;`
481+```text
482+ ApplyUpdates;
483+```
459484
460485追記1: もし、両方の条件がセットされたら、主キーによるフィールドが更新のために使われます。
461486
462487追記2:フィールドに主キーを設定することは、ApplyUpdateがコールされたときに、主キーによってデータをみつけられなくてはいけません。 ですから、選択されたフィールドは、 Nullを含まないことや、一意であることを確認してください。
463488
464489### 注意事項
465490
466491- 10000レコードまではテストして、上手く動きますが、TSqliteDatasetはすべてのデータをメモリ上に置くため、必要なデータのみ受け取るようにしてください。(特にMemoフィールドなどに注意).
467492- 同じデータファイルに、いくつかのテーブル、データセットを持たせることができます。
468493- いくつかのデータセット(違うフィールドの組み合わせの)を同じテーブルから作ることができます。
469494- SQLでWHERE文を使ってデータを選別することが可能です。クローズして再オープンする(あるいは、RefechDataメソッドをつかう)ことができます。この場合、並び順やフィールドの数は同じでなくてはなりません。
470495- 複数のテーブルからaliasesやjoin,viewsなどを使って複雑なSQL文を使うことが可能です。(しかし、これらは同じデータファイルになくてはなりません。)しかしこの場合、ApplyUpdateは動作しません。もし複雑なクエリをつかって、データファイルに更新を加えたければ私(Luiz Américo)にメールしてください。そうすれば、どういうふうにおこなうか、ヒントをお伝えすることができます。
471496
472497- TSqliteDatasetで生成されていない、そして、開いていないsqlite2.xのデータファイルにファイル名を設定するとき、一部のフィールドが正しい型を検出することが、許可されていません。これらは、stringフィールドとして扱われます。
473498
474499一般的なサンプルが、fpc/fcl/db/sqlite CVSディレクトリにあります。
475500
476501Luiz Américo pascalive(at)bol(dot)com(dot)br
477502
478503## Lazarus と MSSQL
479504
480505これはZeoslib (latest cvs)でおこなっています。ページの最後のリンクを見てください。
481506
482507## Lazarus と Interbase / Firebird
483508
484509[[Install Packages|Install Packagesを]]見て下さい。このページにはどのようにIBやFBサーバーと接続するか、最初の小さいサンプルと説明があります。
485510
486511この作業も最新のZeoslibにあります。
487512
488513### FBLib Firebird ライブラリ
489514
490515[1](http://fblib.altervista.org/%7CFBLib) はDelphi/Kylix、FreePascalとLazarusからFirebirdリレーショナルデータベースに直接アクセスする、(DataAwareではない)オープンソースライブラリです。
491516
492517現在、次のような特徴があります。
493518
494519- Firebird 1.0.x 1.5.x Classic SuperServer に直接接続します。
495520- マルチプラットホームです。 \[Win32,Gnu/Linux,FreeBSD)
496521- 自動的にクライアントライブラリを選択します。'fbclient' または 'gds32'
497522- パラメータ型クエリのサポート
498523- SQL Dialect 1/3をサポート
499524- LGPL ライセンス
500525- メタデータの抽出
501526- シンプルなスクリプトパーサ
502527- 実行ファイルは100-150 KB しか増えません。
503528- BLOB フィールドをサポートします。
504529- HTML SQL Scriptへデータを出力します。
505530- サービスマネージャ (backup,restore,gfix...)
506531- イベントアラータ
507532
508533文書はここからダウンロードできます。[FBLibのWebサイト](http://fblib.altervista.org/).
509534
510535## Lazarus と dBase
511536
512537Tony Maro
513538
514539このページも訪れるとよいでしょう。[[Lazarus Tdbf Tutorial|TDbf Tutorial page]]
515540
516541FPCはDelphiのTTableコンポーネントとにた機能をもつ、"TDbf"([TDbf Website](http://tdbf.sourceforge.net/))と呼ばれる、シンプルなデータベースコンポーネントを含んでいます。 これは、基本的なdBaseファイルの機能の基本的なサブセットをサポートしています。これは、デフォルトではインストールされませんので、最初にすることはLazarusパッケージを"lazarus/components/tdbf" からインストールして、Lazarus IDEをビルドすることです。そうすれば、コンポーネントパレットにTDatasourceの次に現れます。
517542
518543TDbfコンポーネントは他のデータベースコンポーネントに対して、次のような利点があります。すなわち、どんな種類のランタイムデータベースエンジンも必要としないことです。しかしながら、大きいデータベースをもつアプリケーションには最適ではありません。
519544
520545これを使うのは非常に簡単です。単に、フォームの上にTDbfをドロップしておいてください。ランタイムパスにデータベースファイルを置く場所を指定します。テーブル名をセットします。そして、TDatasourceコンポーネントにリンクします。
521546
522547しかしながら、もうちょっと努力して本格的な機能が求められます。テーブルがすでに存在しない場合、テーブルデザイナに相当するものがなければ(私はしりませんが)、プログラムからそれをつくる必要があります。
523548
524549存在しないテーブルを開こうとすると、エラーが生成されます。テーブルはプログラムから、ランタイムパスとテーブル名をセットしたコンポーネントを通して、作ることができます。
525550
526551たとえば、あなたのDVDコレクションを記録するために"dvds"というテーブルを作る場合、フォームにTDbfコンポーネントをドロップして、ランタイムパスと"dvds"と名づけたテーブル名を設定してください
527552
528553結果ファイルは"dvds.dbf"となります。
529554
530555コードでおこなう場合次のようなコードを入れてください。
531556
532557``` pascal
533558 Dbf1.FilePathFull := '/path/to/my/database';
534559 Dbf1.TableName := 'dvds';
535560 With Dbf1.FieldDefs do begin
536561 Add('Name', ftString, 80, True);
537562 Add('Description', ftMemo, 0, False);
538563 Add('Rating', ftString, 5, False);
539564 end;
540565 Dbf1.CreateTable;
541566```
542567
543568このプログラムを走らせると、あなた用のDVDコレクションテーブルが作られます。その後、すべてのdata awareコンポーネントがTDatasourceを通してリンクされ、データに簡単にアクセスできるようになります。
544569
545570インデックスを付加することは、典型的なTTableとはちょっと異なっています。データベースは開いていなくてはなりません。インデックスをリビルドするのと同じメソッドを使います。
546571
547572例えば:
548573
549574``` pascal
550575 Dbf1.Exclusive := True;
551576 Dbf1.Open;
552577 Dbf1.AddIndex('dvdsname','Name',[ixPrimary, ixUnique, ixCaseInsensitive]);
553578 Dbf1.AddIndex('rating.ndx', 'Rating', [ixCaseInsensitive]);
554579 Dbf1.Close;
555580```
556581
557582最初のインデックス(プライマリインデックス)は、"dvdname.mdx"というファイルにはいっており、2番目のインデックスは、"rating.ndx"というファイルにはいっています。複数のテーブルがあるデータベースでは、同じファイル名を使わないよう注意を払ってください。
558583
559584今後、もっと詳細な例を作りたいと思っています。願わくば、昔Delphiに馴染んだ方々に立ち上がっていただき、Lazarusでデータベースのプログラムを作るきっかけになってほしいと思っています。
560585
561586## 関連のある記事
562587
563588- [[Databases/ja|Creating Databases Applications with Lazarus using the DB-unit]]\
564589- [[MySQLDatabases|Creating a database application using MySQL]]\
565590- [[Zeos tutorial|Creating a database application using the Zeos components]]
566591- Pascal Data Objects is a database API that worked for both FPC and Delphi and utilises native MySQL libraries for version 4.1 and 5.0. It's inspired by PHP's PDO class.
567592
568593<https://trac.synsport.com:8000/index.php/pdo/wiki> (username/password is guest/guest)
569594
570595## Contributors and Changes
571596
572597This page has been converted from the epikwiki [version](http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusDatabase).
573598
574599---
575600*From the Free Pascal wiki, page "Lazarus Database Tutorial/ja", as it stood on 2024-04-01 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).*

Back to history