Difference between revisions of "MySQLDatabases/fr"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting)
 
(10 intermediate revisions by one other user not shown)
Line 25: Line 25:
 
Si l'onglet SQLDB manque, consultez la page [[Install Packages/fr|Installation des paquets]] pour le "Comment-faire de l'installation" ('Install howto').
 
Si l'onglet SQLDB manque, consultez la page [[Install Packages/fr|Installation des paquets]] pour le "Comment-faire de l'installation" ('Install howto').
  
==Explication des composants utilisés==
+
= Explication des composants utilisés =
===TMySQLConnection===
+
== TMySQLConnection ==
 
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.
 
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.
  
Line 34: Line 34:
 
Donc si vous utilisez un MySQL 4.1 utilisez un TMySQL41Connection.
 
Donc si vous utilisez un MySQL 4.1 utilisez un TMySQL41Connection.
  
===TSQLTransaction===
+
== TSQLTransaction ==
 
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.
 
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.
  
===TSQLQuery===
+
== TSQLQuery ==
 
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.
 
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.
  
===TDataSource===
+
== TDataSource ==
 
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'.
 
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.
 
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.
  
===TDBGrid===
+
== TDBGrid ==
 
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.
 
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.
  
==Notre programme==
+
= Notre programme =
  
===Les bases===
+
== Les bases ==
 
Nous essaierons de réaliser un programme basé sur celui [[Lazarus Database Tutorial/nl#Verbinding met MySQL vanuit een Lazarus Programma|here (in Dutch)]] qui est basé sur [[Lazarus Database Tutorial#Connecting to MySQL from a Lazarus Application|original (in English)]] par [[user:Kirkpatc|Chris]].
 
Nous essaierons de réaliser un programme basé sur celui [[Lazarus Database Tutorial/nl#Verbinding met MySQL vanuit een Lazarus Programma|here (in Dutch)]] qui est basé sur [[Lazarus Database Tutorial#Connecting to MySQL from a Lazarus Application|original (in English)]] par [[user:Kirkpatc|Chris]].
  
===La fiche principale===
+
== La fiche principale ==
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.<br> [[image:Trymysql.png]]<br>
+
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.
 +
<br/><br/>[[image:Trymysql.png]]<br/>
 
Depuis l'onglet SQLdb-tab plaçons un TMySQLConnection, un TSQLTransaction et un TSQLQuery [[image: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
 
Depuis l'onglet SQLdb-tab plaçons un TMySQLConnection, un TSQLTransaction et un TSQLQuery [[image: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:
 
Nous avons à lier ces composants ensemble pour qu'ils puissent faire leur travail. Dons les proporiétés suivantes ont à être configurées:
Line 72: Line 73:
 
Comme dit plus tôt: Assurez-vous que vous utilisez le composant Connection  correct pour la version de votre serveur MySQL.
 
Comme dit plus tôt: Assurez-vous que vous utilisez le composant Connection  correct pour la version de votre serveur MySQL.
  
===The code===
+
== Le code ==
 
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 !" :)
 
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 !" :)
  
 
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].
 
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].
  
====Connexion à un serveur====
+
=== Connexion à un serveur ===
* * *  A FINIR * * *
+
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à.
The first thing we have to do is get connected to our server. As when connecting we don't know what databases are available on the server we will ask for a list of databases on connecting. However there is one catch, to make the connection we have to enter a valid DatabaseName in the properties of the MySQLConnection. You will see in the code that I am using the "mysql" database. This database is used by mysql for some housekeeping so it will always be there.
+
<syntaxhighlight lang=pascal>
 
  procedure TFormTryMySQL.ConnectButtonClick(Sender: TObject);
 
  procedure TFormTryMySQL.ConnectButtonClick(Sender: TObject);
 
  begin
 
  begin
Line 105: Line 106:
 
   end;
 
   end;
 
  end;
 
  end;
 +
</syntaxhighlight>
 +
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.
 +
:''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.''
  
The first thing we do is check to see if we are connected to a server, if we are then we call a private method "CloseConnection". In this method some more housekeeping is done. like disabling buttons and clearing comboboxes and listboxes. Then we set the necessary parameters to connect to server.
+
Avec les paramètres définis, nous pouvons nous connecter au serveur. ce qui est fait en appelant :
:''Throughout our program you may see calls to ShowString. This method adds a line to the memo on our form which acts like a kind of log.''
+
<syntaxhighlight lang=pascal>
With the parameters set, we can connect to the server. This is done by calling
 
 
  MySQLConnection1.Open;
 
  MySQLConnection1.Open;
In a proper application one would place this in an exception handling construct to present a friendly message to the user if the connection failed.
+
</syntaxhighlight>
When we are connected we want to get a list of databases from the server. To get data from the server a TSQLQuery is used. The SQL property is used to store the SQL-statement send to the server. MySQL knows the "SHOW DATABASES" command to get the list of databases. So after we have set the SQL-text, we call
+
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 :
SQLQuery1.Open;
 
The result set of a SQLQuery can be examined through the fields property. As you can see we iterate through the records by calling
 
SQLQuery1.Next;
 
When we have added all available databases to our combobox, we close the SQLQuery again.
 
  
====Selecting a database====
+
<syntaxhighlight lang=pascal> SQLQuery1.Open;</syntaxhighlight>
If the user selects a database in the DatabaseComboBox we enable the "Select Database" button. In the OnClick event of this button we set the DatabaseName of MySQLConnection1, and request a list of tables. The last statement of this procedure enables the "Open Query" Button, so the user can enter a query in the "Command" Editbox and have it send to the server.
+
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 :
 +
<syntaxhighlight lang=pascal> SQLQuery1.Next;</syntaxhighlight>
 +
Quand nous avons ajouté toutes les bases de données disponibles dans notre Combobox, nous fermons à nouveau le SQLQuery.
 +
 
 +
=== Sélection d'une base de données ===
 +
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.
 +
<syntaxhighlight lang=pascal>
 
  procedure TFormTryMySQL.SelectDBButtonClick(Sender: TObject);
 
  procedure TFormTryMySQL.SelectDBButtonClick(Sender: TObject);
 
  begin
 
  begin
Line 138: Line 143:
 
   OpenQueryButton.Enabled := True;
 
   OpenQueryButton.Enabled := True;
 
  end;
 
  end;
MySQL has a special command to get a list of tables, comparable to getting the list of databases, "show tables". The result of this query is handled in the same way as the list of databases and all the tables are added to the TableComboBox.
+
</syntaxhighlight>
You might wonder why we do not open the connection again before opening the query? Well, this is done automatically (if necessary) when we activate the SQLQuery.
+
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.
  
====Fields in a table====
+
=== Champs dans une table ===
In MySQL you can again use a form of "SHOW" to get the fields in a table. In this case "SHOW COLUMNS FROM <tablename>". If the user picks a table from the TableComboBox the OnChangeEvent of this ComboBox is triggered which fills the FieldListbox.
+
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.
 +
<syntaxhighlight lang=pascal>
 
  procedure TFormTryMySQL.TableComboBoxChange(Sender: TObject);
 
  procedure TFormTryMySQL.TableComboBoxChange(Sender: TObject);
 
  begin
 
  begin
Line 154: Line 161:
 
   SQLQuery1.Close;
 
   SQLQuery1.Close;
 
  end;
 
  end;
As well as the names of the fields, the result set contains information on the type of field, if the field is a key, if nulls are allowed and some more.
+
</syntaxhighlight>
 +
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.
  
====Showing the data====
+
=== Montrer les données ===
Well as we said we would use components to get connected to the database, lets use some components to show the data as well. We will use a second form to show a grid with the data requested by the user. This form will be shown when the user typed a SQL command in the "Command" editbox and afterwards clicks the "Open Query" button. This is the OnClick event:
+
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 :  
 +
<syntaxhighlight lang=pascal>
 
  procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
 
  procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
 
  begin
 
  begin
Line 168: Line 177:
 
   SQLQuery1.Close;
 
   SQLQuery1.Close;
 
  end;
 
  end;
The ShowQueryForm looks like this:
+
</syntaxhighlight>
 +
La fiche ShowQueryForm ressemble à ceci :
 
<center>[[Image:Mysqlshow.png]]</center>
 
<center>[[Image:Mysqlshow.png]]</center>
and contains a
+
et contient un :
 
{|
 
{|
 
|-
 
|-
Line 183: Line 193:
 
| TButton || Caption || Close
 
| TButton || Caption || Close
 
|}
 
|}
The button is placed on the panel.
+
Le bouton est placé que le panneau.
What happens in the "Open Query" OnClick is this. First we create an instance of TShowQueryForm. Secondly we set the DataSet property of the DataSource to our SQLQuery1. Then we set the SQLQuery SQL command to what the user entered in the "Command" editbox and open it. Then the ShowQueryForm is shown modally, this means that it will have the focus of our application until it is closed. When it is closed, we "free" it and close SQLQuery1 again.
+
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.
  
==Sources==
+
= Sources =
The sources for this project can be downloaded [http://prdownloads.sourceforge.net/lazarus-ccr/mysql_demo_20050408.tar.gz?download here]
+
Les sources de ce projet peuvent être téléchargées depuis ce [http://prdownloads.sourceforge.net/lazarus-ccr/mysql_demo_20050408.tar.gz?download site].
For more demo projects see [http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=148359 sourceforge]
+
<br/>Pour plus de projets de démo, voyez dans [http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=148359 sourceforge].
  
== Voir aussi ==
+
= Voir aussi =
 
* [[mysql/fr|mysql]]
 
* [[mysql/fr|mysql]]
<br/>
 

Latest revision as of 08:39, 21 February 2020

Deutsch (de) English (en) français (fr) 日本語 (ja) polski (pl) slovenčina (sk)

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

Cette page expliquera comment se connecter à un serveur MySQL en utilisant des composants visuels.

Light bulb  Remarque: 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.

En complément des tutoriels listés en bas de cette de page, voir aussi mysql/fr#Tutoriels et exemple de code pour plus de tutoriels qui sont écrits depuis longtemps aussi

Dans le 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.

Composants disponibles

Composants SQLdb

Dans les versions même vaguement récentes de Lazarus, les composants SQLDB sont installés par défaut.

sqldbcomponents.png

Dans l'onglet SQLDB, vous trouverez :

Si l'onglet SQLDB manque, consultez la page Installation des paquets pour le "Comment-faire de l'installation" ('Install howto').

Explication des composants utilisés

TMySQLConnection

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.

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.

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.

TSQLTransaction

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.

TSQLQuery

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.

TDataSource

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.

TDBGrid

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.

Notre programme

Les bases

Nous essaierons de réaliser un programme basé sur celui here (in Dutch) qui est basé sur original (in English) par Chris.

La fiche principale

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.

Trymysql.png
Depuis l'onglet SQLdb-tab plaçons un TMySQLConnection, un TSQLTransaction et un TSQLQuery 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:

Composant Propriété Valeur
MySQLConnection1 Transaction SQLTransaction1
SQLTransaction1 Database MySQLConnection1
SQLQuery1 Database MySQLConnection1
SQLQuery1 Transaction SQLTransaction1

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.

Comme dit plus tôt: Assurez-vous que vous utilisez le composant Connection correct pour la version de votre serveur MySQL.

Le code

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 !" :)

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].

Connexion à un serveur

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à.

 procedure TFormTryMySQL.ConnectButtonClick(Sender: TObject);
 begin
   // Check if we have an active connection. If so, let's close it.
   if MySQLConnection1.Connected then CloseConnection(Sender);
   // Set the connection parameters.
   MySQLConnection1.HostName := HostEdit.Text;
   MySQLConnection1.UserName := UserEdit.Text;
   MySQLConnection1.Password := PasswdEdit.Text;
   MySQLConnection1.DatabaseName := 'mysql'; // MySQL is allways there!
   ShowString('Opening a connection to server: ' + HostEdit.Text);
   MySQLConnection1.Open;
   // First lets get a list of available databases.
   if MySQLConnection1.Connected then begin
     ShowString('Connected to server: ' + HostEdit.Text);
     ShowString('Retrieving list of available databases.');
     SQLQuery1.SQL.Text := 'show databases';
     SQLQuery1.Open;
     while not SQLQuery1.EOF do begin
       DatabaseComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
       SQLQuery1.Next;
     end;
     SQLQuery1.Close;
     ShowString('List of databases received!');
   end;
 end;

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.

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.

Avec les paramètres définis, nous pouvons nous connecter au serveur. ce qui est fait en appelant :

 MySQLConnection1.Open;

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 :

 SQLQuery1.Open;

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 :

 SQLQuery1.Next;

Quand nous avons ajouté toutes les bases de données disponibles dans notre Combobox, nous fermons à nouveau le SQLQuery.

Sélection d'une base de données

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.

 procedure TFormTryMySQL.SelectDBButtonClick(Sender: TObject);
 begin
   // A database has been selected so lets get the tables in it.
   CloseConnection(Sender);
   if DatabaseComboBox.ItemIndex <> -1 then begin
     with DatabaseComboBox do
       MySQLConnection1.DatabaseName := Items[ItemIndex];
     ShowString('Retreiving list of tables');
     SQLQuery1.SQL.Text := 'show tables';
     SQLQuery1.Open;
     while not SQLQuery1.EOF do begin
       TableComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
       SQLQuery1.Next;
     end;
     SQLQuery1.Close;
     ShowString('List of tables received');
   end;
   OpenQueryButton.Enabled := True;
 end;

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.

Champs dans une table

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.

 procedure TFormTryMySQL.TableComboBoxChange(Sender: TObject);
 begin
   FieldListBox.Clear;
   SQLQuery1.SQL.Text := 'show columns from ' + TableComboBox.Text;
   SQLQuery1.Open;
   while not SQLQuery1.EOF do begin
     FieldListBox.Items.Add(SQLQuery1.Fields[0].AsString);
     SQLQuery1.Next;
   end;
   SQLQuery1.Close;
 end;

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.

Montrer les données

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 :

 procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
 begin
   ShowQueryForm := TShowQueryForm.Create(self);
   ShowQueryForm.Datasource1.DataSet := SQLQuery1;
   SQLQuery1.SQL.Text := CommandEdit.Text;
   SQLQuery1.Open;
   ShowQueryForm.ShowModal;
   ShowQueryForm.Free;
   SQLQuery1.Close;
 end;

La fiche ShowQueryForm ressemble à ceci :

Mysqlshow.png

et contient un :

TPanel Align alBottom
TDataSource
TDBGrid Align alClient
DataSource DataSource1
TButton Caption Close

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.

Sources

Les sources de ce projet peuvent être téléchargées depuis ce site.
Pour plus de projets de démo, voyez dans sourceforge.

Voir aussi