Sign in Join
Wiki copytemporary

SQLdb Tutorial1/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: SQLdb Tutorial1/fr

OldNewLine
1+## Introduction
2+
3+Le présent tutoriel va montrer à l'aide d'un exemple comment mettre en pratique le [[SQLdb Package]]. Il a été conçu pour des débutants. Cependant si vous chercher de l'aide pour les bases de données et SQL, vous n'êtes pas au bon endroit. Cette exemple utilise Firebird avec sa base de données employee.fdb. Vous pouvez utiliser une autre base. Dans ce cas, les modifications à apporter vous seront signalées au fur et à mesure.
4+
5+Si ce texte semble long, c'est que chaque ligne du code nécessaire est expliquée en détails. En fait, la quantité de choses à taper n'est pas si grande qu'il y parait. Les développeurs expérimentés peuvent survoler les instructions, ils comprendront rapidement de quoi il retourne. De plus, la première partie qui se termine par Exemple simple est suffisante pour disposer d'un programme fonctionnel.
6+
7+Vous avez devant les yeux une traduction de la [[SQLdb Tutorial1|version anglaise]] du tutoriel, elle-même traduction de la [[SQLdb Tutorial1/de|version originale]] de Swen en allemand. La version anglaise a été enrichie en particulier dans la partie qui suit Exemple simple. Swen souhaite que la version allemande reste tel que.
8+
9+De Swen : Merci à Joost et Michael, sans qui tout cela n'aurait probablement pas été possible.
10+
11+## Prérequis
12+
13+Si vous le pouvez, utiliser une version récente de Lazarus version (FPC 2.2.2 ou supérieure). Si le paquet SQLdb n'est pas installé, faites-le maintenant (Package -\> Install/Uninstall packages ... -\> SQLDBLaz 1.0.1).
14+
15+Vous devez disposer également d'une base de données relationnelle SQL, comme [Firebird](http://sourceforge.net/project/showfiles.php?group_id=9028) (si possible en version 2.0 ou supérieure). Le plus simple est d'utiliser les valeurs par défaut (par ex. utilisateur : SYSDBA et mot de passer masterkey) et la base exemple 'employee'.
16+
17+Vous pouvez préférer une autre base de données (MySQL, PostgreSQL, Oracle, SQLite ou une autre base interfacée par ODBC) : il vous faudra seulement disposer de la bonne structure base/table (voir ci-dessous) et utiliser le *TSQLConnector* approprié (voir ci-dessous également). Si les transactions de votre base sont très différentes, merci de documenter la section correspondante. Les notes au sujet de SQLite ont été commencé.
18+
19+### Les biblothèques Firebird sous Windows
20+
21+Sous Windows, il vous faudra les DLLs Firebird, éventuellement dans votre répertoire système, mais de préférence dans le répertoire de votre projet (pendant le développement, dans l'IDE) et dans le répertoire de sortie où est produit l'exécutable (pour faire tourner le programme compilé). Vous pouvez trouver ces DLLs sur cette page : Firebird Embedded 2.5 [1](http://www.firebirdsql.org/en/firebird-2-5/). Décompressez les fichiers dans votre répertoire applicatif :
22+
23+``` bash
24+fbembed.dll
25+firebird.msg
26+ib_util.dll
27+icudt30.dll
28+icuin30.dll
29+icuuc30.dll
30+Microsoft.VC80.CRT.manifest
31+msvcp80.dll
32+msvcr80.dll
33+```
34+
35+Renommez fbembed.dll en fbclient.dll (c'est le nom ordinaire du client Firebird). La DLL fournie peut également faire fonction de client ordinaire Firebird.
36+
37+Assurez-vous que la base de données employee.fdb se trouve bien dans le répertoire de votre projet.
38+
39+Enfin, recompilez une fois votre projet (même vide) pour créer le répertoire de sortie et y copier les DLLs.
40+
41+### Les bases de données Firebird sur les autres systèmes
42+
43+Sous Linux/OSX, il vous faut également les bibliothèques partagées du client Firebird. Sous Linux, vous pouvez utiliser l'utilitaire de votre distribution pour installer les paquets, comme sous Debian : \<bash\> aptitude install libfbclient2 \</bash\> ou \<bash\> sudo apt-get -yqq install libfbclient2 \</bash\>
44+
45+### Si Firebird ou employee.fdb ne sont pas installés
46+
47+Si vous ne disposez pas de la base de données exemple 'employee' ou si vous mettez en œuvre une autre base de données, voici ce dont la table dont vous devrez disposer pour notre exemple :
48+
49+``` sql
50+CREATE TABLE CUSTOMER
51+(
52+ CUST_NO INTEGER NOT NULL,
53+ CUSTOMER VARCHAR(25) NOT NULL,
54+ CITY VARCHAR(25),
55+ COUNTRY VARCHAR(15),
56+ CONSTRAINT INTEG_60 PRIMARY KEY (CUST_NO)
57+);
58+```
59+
60+Voici un peu de données pour qu'on voit quelque chose :
61+
62+``` sql
63+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('1', 'Lapinou software', 'Lanion', 'France');
64+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('2', 'VC Technologies', 'Dallas', 'USA');
65+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('3', 'Klämpfl, Van Canneyt and Co.', 'Boston', 'USA');
66+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('4', 'Felipe Bank', 'Manchester', 'England');
67+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('5', 'Joost Systems, LTD.', 'Central Hong Kong', 'Hong Kong');
68+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('6', 'Van der Voort Int.', 'Ottawa', 'Canada');
69+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('7', 'Mrs. Mauvais', 'Pebble Beach', 'USA');
70+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('8', 'Asinine Vacation Rentals', 'Lihue', 'USA');
71+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('9', 'Fax', 'Turtle Island', 'Fiji');
72+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('10', 'FPC Corporation', 'Tokyo', 'Japan');
73+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('11', 'Dynamic Intelligence Corp', 'Zurich', 'Switzerland');
74+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('12', '3D-Pad Corp.', 'Paris', 'France');
75+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('13', 'Swen Export, Ltd.', 'Milan', 'Italy');
76+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('14', 'Graeme Consulting', 'Brussels', 'Belgium');
77+INSERT INTO CUSTOMER (CUST_NO, CUSTOMER, CITY, COUNTRY) VALUES ('15', 'Klenin Inc.', 'Den Haag', 'Netherlands');
78+```
79+
80+Merci de créer la base, la table et d'insérer les données dans votre environnement.
81+
82+#### SQLite
83+
84+Si vous utilisez SQLite, vous pouvez créer la base susmentionnée dans le répertoire de votre projet en lançant le code suivant :
85+
86+``` bash
87+sqlite employee.sqlite
88+```
89+
90+Il suffit maintenant de copier/coller les instructions 'CREATE TABLE' et 'INSERT' ci-dessus. Pour tester si les données sont correctement entrée, utilisez la requête :
91+
92+``` SQL
93+select * from customer;
94+```
95+
96+Terminer la session à l'aide de la commande : .quit Un fichier du nom de 'employee.sqlite' devrait être disponible dans le répertoire de votre projet.
97+
98+Assurez-vous que les bibliothèques sqlite (dll sous Windows et so sous Linux) sont installées (Par ex. sous Windows, 'sqlite3.dll' devrait se trouver dans le répertoire de votre projet).
99+
100+Compilez une fois votre projet, même vide, pour que soit créer le répertoire de sortie et, sous Windows, copier les DLLs et la base 'employee.sqlite' dans ce répertoire.
101+
102+#### PostgreSQL
103+
104+La présente section suppose que vous utilisez un serveur Linux et le shell. Des étapes similaires aboutiront au même résultat sous Windows avec un outil graphique comme pgadmin. Connectez-vous à votre serveur et basculez sous le compte postgres :
105+
106+``` bash
107+su - postgres -c psql # Démarrage immédiat de l'interpréteur SQL psql
108+```
109+
110+Create a user for the database and the tables:
111+
112+``` SQL
113+CREATE USER employee WITH PASSWORD 'hellopassword'; -- Bien sûr, adaptez le mot de passe à votre convenance
114+-- Un message comme 'CREATE ROLE' devrait sanctionner votre succès.
115+-- Pour changer votre mot de passe a posteriori, utilisez quelque chose comme :
116+-- alter user employee with password '<newpasswordhere>';
117+-- Supprimons la date d'expiration du mot de passe. Ce n'est pas indispensable :
118+ALTER USER employee VALID UNTIL 'infinity'; --password never expires
119+-- Maintenant, ajoutons un peu de sécurité,
120+-- interdisons à l'utilisateur de créer une base de données ou d'autres comptes utilisateurs :
121+ALTER USER employee NOCREATEDB NOCREATEUSER; -- Restriction de la création d'objet
122+-- La réponse devrait être quelque chose comme 'ALTER ROLE'.
123+-- Création de notre base de données :
124+CREATE DATABASE employee;
125+-- Réponse : 'CREATE DATABASE'.
126+-- Assignons tous les droits sur la base funambol à l'utilisateur 'employee' :
127+GRANT ALL PRIVILEGES ON DATABASE employee TO employee; -- Allocation des droits
128+-- La réponse devrait être quelque chose comme 'GRANT'.
129+-- Nous créons la tbla à l'aide du type de données 'serial', numérotation automatique :
130+CREATE TABLE customer
131+(
132+ cust_no serial NOT NULL,
133+ customer character varying(25) NOT NULL,
134+ city character varying(25),
135+ country character varying(15),
136+ CONSTRAINT integ_60 PRIMARY KEY (cust_no )
137+);
138+-- Maintenant collons les lignes INSERT ci-dessus. Vérifions la saisie avec :
139+SELECT * FROM customer;
140+-- Sortons de là :
141+\q
142+```
143+
144+Maintenant, nous devrions être sous le shell, connecté en tant que utilisateur postgres.
145+
146+Si votre serveur se trouve sur une machine distante, vérifiez la bon accès réseau à cette machine. Voyez les détails dans la documentation postgresql, mais quelque chose comme ça devrait marcher :
147+
148+``` bash
149+# Nous utilisons 'nano' comme éditeur, mais vous pouvez le remplacer par ce que vous voulez (comme vim, emacs, joe...) et le numéro de la version de postgres dépend de '/etc/postgresql/8.4/main/pg_hba.conf'.
150+```
151+
152+Vérifier la présence d'une ligne qui ressemble à ceci (Remplacer 192.168.0.1 par l'étendue d'adresses IP de votre réseau local.
153+
154+\# Permettre l'acceès du réseau local en utilisant les mots de passe encodés md5 : host all all 192.168.0.1/24 md5
155+
156+Ou de manière plus restrictive :
157+
158+\# Permettre seulement l'accès à la base 'employee' à l'utilisateur 'employee' : host employee employee 192.168.0.1/24 md5
159+
160+Si vous n'avez pas de ligne de ce type, ajoutez-la à la fin et sortez de votre éditeur. Pour plus d'information, reportez-vous à la documentation PostgreSQL.
161+
162+Rechargez les paramètres de PostgreSQL :
163+
164+``` bash
165+
166+psql
167+```
168+
169+Puis
170+
171+``` bash
172+
173+SELECT pg_reload_conf(); --reload settings...
174+-- ...and exit back to shell:
175+\q
176+```
177+
178+Essayez le vous connecter à PostgreSQL.
179+
180+Note : Par défaut, PostgreSQL tente d'utiliser un socket qui ne permet pas l'usage d'un mot de passe. Pour circonvenir cette propension, nous spécifions le nom de l'hôte pour forcer une connexion TCP/IP :
181+
182+``` bash
183+psql -h 127.0.0.1 -d employee -U employee -W # Connexion par TCP/IP. Précisez votre mot de passe.
184+```
185+
186+Assurez-vous que les bibliothèques (dll sous WIndows et so sous Linus) sont bien installées - Par ex. sous Windows, 'sqlite3.dll' devrait se trouver dans le répertoire de votre projet.
187+
188+Compiler une fois votre projet, même vide, de façon à créer le répertoire de sortir et, sous Windows, copier les dlls dans ce répertoire.
189+
190+## Exemple simple
191+
192+### Projet et composants
193+
194+D'abord, il vous faut créer un nouveau projet Lazarus.
195+
196+Pour établir la connexion à votre base, vous avez besoin de une *TIBConnection*, une *TSQLTransaction* et un composant *[[Working With TSQLQuery/fr|TSQLQuery]]* que vous trouverez dans l'onglet 'SQLdb' de la palette de composants.
197+
198+*TIBConnection* est le composant de connexion spécifique à Interbase/Firebird (Firebird est un fork d'Interbase). Si vous utilisez une base de données différente, remplacez ce composant par le composant approprié dans ce même onglet. Par exemple, une *TSQLite3Connection* pour une base SQLite, une *PQConnection* pour PostgreSQL. Les explications sur l'installation des bibliothèques d'accès à ces bases dépassent l'ambition de ce tutoriel et devrait être trouvées ailleurs (dans [[Databases/fr|Databases]] par exemple).
199+
200+Placez une *TIBConnection* (ou un composant de connexion équivalent) sur votre formulaire et changez son nom en *DBConnection* dans l'inspecteur d'objet. C'est généralement une bonne idée de changer le nom de vos composants pour quelque chose qui a du sens dans votre programme (Par ex. *MainframeDBConnection*).
201+
202+Les deux autres composants, *TSQLTransaction* et *TSQLQuery*, sont communs à tous les types de bases qui peuvent être supportés par SQLdb.
203+
204+Pour afficher les données, utilisez un composant *TDBGrid*, que vous trouverez dans l'onglet 'Data Controls'. Pour connecter ce composant à la base de données, on utilise un composant *TDatasource* qu'on trouve dans l'onglet 'Data Access'.
205+
206+Tous les composants nécessaires à notre premier exemple sont maintenant rassemblés. Vous pouvez agrandir le TDBGrid pour l'affichage de toutes les données.
207+
208+### Relier les composants
209+
210+Maintenant, il nous reste à relier nos composantes. Le moyen le plus simplie consiste à utiliser l'inspecteur d'obet, mais on peut également le faire dans le code source.
211+
212+Changez la propriété *Transaction* de DBConnection en 'SQLTransaction1'. Cela provoquera le changement automatique de la propriété *Database* de SQLTransaction1 en 'DBConnection'.
213+
214+Ensuite, changez la propriété *Database* de SQLQuery1 en 'DBConnection'. Lazarus ajuste automatiquement la valeur de la propriété 'Transaction'.
215+
216+Puis, changez la propriété *Dataset* de Datasource1 en 'SQLQuery1'.
217+
218+Et, pour finir, changez la propriété *Datasource* de DBGrid1 en 'Datasource1'.
219+
220+Nous voici avec une connexion qui relie sa transaction par défaut à un composant de transaction. Le composant transaction est reliépar sa propriété 'database' à l'objet de connexion. Ces deux composants sont suffisants pour réalisation la connexion et exécuter les instructions, mais insuffisants pour afficher des requêtes. Pour cela, on utilise le composant SQLQuery qui pointe sur la base de données (database) et fait le lien avec sa transaction par défaut. C'est avec le SQLQuery que nous extrairons plus tard les données et posterons en retour les données vers la base.
221+
222+Enfin, le composant 'datasource', qui est relié au composant requête, est une sorte d'interface. Il enregistre la position actuelle dans le dataset et les composants visuels utilisent cette information pour synchroniser l'affichage sur le même enregistrement.
223+
224+Si ça vous parait un peu obscur, ne vous inquiétez pas : encore un peu de travail et vous serez capables d'afficher vos premières données.
225+
226+### Connexion avec la base de données
227+
228+Comment pouvons-nous afficher les données de notre base sur l'écran ? D'abord, nous devons informer DBConnection de l'endroit où se trouve la base employee.fdb (généralement dans le sous répertoires .../examples/empbuild/ de notre installation Firebird). Encore une fois, vous avez le choix : Vous pouvez utiliser l'inspecteur d'objets pour fixer le chemin ou le faire directement dans votre code. Nous choisissons d'utiliser l'inspecteur d'objet : Positionner la propriété 'HostName' de DBConnection sur le nom du serveur Firebird ou sur l'adresse IP. Utilisez 'localhost' si le serveur Firebird tourne sur votre machine de développement. Laissez le champ vide si vous utilisez un client Firebird embarqué. Positionner la propriété *DatabaseName* de DBConnection sur le chemin d'accès au fichier emplyee.fdb sur le serveur de base de données (par ex. C:\Program Files\Firebird\Firebird_2_0\examples\empbuild\EMPLOYEE.FDB sur une maachine Windows). Avant que le serveur de base de données ne permette l'accès au données, il vérifie que l'utilisateur et le mot de passe soient autorisés à le faire. Une base de données sérieuse demandera à l'utilisateur ces deux informations au démarrage de l'application, et l'enverra au serveur à la connexion. Toutefois, pour l'instant, de manière à faire simple, nous utiliserons encore l'inspecteur d'objets pour entrer ces informations *en dur*. Changez le 'UserName' (nom d'utilisateur) en 'SYSDBA' et 'Password' (mot de passe) en 'masterkey' (bien sûr, faites les ajustements nécessaire si votre installation utilise un nom ou un mot de passe différent).
229+
230+#### PostgreSQL
231+
232+Les choses sont très proche qu'avec Firebird. Le nom de la base de données n'a pas de chemin (de partie répertoire) - il suffit de préciser son nom (par ex. 'employee'). PostgreSQl n'a pas de mode embarqué, il est donc indispensable de renseigner la propriété *HostName* (nom du serveur) pour que la connexion de test fonctionne.
233+
234+#### SQLite
235+
236+Pour ce qui concerne SQLite, vous pouvez laisser les trois propriétés 'HostName', 'UserName', et 'Password' vides. Il faut remplir le nom du fichier SQLite dans 'DatabaseName', par ex. employee.sqlite. Attention : SQLite créera une base vide si le fichier n'existe pas.
237+
238+Vous devriez obtenir quelque chose comme l'écran suivant : [framed|center|Form and components set up](/wiki-images/b/b2/SQLTut1ComponentsSetUp.png)
239+
240+### Déterminer la partie des informations à afficher
241+
242+Bien que la connexion ait été réalisée, les données ne se sont pas affichée. La raison en est simple. Vous n'avez pas précisé au serveur ce qu'il devait vous renvoyer : La base de données employee.fdb contient plusieurs tables et nous n'avons pas informé Firebird quelle table nous voulions regarder. Si vous ne connaissez pas la structure de la base, vous pouvez utiliser des outils comme [FlameRobin](http://www.flamerobin.org/index.php) pour afficher les contenus. Lazarus fournit également un outil - le DataDesktop. Vous le trouverez dans le sous-répertoire /tools/lazdatadesktop/ de Lazarus. Sauvegardez votre projet puis ouvrez le projet lazdatadesktop.lpi et compilez-le.
243+
244+[framed|center|The DataDesktop in action](/wiki-images/d/da/DataDictonary1.png)
245+
246+Retournons à notre exemple.
247+
248+Nous voulons afficher toutes les données de la table 'CUSTOMER'. Les instructions SQL pour ce faire sont :
249+
250+``` sql
251+select * from CUSTOMER
252+```
253+
254+Nous devons affecter cette commande à la propriété 'SQL' de SQLQuery1. Dans le code source de notre projet, ça devrait avoir cet air-là :
255+
256+``` pascal
257+SQLQuery1.SQL.Text := 'select * from CUSTOMER';
258+```
259+
260+Les instructions SQL doivent être entourées d'apostrophes (se sont des chaînes de caractères au format Pascal). Vous pouvez également lui assigner la valeur d'un autre composant (par ex. Edit1.Text). Ce n'est pas toujours une bonne idée; voir [[Secure programming/fr|Secure programming]] (une documentation plus avancée) pour des informations sur l'injection de code SQL qui constitue un important risque de faille de sécurité.
261+
262+Ajoutons sur le formulaire un *TButton* (un bouton) depuis l'onglet 'Standard'. Quand l'utilisateur clique sur le bouton, l'extraction de données devrait commencer. Il va nous falloir écrire un peu de code pour faire ça. Double-cliquer sur Button1 (le bouton qu'on vient de placer sur le formulaire). Lazarus crée alors la procédure nécessaire. Nous trouverons dans notre code les lignes suivantes :
263+
264+``` pascal
265+procedure TForm1.Button1Click(Sender: TObject);
266+begin
267+
268+end;
269+```
270+
271+Entre *begin* et *end*, vous devez taper les instructions nécessaire à l'affichage des données... ce qui a évidemment quelque chose à voir avec SQLQuery1.
272+
273+La propriété 'SQL' de SQLQUery1 peut seulement être modifiée quand SQL est inactive. C'est pourquoi nous fermons d'abord le composant :
274+
275+``` pascal
276+SQLQuery1.Close;
277+```
278+
279+Puis nous assignons notre instruction SQL à la propriété 'SQL', écrasant du même coup un éventuel contenu préalable :
280+
281+``` pascal
282+SQLQuery1.SQL.Text := 'select * from CUSTOMER';
283+```
284+
285+Il nous faut maintenant établir la connexion à la base, activer la transaction et ouvrir la requête :
286+
287+``` pascal
288+DBConnection.Connected := True;
289+SQLTransaction1.Active := True;
290+SQLQuery1.Open;
291+```
292+
293+Vous pouvez omettre les deux premières instruction, car elles seront automatiquement invoquées par la troisième. Si vous compiler le projet à ce point, vous pourrez déjà voir les données de la table 'CUSTOMER'.
294+
295+Toutefois, une application qui se veut sérieuse doit s'assurer que les connexions à la base de données sont proprement fermée quand elle ne sont plus utiles. Sinon des effets secondaires imprévisibles peuvent survenir. Donc, nous utilisons l'événement 'OnClose' du formulaire (créez-le en double-cliquant dans l'inspecteur d'objets :
296+
297+``` pascal
298+procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
299+begin
300+
301+end;
302+```
303+
304+Pour fermer la connexion, nous utiliserons l'ordre inverse de l'ouverture :
305+
306+``` pascal
307+SQLQuery1.Close;
308+SQLTransaction1.Active := False;
309+DBConnection.Connected := False;
310+```
311+
312+## Résumé
313+
314+Jusqu'à maintenant, nous avons appris a connecté la base de données en utilisant le paquet SQLdb pour afficher le contenu d'une table sur l'écran. Si vous voulez ajouter plus de fonctionnalités, comme l'édition des données, vous pouvez continuer avec [[SQLdb Tutorial2/fr|Tutoriel SQLdb 2]]
315+
316+Si vous avez suivi ces différentes étapes, votre code devrait ressemble à ceci :
317+
318+``` pascal
319+unit Unit1;
320+
321+{$mode objfpc}{$H+}
322+
323+interface
324+
325+uses
326+ Classes, SysUtils, IBConnection, sqldb, db, FileUtil, Forms, Controls,
327+ Graphics, Dialogs, DBGrids, StdCtrls;
328+
329+type
330+
331+ { TForm1 }
332+
333+ TForm1 = class(TForm)
334+ Button1: TButton;
335+ Datasource1: TDatasource;
336+ DBGrid1: TDBGrid;
337+ DBConnection: TIBConnection;
338+ SQLQuery1: TSQLQuery;
339+ SQLTransaction1: TSQLTransaction;
340+ procedure Button1Click(Sender: TObject);
341+ procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
342+ private
343+ { private declarations }
344+ public
345+ { public declarations }
346+ end;
347+
348+var
349+ Form1: TForm1;
350+
351+implementation
352+
353+{$R *.lfm}
354+
355+{ TForm1 }
356+
357+procedure TForm1.Button1Click(Sender: TObject);
358+begin
359+ SQLQuery1.Close;
360+ SQLQuery1.SQL.Text:= 'select * from CUSTOMER';
361+ DBConnection.Connected:= True;
362+ SQLTransaction1.Active:= True;
363+ SQLQuery1.Open;
364+end;
365+
366+procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
367+begin
368+ SQLQuery1.Close;
369+ SQLTransaction1.Active:= False;
370+ DBConnection.Connected:= False;
371+end;
372+
373+end.
374+```
375+
376+## Voir aussi
377+
378+- [[SQLdb Tutorial0/fr|SQLdb Tutorial0]] : Instructions pour configurer les tables et les données d'exemple pour la série de tutoriels.
379+- [[SQLdb Tutorial1/fr|SQLdb Tutorial1]] : 1re partie de la série de tutoriels sur les bases de données, montrant comment configurer une grille pour afficher les données.
380+- [[SQLdb Tutorial2/fr|SQLdb Tutorial2]] : 2e partie de la série de tutoriels, montrant l'édition, l'insertion, etc.
381+- [[SQLdb Tutorial3/fr|SQLdb Tutorial3]] : 3e partie de la série de tutoriels, montrant comment développer pour des bases de données multiples et utiliser une fiche de connexion.
382+- [[SQLdb Tutorial4/fr|SQLdb Tutorial4]] : 4e partie de la série de tutoriels, montrant comment utiliser les modules de données.
383+- [[Lazarus Database Overview/fr|Vue d'ensemble des bases de données pour Lazarus]] : Information sur les bases de données supportées par Lazarus. Redirige vers des notes spécifiques à certaines bases de données.
384+- [[SQLdb Package/fr|Paquet SQLdb]] : Information sur le paquetage SQLdb.
385+- [[SQLdb Programming Reference/fr|Référence de programmation SQLdb]] : Une vue d'ensemble de l'interaction entre les composants de bases de données SQLdb.
386+- [[SqlDBHowto/fr|SqlDBHowto]] : Information sur l'utilisation du paquet SQLdb.
387+- [[Working With TSQLQuery/fr|Travailler avec TSQLQuery]] : Informations sur TSQLQuery.
388+- [utilisation des paramètres](http://www.freepascal.org/docs-html/fcl/sqldb/usingparams.html)
389+
390+---
391+*From the Free Pascal wiki, page "SQLdb Tutorial1/fr", as it stood on 2020-02-26 after a change by Trev, 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