Sign in Join
Wiki copytemporary

MySQLDatabases/fr: what changed

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

Title: MySQLDatabases/fr

OldNewLine
1+# Introduction
2+
3+Cette page expliquera comment se connecter à un serveur [[mysql/fr|MySQL]] en utilisant des composants visuels.
4+
5+> **Note:** Cette page a été écrite il y a longtemps et peut être dépassée. Aussi, la plupart des concepts décrits ici ne sont pas spécifiques à MySQL mais s'appliquent à tous les bases de données SQLDB. Donc suivre les tutoriels SQLDB ci-dessous pourrait être plus facile.
6+
7+En complément des tutoriels listés en bas de cette de page, voir aussi [[mysql/fr|mysql/fr#Tutoriels et exemple de code]] pour plus de tutoriels qui sont écrits depuis longtemps aussi
8+
9+Dans le [[Lazarus Database Tutorial/fr|tutoriel de base de données]] nous avons vu une première tentative de connexion à un serveur MySQL. Nous n'avons utilisé aucun composant, qu'il soit visuel ou non-visuel, à ce moment là. Cette page expliquera comment se connecter à un serveur MySQL d'une façon (peut-être) plus facile.
10+
11+# Composants disponibles
12+
13+## Composants SQLdb
14+
15+Dans les versions même vaguement récentes de Lazarus, les composants SQLDB sont installés par défaut.
16+
17+<figure>
18+<img src="sqldbcomponents.png‎" title="sqldbcomponents.png‎" />
19+<figcaption>sqldbcomponents.png‎</figcaption>
20+</figure>
21+
22+Dans l'onglet SQLDB, vous trouverez :
23+
24+- Divers connecteurs, y compris [[TMySQL40Connection/fr|TMySQL40Connection]]..[[TMySQL56Connection/fr|TMySQL56Connection]] (ou même des versions plus récentes) et le plus polyvalent de tous [[TSQLConnector/fr|TSQLConnector]] qui pourrait charger n'importe quel pilote mysql/oracle/postgres/mssql/interbase/firebird/odbc.
25+- [[TSQLQuery/fr|TSQLQuery]]
26+
27+Si l'onglet SQLDB manque, consultez la page [[Install Packages/fr|Installation des paquets]] pour le "Comment-faire de l'installation" ('Install howto').
28+
29+# Explication des composants utilisés
30+
31+## TMySQLConnection
32+
33+TMySQLConnection est utilisé pour stocker des paramètres pour se connecter au serveur de base de données. Il vous permet de configurer l'hôte auquel vous vous connectez ainsi que l'userid et le password à utiliser dans la connexion. Une autre propriété de TMySQLConnection est utilisée pour indiquer la base de données que vous voulez utiliser. Le 'LoginPrompt' n'est pas encore fonctionnel, donc assurez-vous qu'à côté des HostName et DatabaseName les propriétés UserName et Password soient bien renseignées avant de tenter d'ouvrir une connexion.
34+
35+Assurez-vous d'utiliser TSQLTransaction dans votre MySQLConnection en renseignant la propriété Transaction ou bien vous n'aurez pas la possibilité d'ouvrir une SQLQuery.
36+
37+Note. Dans les dernières versions SVN de Lazarus vous trouverez 3 composants MySQLConnection. Il y a TMySQL40Connection, TMySQL41Connection et TMySQL50Connection. Assurez-vous d'utiliser la version correcte correspondant à votre serveur. Donc si vous utilisez un MySQL 4.1 utilisez un TMySQL41Connection.
38+
39+## TSQLTransaction
40+
41+Une SQLTransaction est nécessaire pour certains travaux internes. Une SQLTransaction est automatiquement avtivée quand vous ouvrez un dataset l'utilisant. En fermant une connexion désactive également la transaction associée et ferme tous les datasets l'utilisant.
42+
43+## TSQLQuery
44+
45+TSQLQuery est utilisé pour exécuter les commandes SQL sur le serveur. Vous pouvez récupérer des données en positionnant le SQL à quelque commande SELECT et en l'appelant avec la méthode Open. Ou vous pouvez manipuler les données en faisant des INSERT, DELETE or UPDATE. Dans le dernier cas, vous ne devez pas utiliser la méthode Open mais la méthode Execute.
46+
47+## TDataSource
48+
49+Un DataSource met à disposition la connexion entre les composants 'data aware' visibles comme DBEdit, DBGrid et un dataset. Il permet aux données d'être disponibles pour l'affichage par les composants 'data aware'. Une datasource ne peut être connectée qu'à un seul dataset à la fois mais il peut y avoir plusieurs composants 'data aware' connectés dessus.
50+
51+## TDBGrid
52+
53+Un DBGrid peut être utilisé pour présenter les données récupérées par un Dataset. Le DBGrid a besoin d'une datasource pour se connecter à un dataset. Quand le dataset est ouvert, le DBgrid sera automatiquement peuplé avec les données.
54+
55+# Notre programme
56+
57+## Les bases
58+
59+Nous essaierons de réaliser un programme basé sur celui [[Lazarus Database Tutorial/nl|here (in Dutch)]] qui est basé sur [[Lazarus Database Tutorial|original (in English)]] par Chris.
60+
61+## La fiche principale
62+
63+Nous utiliserons le même écran principal et construirons toutes les fonctionnalités à partir de rien :) Comme vous le verrez il y a ici beaucoup de choses en moins à prendre en compte, parce que les composants nous débarrassent réellement du plus gros du travail! Donc commençons par faire un écran qui ressemble à ceci.\
64+\
65+![](/wiki-images/2/28/Trymysql.png)\
66+Depuis l'onglet SQLdb-tab plaçons un TMySQLConnection, un TSQLTransaction et un TSQLQuery ![](/wiki-images/6/6d/Components.png) sur cette fiche. Ne changez pas les noms par défaut donnés à ces composants. Sauf pour le composant Connection. Pour que cet article puisse s'appliquer à toutes les versions de MySQL, renommez votre MySQL??Connection composant: MySQLConnection1 Nous avons à lier ces composants ensemble pour qu'ils puissent faire leur travail. Dons les proporiétés suivantes ont à être configurées:
67+
68+| | | |
69+|------------------|---------------|------------------|
70+| **Composant** | **Propriété** | **Valeur** |
71+| MySQLConnection1 | Transaction | SQLTransaction1 |
72+| SQLTransaction1 | Database | MySQLConnection1 |
73+| SQLQuery1 | Database | MySQLConnection1 |
74+| SQLQuery1 | Transaction | SQLTransaction1 |
75+
76+La propriété Transaction de SQLQuery1 sera automatiquement configurée si vous avez configuré la propriété Transaction de MySQLConnection1 en premier. Quand vous aurez configuré ceci, vous noterez que SQLTransaction1.Database a pour valeur MySQLConnection1.
77+
78+Comme dit plus tôt: Assurez-vous que vous utilisez le composant Connection correct pour la version de votre serveur MySQL.
79+
80+## Le code
81+
82+Comme vous pouvez voir dans la capture d'écran, les seuls boutons disponibles au démarrage du programme sont "Connect to server" et "Exit". Pour les autres boutons, il nous faut plus d'information donc ils sont désactivés. Nous pouvons décider de désactiver "Connect to Server" jusqu'à ce que l'hôte, le nom d'utilisateur et le mot de passe soit renseignés. Mais j'en ai décidé autrement car notre utilisateur pourrait penser "Rien ne semble possible, donc partons !" :)
83+
84+Avant que je ne commence à vous donner du code, je souligne qu'il pourrait y avoir plus de gestion des exceptions dans le code. Les sections critiques devraient être placées dans des construction \[code\]try ... finally\[/code\] ou \[code\]try ... except\[/code\].
85+
86+### Connexion à un serveur
87+
88+La première chose que nous devons faire est de se connecter à notre serveur. Comme lors de la connexion, nous ne savons pas quelles bases de données sont disponibles sur le serveur, nous demanderons une liste de bases de données lors de la connexion. Cependant, il y a un hic, pour établir la connexion, nous devons entrer un DatabaseName valide dans les propriétés du MySQLConnection. Vous verrez dans le code que j'utilise la base de données "mysql". Cette base de données est utilisée par mysql pour quelque ménage donc elle sera toujours là.
89+
90+``` pascal
91+ procedure TFormTryMySQL.ConnectButtonClick(Sender: TObject);
92+ begin
93+ // Check if we have an active connection. If so, let's close it.
94+ if MySQLConnection1.Connected then CloseConnection(Sender);
95+ // Set the connection parameters.
96+ MySQLConnection1.HostName := HostEdit.Text;
97+ MySQLConnection1.UserName := UserEdit.Text;
98+ MySQLConnection1.Password := PasswdEdit.Text;
99+ MySQLConnection1.DatabaseName := 'mysql'; // MySQL is allways there!
100+ ShowString('Opening a connection to server: ' + HostEdit.Text);
101+ MySQLConnection1.Open;
102+ // First lets get a list of available databases.
103+ if MySQLConnection1.Connected then begin
104+ ShowString('Connected to server: ' + HostEdit.Text);
105+ ShowString('Retrieving list of available databases.');
106+ SQLQuery1.SQL.Text := 'show databases';
107+ SQLQuery1.Open;
108+ while not SQLQuery1.EOF do begin
109+ DatabaseComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
110+ SQLQuery1.Next;
111+ end;
112+ SQLQuery1.Close;
113+ ShowString('List of databases received!');
114+ end;
115+ end;
116+```
117+
118+La première chose que nous faisons est de vérifier si nous sommes connecté à un serveur, si c'est le cas alors nous appelons une méthode privée "CloseConnection". Dans cette méthode, un peu plus de ménage est fait, comme désactiver les boutons et nettoyer les Combobox et les Listbox. Ensuite, nous définissons les paramètres nécessaires pour se connecter au serveur.
119+
120+
121+*Tout au long de notre programme, vous pouvez voir des appels à ShowString. Cette méthode ajoute une ligne au mémo sur notre formulaire qui agit comme une sorte de journal.*
122+
123+Avec les paramètres définis, nous pouvons nous connecter au serveur. ce qui est fait en appelant :
124+
125+``` pascal
126+ MySQLConnection1.Open;
127+```
128+
129+Dans une application propre, il faudrait placer un bloc de gestion d'exception pour montrer à l'utilisateur un message amical si la connexion a échoué. Quand nous sommes connectés, nous voulons obtenir la liste des bases de données du serveur. Pour cela, nous employons un TSQLQuery en précisant dans sa propriété SQL l'ordre "SHOW DATABASES" qui permet d'obtenir la liste des bases de données. Il suffit ensuite d'ouvrir la requête :
130+
131+``` pascal
132+ SQLQuery1.Open;
133+```
134+
135+L'ensemble résultat d'une requête peut être examiné à travers la propriété Fields. Comme vous pouvez le voir, nous itérons les enregistrements en appelant :
136+
137+``` pascal
138+ SQLQuery1.Next;
139+```
140+
141+Quand nous avons ajouté toutes les bases de données disponibles dans notre Combobox, nous fermons à nouveau le SQLQuery.
142+
143+### Sélection d'une base de données
144+
145+Si l'utilisateur sélectionne une base de données dans le DatabaseComboBox, nous activons le bouton "Select Database". Dans l'événement OnClick du bouton, nous définissons la propriété DatabaseName du composant MySQLConnection1, et interrogeons la liste des tables. La dernière instruction de la procédure active le bouton "Open Query" donc l'utilisateur peut entrer une requête dans l'EditBox "Command" et l'envoyer au serveur.
146+
147+``` pascal
148+ procedure TFormTryMySQL.SelectDBButtonClick(Sender: TObject);
149+ begin
150+ // A database has been selected so lets get the tables in it.
151+ CloseConnection(Sender);
152+ if DatabaseComboBox.ItemIndex <> -1 then begin
153+ with DatabaseComboBox do
154+ MySQLConnection1.DatabaseName := Items[ItemIndex];
155+ ShowString('Retreiving list of tables');
156+ SQLQuery1.SQL.Text := 'show tables';
157+ SQLQuery1.Open;
158+ while not SQLQuery1.EOF do begin
159+ TableComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
160+ SQLQuery1.Next;
161+ end;
162+ SQLQuery1.Close;
163+ ShowString('List of tables received');
164+ end;
165+ OpenQueryButton.Enabled := True;
166+ end;
167+```
168+
169+MySQL a une commande spéciale pour obtenir la liste des tables, comparable à celle pour obtenir les bases de données, "Show tables". Le résultat de cette requête est traité de la même façon comme une liste de bases de données et toutes les tables sont ajoutées au TableComboBox. Vous pourriez vous demander pourquoi nous n'ouvrons pas la connexion à nouveau avant d'ouvrir la requête ? Eh bien, ceci est fait automatiquement (si nécessaire) quand nous activons le SQLQuery.
170+
171+### Champs dans une table
172+
173+Dans MySQL, vous pouvez encore utiliser une forme de "SHOW" pour obtenir les champs dans une table. Dans ce cas, "SHOW COLUMNS FROM \<tablename\>". Si l'utilisateur choisit une valeur dans le TableComboBox, le OnChangeEvent de cette ComboBox est déclenché, ce qui remplit le FieldListbox.
174+
175+``` pascal
176+ procedure TFormTryMySQL.TableComboBoxChange(Sender: TObject);
177+ begin
178+ FieldListBox.Clear;
179+ SQLQuery1.SQL.Text := 'show columns from ' + TableComboBox.Text;
180+ SQLQuery1.Open;
181+ while not SQLQuery1.EOF do begin
182+ FieldListBox.Items.Add(SQLQuery1.Fields[0].AsString);
183+ SQLQuery1.Next;
184+ end;
185+ SQLQuery1.Close;
186+ end;
187+```
188+
189+Aussi bien que pour les noms des champs, l'ensemble résultat contient de l'information sur le type des champs, si le champ fait partie de la clé, si le Null est permis et quelques autres encore.
190+
191+### Montrer les données
192+
193+Comm nous le disions, nous utiliserons des composants pour nous connecter à la base de données, utilisons alors des composants pour montrer les données. Nous utiliserons une seconde fiche pour montrer une grille avec les données demandées par l'utilisateur. cette fiche sera montrée quand l'utilisateur aura entré un ordre SQL dans l'EditBox "Command" et ensuite cliqué sur le bouton "Open Query". Ceci est le gestionnaire de l'événement OnClick :
194+
195+``` pascal
196+ procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
197+ begin
198+ ShowQueryForm := TShowQueryForm.Create(self);
199+ ShowQueryForm.Datasource1.DataSet := SQLQuery1;
200+ SQLQuery1.SQL.Text := CommandEdit.Text;
201+ SQLQuery1.Open;
202+ ShowQueryForm.ShowModal;
203+ ShowQueryForm.Free;
204+ SQLQuery1.Close;
205+ end;
206+```
207+
208+La fiche ShowQueryForm ressemble à ceci :
209+
210+<center>
211+
212+<figure>
213+<img src="Mysqlshow.png" title="Mysqlshow.png" />
214+<figcaption>Mysqlshow.png</figcaption>
215+</figure>
216+
217+</center>
218+
219+et contient un :
220+
221+| | | |
222+|-------------|------------|-------------|
223+| TPanel | Align | alBottom |
224+| TDataSource | | |
225+| TDBGrid | Align | alClient |
226+| | DataSource | DataSource1 |
227+| TButton | Caption | Close |
228+
229+Le bouton est placé que le panneau. Ce qui se passe dans le OnClick du bouton "Open Query" est ceci : en premier, nous créons une instance de TShowQueryForm. En second, nous définissons la propriété DataSet dans le DataSource par SQLQuery1. Ensuite nous définissons l'ordre SQL du SQLQuery avec ce qu'a entré l'utilisateur dans l'EditBox "Command" et l'ouvrons. Puis la fiche ShowQueryForm est ouverte modalement, ce qui veut dire qu'elle aura le focus de notre application jusqu'à ce qu'elle soit fermée. Quand elle est fermée, nous la libérons et fermons SQLQuery1 à nouveau.
230+
231+# Sources
232+
233+Les sources de ce projet peuvent être téléchargées depuis ce [site](http://prdownloads.sourceforge.net/lazarus-ccr/mysql_demo_20050408.tar.gz?download).\
234+Pour plus de projets de démo, voyez dans [sourceforge](http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=148359).
235+
236+# Voir aussi
237+
238+- [[mysql/fr|mysql]]
239+
240+---
241+*From the Free Pascal wiki, page "MySQLDatabases/fr", as it stood on 2020-02-21 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