SQLdb Tutorial0/ja

From Free Pascal wiki
Jump to navigationJump to search

English (en) français (fr) 日本語 (ja)

データベースのポータル

参照:

チュートリアル/練習となる記事:

各種データベース

Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos

導入

この記事は、SQLdb Tutorial 1, 2 と 3 で使うためのサンプルデータとサンプルテーブルを、データベース環境と同時に設定するためのものです。

このページはとても長い文章からなっていますが、異なるデータベースシステムにおける説明を含んでいますので、必要な個所のみ読んでください。

もしもあなたがすぐにでもチュートリアルを実行したいのなら、Firebird サーバーと下記のサンプルデータベースをインストールすることをお勧めします。

必要条件

このチュートリアルは、最近の Lazarus のバージョンを用いることを基本に記述されています(Laz 1.0)。; より古いバージョンの Lazarus 0.9.30. でも動くはずです。

さらに、FirebirdなどのSQL / リレーショナルデータベースが必要です(可能であればバージョン2.0以降)。標準設定(例えば、ユーザー名がSYSDBAでパスワードがmasterkey)を使用し、employeeサンプルデータベースがインストールされていることが望ましいです。

別のデータベース(たとえばMicrosoft SQL Server、MySQL、PostgreSQL、Oracle、SQLite、Sybase ASE、またはODBCを使用した他のデータベース)を使用することもできます。必要なデータベースクライアントライブラリがインストールされていることを確認してください(データベースに関するさまざまなウィキ記事を参照してください)。Firebirdまたはemployee.fdbがインストールされていない場合は、以下のセクション「Firebirdやemployee.fdbがインストールされていない場合」を参照してください。

Firebird のインストール

まだFirebirdやチュートリアルで使用されるサンプルデータベースをインストールしていない場合は、以下の手順を参照してください。

Firebird client/server のインストール

何もインストールしていない場合は、www.firebirdsql.orgからインストーラーをダウンロードして実行し、サーバーをインストールします(たとえば、「32-bit Classic、Superclassic&Superserver」)。

WindowsでのFirebird database ライブラリ

インストール後、WindowsではFirebirdクライアントDLLが存在している必要があります:

  • システムディレクトリにある可能性があります(すべてのプログラムで利用可能)。
  • Lazarusディレクトリにもある可能性があります(IDE内でのデザイン時サポートのため)し、実行可能ファイルがある出力ディレクトリにもある可能性があります(コンパイルされたプログラムを実行するため)。

Firebirdサーバーをインストールしていない場合、クライアントDLLを手に入れる簡単な方法は次のとおりです:Firebird Embedded 2.5を以下からダウンロードしてください [1] アプリケーションディレクトリへこれらのファイルを伸長してください:

fbclient.dll #サーバを使うときのみ
#もしくは
fbembed.dll #組み込み用途のみ
firebird.msg
ib_util.dll
icudt30.dll
icuin30.dll
icuuc30.dll
Microsoft.VC80.CRT.manifest
msvcp80.dll
msvcr80.dll

Rename fbembed.dllを to fbclient.dll にリネームしてください(このファイル名は通常のクライアントサーバの Firebird クライアントです - 古いLazarus/FPCで用いる際の助けとなります)。組み込みのFirebird DLLは通常のFirebirdクライアントとしても機能することができます。

プロジェクトディレクトリにemployee.fdbデータベースがあることを確認してください。それをfirebird 2.5サーバーのexamples/empbuild/ディレクトリからコピーすることができます。

最後に、プロジェクトを1度コンパイルして(たとえ空であっても)出力ディレクトリを作成し、そのディレクトリにdllファイルとemployee.fdbデータベースをコピーしてください。

他のシステムにおける Firebird データベースライブラリ

Linux/OSXでは、Firebirdクライアント共有ライブラリも必要です。 Linuxでは、Firebirdクライアントパッケージを取得するためにディストリビューションのプログラムを使用できます。たとえば、Debianでは以下のようにします:

aptitude install libfbclient2 firebird-dev #FPC 2.6とそれ以下はlibfbclient.soを探しに行くので、devバージョンが必要ですlibfbclient.so

Firebird または employee.fdb がインストールされていない?

もしも employee サンプルデータベースがインストールされていなかったり、Firebird以外のデータベースを用いる場合、以下にチュートリアルに用いる最小限のテーブルを示します。(注: いくつかのデータベースについての方法を以下に示しています)。

自動生成

これを設定する最も簡単な方法は、システム上に新しい空のデータベースを作成し、次にTSQLScriptSampleサンプル/ユーティリティプログラムでそれに接続することです。 このプログラムは、現在のLazarus開発リリースには./examples/database/tsqlscriptディレクトリに含まれていますが、以下からダウンロードすることもできます。

http://svn.freepascal.org/svn/lazarus/trunk/examples/database/tsqlscript/

コンパイルし、プログラムを実行、データソースに接続します:

tsqlscriptsample connect.png

そしてボタン、Copy table creation script をクリックし、Run scriptを実行します:

tsqlscriptsample runfirstscript.png

プログラムは成功したことを示すはずです。 同様に Copy sample data scriptRun script

問題が起こった場合には、以下の手動的方法をとることができます。

手動による生成

今後のチュートリアルで用いるために、 CUSTOMER と EMPLOYEE のテーブルを作成します。

用いるデータベースのエディタやツールから、以下の SQL コマンドを実行してください。:

CREATE TABLE CUSTOMER
(
  CUST_NO INTEGER NOT NULL,
  CUSTOMER VARCHAR(25) NOT NULL,
  CITY VARCHAR(25),
  COUNTRY VARCHAR(15),
  CONSTRAINT CT_CUSTOMER_PK PRIMARY KEY (CUST_NO)
);
CREATE TABLE EMPLOYEE
(
  EMP_NO INTEGER NOT NULL,
  FIRST_NAME VARCHAR(15) NOT NULL,
  LAST_NAME VARCHAR(20) NOT NULL,
  PHONE_EXT VARCHAR(4),
  JOB_CODE VARCHAR(5) NOT NULL,
  JOB_GRADE INTEGER NOT NULL,
  JOB_COUNTRY VARCHAR(15) NOT NULL,
  SALARY NUMERIC(10,2) NOT NULL,
  CONSTRAINT CT_EMPLOYEE_PK PRIMARY KEY (EMP_NO)
);

データベース上で確認できるように、いくつかのデータを入れておきます。まずは、クライアントのデータです。:

INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (1, 'Michael Design', 'San Diego', 'USA');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (2, 'VC Technologies', 'Dallas', 'USA');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (3, 'Klämpfl, Van Canneyt', 'Boston', 'USA');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (4, 'Felipe Bank', 'Manchester', 'England');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (5, 'Joost Systems, LTD.', 'Central Hong Kong', 'Hong Kong');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (6, 'Van der Voort Int.', 'Ottawa', 'Canada');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (7, 'Mrs. Mauvais', 'Pebble Beach', 'USA');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (8, 'Asinine Vacation Rentals', 'Lihue', 'USA');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (9, 'Fax', 'Turtle Island', 'Fiji');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (10, 'FPC Corporation', 'Tokyo', 'Japan');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (11, 'Dynamic Intelligence Corp', 'Zurich', 'Switzerland');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (12, '3D-Pad Corp.', 'Paris', 'France');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (13, 'Swen Export, Ltd.', 'Milan', 'Italy');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (14, 'Graeme Consulting', 'Brussels', 'Belgium');
INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES (15, 'Klenin Inc.', 'Den Haag', 'Netherlands');

つぎに、被雇用者のデータです。:

INSERT INTO EMPLOYEE (emp_no, first_name, last_name, phone_ext, job_code, job_grade, 
  job_country, salary)
  VALUES (1,'William','Shatner','1702','CEO',1,'USA',48000);
INSERT INTO EMPLOYEE (emp_no, first_name, last_name, phone_ext, job_code, job_grade, 
  job_country, salary)
  VALUES (2,'Ivan','Rzeszow','9802','Eng',2,'Russia',38000);
INSERT INTO EMPLOYEE (emp_no, first_name, last_name, phone_ext, job_code, job_grade, 
  job_country, salary)
  VALUES (3,'Erin','Powell','1703','Admin',2,'USA',45368);

データベースを生成し、テーブルを生成し、データをあなたのデータベース環境に入力してください。

SQLite

SQLite を使う場合、sqlite の executable を実行することで、上記のデータベースをあなたのプロジェクトディレクトリに作成できます。:

sqlite employee.sqlite

次に、上記 CREATE TABLE と INSERT 宣言をコピー&ペーストしてください。

正しいデータが入っているかどうかをテストするには、以下のクエリを入力します。:

select * from customer;

セッションは以下のコマンドで終了できます。

.quit

以上より、プロジェクトのディレクトリに、 employee.sqlite というファイルが作られているはずです。

必要とされる sqlite の dll/so がインストールされていることを確認しておいてください。 - 例えば、Windows であれば sqlite3.dll が以下のディレクトリにあるはずです。

  • あなたの Lazarus とプロジェクト出力フォルダ または、
  • あなたの system ディレクトリ

また、あなたが 32-bit sqlite dll を使っている場合、 32-bit の lazarus を使う必要があります。

あなたのプロジェクトファイルをコンパイル(それが空のプロジェクトでも)して、一旦出力ディレクトリを作ります。そして、(Windows 上で) employee.sqlite データベースと dll をコピーして、そのディレクトリに入れます。

PostgreSQL

この節では、Linuxサーバとシェルが使われていると仮定します; 例えばpgadminといったGUI ツールとWindowsでも似たような手順でできるでしょう。

サーバにログインし、postgresアカウントに切り替えます

su - postgres -c psql # 直ちにpsql SQLインタープリタを起動します

データベースとテーブルのためにユーザーを作ります

CREATE USER employee WITH PASSWORD 'hellopassword'; -- of course, adjust password to taste
-- 'CREATE ROLE'といったようなメッセージが現れ成功したことがわかります。
-- 後にパスワードを変更するには、以下のようなコマンドで行えます。
-- ユーザーemployeeにパスワード '<newpasswordhere>' を与えます;

-- パスワードを期限切れにしないため。もしよりセキュリティを望むのであれば、ここは飛ばしてください:
ALTER USER employee VALID UNTIL 'infinity'; --パスワードは期限切れにならなりません

-- ここで、少し、セキュリティを厳しくする
-- ユーザーにデータベースや他のユーザーを作ることを許しません:
ALTER USER employee NOCREATEDB NOCREATEUSER; --オブジェクト作成を制限します
-- 'ALTER ROLE'のように、成功するはずです

-- employeeデータベースを作る:
CREATE DATABASE employee;
-- CREATE DATABASE のように、成功するはずです

-- データベース管理者とユーザーにすべての特権を割り当てます:
GRANT ALL PRIVILEGES ON DATABASE employee; -- TOに対して employeeデータベースの全権限を与えます
-- GRANTのように成功するはずです

-- シリアル データタイプ-またの名を、autonumber/autoincrementを作ります
CREATE TABLE customer
(
  cust_no serial NOT NULL,
  customer character varying(25) NOT NULL,
  city character varying(25),
  country character varying(15),
  CONSTRAINT integ_60 PRIMARY KEY (cust_no )
);

-- 従業員テーブルを作ります:
CREATE TABLE EMPLOYEE
(
  EMP_NO SERIAL NOT NULL,
  FIRST_NAME VARCHAR(15) NOT NULL,
  LAST_NAME VARCHAR(20) NOT NULL,
  PHONE_EXT VARCHAR(4),
  JOB_CODE VARCHAR(5) NOT NULL,
  JOB_GRADE INTEGER NOT NULL,
  JOB_COUNTRY VARCHAR(15) NOT NULL,
  SALARY NUMERIC(10,2) NOT NULL,
  CONSTRAINT CT_EMPLOYEE_PK PRIMARY KEY (EMP_NO)
);

-- これで、データを挿入するためINSERTステートメントを、上記の節からコピーアンドペーストします

-- 正しいデータが存在するかこのクエリで試験します
SELECT * FROM customer;
-- いくつかの顧客データを見ることができます

-- psqlから抜けます
\q

これで、postgresにpostgresユーザーとしてシェルログインできます

もし、サーバが、開発機ではなく他の機器ならばデータベースにネットワークアクセスできるか確かめてください。postgresドキュメンテーションを参照してください。しかし、このコマンドが動くはずです。

# nano (例えば、vim、emacs、joe...)を設定し、状況によりpostgresのバージョンナンバーによりますが、
nano /etc/postgresql/8.4/main/pg_hba.conf

このような行があること、注意:192.168.0.1は実際のLANアドレスに読み替えてください、を確かめて

#md5ハッシュパスワードを用いてローカルネットワークからアクセスを許可するには: host all all 192.168.0.1/24 md5

またはより厳しく:

# employeeユーザーによってのみemployeeデータベースにアクセスすることを許すには host employee employee 192.168.0.1/24 md5

もしこのような行がなければ最後に加え、エディタを終了します 詳細はPostgreSQLに譲ります

PostgreSQL設定を読み込みます:

 
psql

then

 
SELECT pg_reload_conf(); --設定を読み込み...
-- ...抜けてシェルに戻ります:
\q

PostgreSQLにログインテストします

Note: デフォルトではPostgreSQLは パスワードを許さない、ident/unixドメインソケットでのログインを試みます なので、ホストに対してTCP/IPを強制する:

psql -h 127.0.0.1 -d employee -U employee -W # tcp/ip経由でログインします db パスワードを入力してください

必要とされるPostgreSQLのdll/so、そして他のライブラリがインストールされていることを確認してください 例えば、Windowsではそれらは

  • Lazarus + project 出力ディレクトリおよび
  • システムディレクトリ

の双方にある必要があります。 もし、何もなくともprojectを1度出力ディレクトリにコンパイルし、Windowsでは dlls をそのディレクトリにコピーしてください。

終わりに

これで、あなたのデータベースが設定できました。初めての "本当の" チュートリアル に進みましょう。

関連情報

  • SQLdb Tutorial1/ja: DB チュートリアルの第一の部分。データベースのデータを、どのように grid に表示させるかを学びます。
  • SQLdb Tutorial2/ja: DB チュートリアルの第二の部分。データベースのデータの挿入や編集について学びます。
  • SQLdb Tutorial3/ja: DB チュートリアルの第三の部分。複数のデータベースについてのプログラムやログインフォームの使い方を学びます。
  • SQLdb Tutorial4/ja: DB チュートリアルの第四の部分。どのようにデータモジュールを用いるかを学びます。
  • Lazarus Database Overview/ja: Lazarus がサポートしているデータベースについての情報。 データベースごとの記述へのリンクを含みます。
  • SQLdb Package/ja: SQLdb パッケージについての情報
  • SQLdb Programming Reference/ja: SQLdb データベースコンポーネントの入出力の概要
  • SqlDBHowto/ja: SQLdb パッケージを用いることについての情報
  • Working With TSQLQuery/ja: TSQLQuery についての情報