SQLdb Tutorial0/fr

From Free Pascal wiki

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

Portail de la base de données

Références:

Tutoriels/articles pratiques :

Bases de données

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

Introduction

Cet article vous aidera à configurer votre environnement de base de données avec des exemples de tables et de données utilisés dans les tutoriels SQLdb 1, 2, 3 et 4.

Bien que cette page soit assez longue, vous n'en parcourrez que quelques sections, puisque cet article contient des instructions pour divers systèmes de bases de données.

Si vous voulez être rapidement opérationnel(le), je suggère que vous installiez le serveur Firebird et la base de données d'exemple comme décrit ci-dessous.

Pré-requis

Ce tutoriel a été écrit pour être utilisé avec des versions récentes de Lazarus (>= 1.0) ; il devrait aussi convenir pour de plus anciennes versions (0.9.30).

En outre, vous avez besoin d'une base de données SQL relationnelle comme Firebird (si possible version 2.0 ou plus). C'est plus facile si vous utilisez des paramètres standard (par exemple, SYSDBA comme nom d'utilisateur et masterkey comme mot de passe), et si vous avez installé la base de données d'exemple "employee".

Vous pouvez utiliser une autre base de données (par exemple, Microsoft SQL Server, MySQL, PostgreSQL, Oracle, SQLite, Sybase ASE ou une autre base utilisant ODBC). Veuillez vous assurer de disposer des bibliothèques requises de client base de données (voyez les différents articles du wiki sur les bases de données). Voyez ci-dessous la section Firebird ou employee.fdb non installé ? pour la manière de configurer vos tables.

Installation de Firebird

Au cas où vous n'auriez pas encore installé Firebird ou la base de données d'exemple utilisée dans ces tutoriels, vous trouverez des instructions ci-dessous.

Installation du client/serveur Firebird

Si vous n'avez encore rien installé, vous pouvez télécharger et exécuter l'installeur sur www.firebirdsql.org, et installer le serveur (par exemple, "32-bit Classic, Superclassic & Superserver").

Bibliothèques de bases de données Firebird sur Windows

Après installation sur Windows, les DLLs du client Firebird doivent être présentes ;

  • soit dans votre répertoire système (disponibles pour tous les programmes) ;
  • soit dans votre répertoire Lazarus (pour la conception dans l'IDE) et dans le répertoire de destination où se trouve l'exécutable (pour exécuter le programme compilé).

Si vous n'avez pas installé le serveur Firebird, une manière simple d'obtenir les DLLs du client est de télécharger Firebird Embedded 2.5 sur [1]. Extrayez ces fichiers dans le répertoire de votre application :

fbclient.dll # uniquement si vous utilisez le serveur
# ou
fbembed.dll # uniquement si vous utilisez Firebird Embedded 
firebird.msg
ib_util.dll
icudt30.dll
icuin30.dll
icuuc30.dll
Microsoft.VC80.CRT.manifest
msvcp80.dll
msvcr80.dll

Renommez fbembed.dll en fbclient.dll (le nom d'un client Firebird normal, client-serveur - c'est utile sur de plus anciennes versions de Lazarus). La DLL de Firebird Embedded peut également fonctionner comme un client Firebird normal.

Assurez-vous que la base de données employee.fdb se trouve dans le répertoire de votre projet. Vous pouvez la copier depuis le répertoire examples/empbuild/ du serveur Firebird 2.5.

Pour finir, compilez votre projet une fois (même s'il est vide), pour créer le répertoire de destination, et copiez les DLLs ainsi que la base de données employee.fdb dans ce répertoire.

Bibliothèques de bases de données Firebird sur d'autres systèmes

Sur Linux/OSX, vous aurez aussi besoin des bibliothèques partagées du client Firebird. Sur Linux, vous pouvez utiliser le gestionnaire de paquets de votre distribution pour récupérer les paquets du client Firebird ; par exemple, sur Debian :

aptitude install libfbclient2 firebird-dev # nous avons besoin de la version dev car FPC 2.6 et précédents chercheront libfbclient.so

Firebird ou employee.fdb non installé ?

Si la base de données d'exemple employee n'est pas installée, ou si vous utilisez une base de données différente, voici une version minimale de la table que nous utiliserons (note : vous trouverez ci-dessous des directives pour des bases de données spécifiques).

Création automatique

La méthode de configuration la plus simple est de créer une base de données vide sur votre système et de vous y connecter avec le programme utilitaire d'exemple TSQLScriptSample. Ce programme est inclus dans les versions de développement courantes de Lazarus, dans le répertoire ./examples/database/tsqlscript, mais il peut également être téléchargé sur : http://svn.freepascal.org/svn/lazarus/trunk/examples/database/tsqlscript/

Compilez et exécutez le programme, puis connectez-vous à la base de données :

tsqlscriptsample connect.png

Cliquez ensuite sur le bouton Copy table creation script, et Run script :

tsqlscriptsample runfirstscript.png

Le programme doit normalement indiquer que l'opération est couronnée de succès. Faites à présent la même chose pour Copy sample data script, et Run script.

En cas de problème, vous pouvez essayer les étapes manuelles ci-dessous.

Création manuelle

Nous allons créer les tables CUSTOMER et EMPLOYEE qui seront utilisées dans un prochain tutoriel.

Exécutez ces commandes SQL dans votre éditeur/utilitaire de base de données :

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

Quelques données pour pouvoir au moins montrer quelque chose... D'abord quelques clients :

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

Puis quelques employés :

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

Créez la base de données, les tables et insérez les données dans votre environnement de bases de données.

SQLite

Si vous utilisez SQLite, vous pouvez créer la base de données mentionnée plus haut dans le répertoire de votre projet, en lançant l'exécutable SQLite :

sqlite employee.sqlite

Copiez et collez à présent les commandes CREATE TABLE et INSERT ci-avant. Pour tester si les bonnes données sont présentes, entrez cette requête :

select * from customer;

Terminez votre session avec

.quit

Un fichier appelé employee.sqlite devrait maintenant être créé dans le répertoire de votre projet.

Assurez-vous que les DLL/so SQLite requises soient installées - par exemple, sur Windows, sqlite3.dll devrait être présent dans

  • votre répertoire Lazarus + projet de destination, ou
  • votre répertoire système.

En outre, si vous avez une DLL SQLite 32 bits, assurez-vous d'avoir la version 32 bits de Lazarus.

Compilez votre projet une fois (même s'il est vide), pour créer le répertoire de destination, et (sour Windows) copiez-y la DLL ainsi que la base de données employee.sqlite.

PostgreSQL

Dans cette section, nous partons du principe que vous utilisez un serveur Linux et la console ; les étapes équivalentes peuvent être réalisées sous Windows et avec des outils GUI comme PGAdmin.

Connectez-vous à votre serveur et basculez vers le compte PostgreSQL :

su - postgres -c psql # démarrage immédiat de l'interpréteur SQL psql

Créez un utilisateur pour la base de données et pour les tables :

CREATE USER employee WITH PASSWORD 'hellopassword'; -- bien sûr, mettez un mot de passe à votre goût
-- Quelque chose comme 'CREATE ROLE' devrait s'afficher pour indiquer le succès de l'opération.
-- Pour changer ultérieurement le mot de passe, vous pouvez utiliser quelque chose comme
-- alter user employee with password '<newpasswordhere>';

-- Nous allons empêcher le mot de passe d'expirer ; si vous souhaitez plus de sécurité, passez cette étape :
ALTER USER employee VALID UNTIL 'infinity'; -- le mot de passe n'expire jamais

-- Nous allons encore un peu resserrer les choses :
-- ne pas permettre à un utilisateur de créer une base de données ou d'autres utilisateurs :
ALTER USER employee NOCREATEDB NOCREATEUSER; -- restreint la création d'objets
-- Quelque chose comme 'ALTER ROLE' devrait s'afficher pour indiquer le succès de l'opération.

-- Créons notre base de données :
CREATE DATABASE employee;
-- Quelque chose comme 'CREATE DATABASE' devrait s'afficher pour indiquer le succès de l'opération.

-- Attribuons tous les privilèges sur la base de données employee à l'utilisateur employee :
GRANT ALL PRIVILEGES ON DATABASE employee TO employee; -- attribue à l'utilisateur toutes les permissions sur la base de données
-- Quelque chose comme 'GRANT' devrait s'afficher pour indiquer le succès de l'opération.

-- Créons la table customer, utilisant un type de donnée serial - aka 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)
);

-- Créons alors la table employee :
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)
);

-- À présent, copiez et collez les commandes INSERT de la section ci-dessus pour insérer les données.

-- Pour tester si les bonnes données sont présentes, entrez cette requête :
SELECT * FROM customer;
-- Vous devriez voir quelques clients.

-- Sortie de psql :
\q

À présent, vous devriez être dans la console, connecté comme utilisateur Postgres.

Si votre serveur est une autre machine que celle de développement, assurez-vous d'autoriser l'accès réseau à la base de données. Consultez votre documentation PostgreSQL pour les détails, mais quelque chose comme ceci devrait fonctionner :

# Remplacez nano (p.ex. vim, emacs, joe...) et le numéro de version Postgres selon votre environnement
nano /etc/postgresql/8.4/main/pg_hba.conf

Vérifiez la présence d'une ligne comme (remplacez 192.168.0.1 par votre propre adresse IP, ou range) :

# Permet l'accès depuis le réseau local, en utilisant des mots de passe crypyés en MD5 :
host    all         all         192.168.0.1/24      md5

Ou, plus restrictif :

# Permet uniquement l'accès réseau à la base de données employee par l'utilisateur employee :
host    employee         employee         192.168.0.1/24      md5

Si une telle ligne n'existe pas, ajoutez-la à la fin, enregistrez et fermez votre éditeur. Consultez la documentation PostgreSQL pour plus de détails.

Rechargez les réglages PostgreSQL :

 
psql

puis

 
SELECT pg_reload_conf(); -- recharge les réglages...
-- ... et retourne au shell :
\q

Testez la connexion à PostgreSQL.

Note : par défaut, PostgreSQL essaie un login ident/unix domain socket qui n'autorise pas les mots de passe. Nous spécifions donc à l'hôte de forcer le login TCP/IP :

psql -h 127.0.0.1 -d employee -U employee -W # Login via TCP/IP. Entrez votre mot de passe.

Assurez-vous que les DLL/so PostgreSQL et les autres bibliothèques requises soient installées - par exemple, sur Windows, elles devraient se trouver soit :

  • dans votre répertoire Lazarus + projet de destination, soit
  • dans votre répertoire système.

Compilez votre projet une fois (même s'il est vide), pour créer le répertoire de destination, et (sur Windows) copiez-y les DLLs.

Fin

Maintenant que vous avez configuré votre base de données, vous pouvez aller vers le premier "vrai" tutoriel.

Voir aussi