Sign in Join
Wiki copytemporary

MySQLDatabases/fr: what changed

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

OldNewLine
11# Introduction
22
33Cette page expliquera comment se connecter à un serveur [[mysql/fr|MySQL]] en utilisant des composants visuels.
44
55> **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.
66
77En 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
88
99Dans 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.
1010
1111# Composants disponibles
1212
1313## Composants SQLdb
1414
1515Dans les versions même vaguement récentes de Lazarus, les composants SQLDB sont installés par défaut.
1616
17-<figure>
18-<img src="sqldbcomponents.png‎" title="sqldbcomponents.png‎" />
19-<figcaption>sqldbcomponents.png‎</figcaption>
20-</figure>
17+![](/wiki-images/c/c5/Sqldbcomponents.png%E2%80%8E)
2118
2219Dans l'onglet SQLDB, vous trouverez :
2320
2421- 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.
2522- [[TSQLQuery/fr|TSQLQuery]]
2623
2724Si l'onglet SQLDB manque, consultez la page [[Install Packages/fr|Installation des paquets]] pour le "Comment-faire de l'installation" ('Install howto').
2825
2926# Explication des composants utilisés
3027
3128## TMySQLConnection
3229
3330TMySQLConnection 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.
3431
3532Assurez-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.
3633
3734Note. 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.
3835
3936## TSQLTransaction
4037
4138Une 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.
4239
4340## TSQLQuery
4441
4542TSQLQuery 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.
4643
4744## TDataSource
4845
4946Un 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.
5047
5148## TDBGrid
5249
5350Un 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.
5451
5552# Notre programme
5653
5754## Les bases
5855
5956Nous 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.
6057
6158## La fiche principale
6259
6360Nous 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-\
61+
6562![](/wiki-images/2/28/Trymysql.png)\
6663Depuis 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:
6764
6865| | | |
6966|------------------|---------------|------------------|
7067| **Composant** | **Propriété** | **Valeur** |
7168| MySQLConnection1 | Transaction | SQLTransaction1 |
7269| SQLTransaction1 | Database | MySQLConnection1 |
7370| SQLQuery1 | Database | MySQLConnection1 |
7471| SQLQuery1 | Transaction | SQLTransaction1 |
7572
7673La 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.
7774
7875Comme dit plus tôt: Assurez-vous que vous utilisez le composant Connection correct pour la version de votre serveur MySQL.
7976
8077## Le code
8178
8279Comme 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 !" :)
8380
8481Avant 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\].
8582
8683### Connexion à un serveur
8784
8885La 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à.
8986
9087``` pascal
9188 procedure TFormTryMySQL.ConnectButtonClick(Sender: TObject);
9289 begin
9390 // Check if we have an active connection. If so, let's close it.
9491 if MySQLConnection1.Connected then CloseConnection(Sender);
9592 // Set the connection parameters.
9693 MySQLConnection1.HostName := HostEdit.Text;
9794 MySQLConnection1.UserName := UserEdit.Text;
9895 MySQLConnection1.Password := PasswdEdit.Text;
9996 MySQLConnection1.DatabaseName := 'mysql'; // MySQL is allways there!
10097 ShowString('Opening a connection to server: ' + HostEdit.Text);
10198 MySQLConnection1.Open;
10299 // First lets get a list of available databases.
103100 if MySQLConnection1.Connected then begin
104101 ShowString('Connected to server: ' + HostEdit.Text);
105102 ShowString('Retrieving list of available databases.');
106103 SQLQuery1.SQL.Text := 'show databases';
107104 SQLQuery1.Open;
108105 while not SQLQuery1.EOF do begin
109106 DatabaseComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
110107 SQLQuery1.Next;
111108 end;
112109 SQLQuery1.Close;
113110 ShowString('List of databases received!');
114111 end;
115112 end;
116113```
117114
118115La 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.
119116
120117
121118*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.*
122119
123120Avec les paramètres définis, nous pouvons nous connecter au serveur. ce qui est fait en appelant :
124121
125122``` pascal
126123 MySQLConnection1.Open;
127124```
128125
129126Dans 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 :
130127
131128``` pascal
132129 SQLQuery1.Open;
133130```
134131
135132L'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 :
136133
137134``` pascal
138135 SQLQuery1.Next;
139136```
140137
141138Quand nous avons ajouté toutes les bases de données disponibles dans notre Combobox, nous fermons à nouveau le SQLQuery.
142139
143140### Sélection d'une base de données
144141
145142Si 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.
146143
147144``` pascal
148145 procedure TFormTryMySQL.SelectDBButtonClick(Sender: TObject);
149146 begin
150147 // A database has been selected so lets get the tables in it.
151148 CloseConnection(Sender);
152149 if DatabaseComboBox.ItemIndex <> -1 then begin
153150 with DatabaseComboBox do
154151 MySQLConnection1.DatabaseName := Items[ItemIndex];
155152 ShowString('Retreiving list of tables');
156153 SQLQuery1.SQL.Text := 'show tables';
157154 SQLQuery1.Open;
158155 while not SQLQuery1.EOF do begin
159156 TableComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
160157 SQLQuery1.Next;
161158 end;
162159 SQLQuery1.Close;
163160 ShowString('List of tables received');
164161 end;
165162 OpenQueryButton.Enabled := True;
166163 end;
167164```
168165
169166MySQL 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.
170167
171168### Champs dans une table
172169
173170Dans 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.
174171
175172``` pascal
176173 procedure TFormTryMySQL.TableComboBoxChange(Sender: TObject);
177174 begin
178175 FieldListBox.Clear;
179176 SQLQuery1.SQL.Text := 'show columns from ' + TableComboBox.Text;
180177 SQLQuery1.Open;
181178 while not SQLQuery1.EOF do begin
182179 FieldListBox.Items.Add(SQLQuery1.Fields[0].AsString);
183180 SQLQuery1.Next;
184181 end;
185182 SQLQuery1.Close;
186183 end;
187184```
188185
189186Aussi 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.
190187
191188### Montrer les données
192189
193190Comm 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 :
194191
195192``` pascal
196193 procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
197194 begin
198195 ShowQueryForm := TShowQueryForm.Create(self);
199196 ShowQueryForm.Datasource1.DataSet := SQLQuery1;
200197 SQLQuery1.SQL.Text := CommandEdit.Text;
201198 SQLQuery1.Open;
202199 ShowQueryForm.ShowModal;
203200 ShowQueryForm.Free;
204201 SQLQuery1.Close;
205202 end;
206203```
207204
208205La fiche ShowQueryForm ressemble à ceci :
209206
210-<center>
211-
212-<figure>
213-<img src="Mysqlshow.png" title="Mysqlshow.png" />
214-<figcaption>Mysqlshow.png</figcaption>
215-</figure>
216-
217-</center>
207+![](/wiki-images/4/47/Mysqlshow.png)
218208
219209et contient un :
220210
221211| | | |
222212|-------------|------------|-------------|
223213| TPanel | Align | alBottom |
224214| TDataSource | | |
225215| TDBGrid | Align | alClient |
226216| | DataSource | DataSource1 |
227217| TButton | Caption | Close |
228218
229219Le 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.
230220
231221# Sources
232222
233223Les 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).\
234224Pour plus de projets de démo, voyez dans [sourceforge](http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=148359).
235225
236226# Voir aussi
237227
238228- [[mysql/fr|mysql]]
239229
240230---
241231*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