Sign in Join
Wiki copytemporary

SQLdb Tutorial0/ja

English · Français · 日本語

概要

この記事は、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が存在している必要があります:

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

bash
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では以下のようにします:

bash
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/

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

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

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

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

手動による生成

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

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

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)
);
sql
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)
);

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

sql
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');

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

sql
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 を実行することで、上記のデータベースをあなたのプロジェクトディレクトリに作成できます。:

bash
sqlite employee.sqlite

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

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

sql
select * from customer;

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

sql
.quit

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

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

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

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

PostgreSQL

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

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

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

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

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ドキュメンテーションを参照してください。しかし、このコマンドが動くはずです。

bash
# 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設定を読み込みます:

bash
 
psql

then

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

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

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

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

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

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

終わりに

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

関連情報


From the Free Pascal wiki, page "SQLdb Tutorial0/ja", as it stood on 2024-03-30 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.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.