III. Exemple 1Â : affichage simple du contenu d'une table▲
Dans Lazarus, créez un projet de type Application. Dans l'inspecteur d'objets, renommez la fiche principale (Form1 par défaut) en MainForm.
III-A. TMySQLConnection▲
Dans la palette de composants, cherchez l'onglet SQLdb, qui contient une série de composants permettant de se connecter à différents systèmes de bases de données. Parmi ceux-ci figurent une série de connecteurs pour différentes version de MySQL ; ils sont représentés par des petits dauphins.
Un connecteur va se charger d'assurer la connexion avec le système de bases de données. C'est à lui qu'il faudra fournir le nom de l'hôte qui héberge la base de données, le nom de la base de données ainsi que le nom d'utilisateur et le mot de passe permettant d'y accéder.
Cliquez sur le connecteur qui correspond à votre version de MySQL et déposez un composant sur votre fiche vierge. Ce composant ne sera pas visible à l'exécution du programme, donc vous pouvez le placer n'importe où sur la fiche. Comme votre version de MySQL n'est peut-être pas la même que celle que j'utilise au moment de la rédaction de ce tutoriel (5.6), renommez le composant en MySQLConnection en changeant sa propriété Name ; ainsi, toute référence de version aura disparu.
Pour ce premier projet, nous allons fortement simplifier les choses et définir les noms d'hôte, de base de données, d'utilisateur et le mot de passe directement dans les propriétés du connecteur.
Dans une application sérieuse, ces propriétés seront définies au cours du programme.
Définissez les propriétés suivantes dans l'inspecteur d'objets :
Propriété |
Valeur |
---|---|
HostName |
192.168.0.1 (dans ma configuration) ou localhost (si votre serveur MySQL tourne sur votre machine) |
DatabaseName |
location |
UserName |
mysqldvp |
Password |
passmysqldvp |
III-B. Quel connecteur pour MariaDBÂ ?▲
Comme cela a été évoqué dans l'introduction, MariaDB est une déclinaison libre de MySQL de plus en plus présente sur le marché des SGBD.
Dans l'onglet SQLdb de la palette de composants, vous ne trouvez que des références aux versions de MySQL, alors quel connecteur choisir lorsque le serveur vous retourne la version 10.1 de MariaDB ? Jusqu'à la 5.5, les numéros de version coïncidaient, ensuite ils divergent :
MySQL |
MariaDB |
5.1 Ã 5.5 |
5.1 Ã 5.5 |
5.6 |
10.0 |
5.7 |
10.1 |
III-C. TSQLTransaction▲
À présent, nous avons besoin d'un composant qui va s'occuper de la transaction avec la base de données.
Dans l'onglet SQLdb, cliquez sur l'icône TSQLTransaction et déposez un composant à côté de votre connecteur.
Cliquez sur le premier composant MySQLConnection ; dans l'inspecteur d'objets, cherchez la propriété Transaction et choisissez le composant que vous venez d'ajouter dans la liste déroulante des transactions (SQLTransaction1).
Si vous inspectez les propriétés du composant SQLTransaction, vous pouvez voir que Lazarus a automatiquement établi un lien avec le connecteur et avec la base de données.
III-D. TSQLQuery▲
Maintenant, il faut ajouter sur la fiche, à côté des deux premiers composants, un autre composant invisible, TSQLQuery (toujours dans l'onglet SQLdb). Il va relayer les commandes SQL vers la base de données et héberger les données entrantes et sortantes dans un dataset.
Initialisez la propriété Database de ce nouveau composant en choisissant MySQLConnection dans la liste déroulante.
Nous disposons à présent de tous les outils nécessaires pour communiquer avec notre base de données.
III-E. TDataSource▲
Nous allons afficher le contenu d'une table, par exemple celle des voitures. Pour ce faire, nous utiliserons un composant TDBGrid, qui est un tableau spécialisé dans l'affichage de données issues d'une base de données.
Ce tableau ne peut fonctionner seul ; il doit être couplé à un TDataSource, qui va servir d'intermédiaire entre le dataset et les contrôles tels que le DBGrid.
Cherchez l'onglet DataAccess, cliquez sur le TDataSource (normalement, le tout premier de la série) et déposez-en un exemplaire à côté des trois composants déjà installés (comme eux, il restera invisible).
Dans l'inspecteur d'objets, sa propriété DataSet doit être initialisée à SQLQuery1 dans la liste déroulante.
III-F. TDBGrid▲
Reste le tableau qui, lui, sera bien visible lors de l'exécution de l'application. Dans l'onglet Data Controls, le TDBGrid est l'un des derniers. Déposez-le sur votre fiche et augmentez ses dimensions :
La propriété DataSource du DBGrid doit être initialisée à DataSource1, que nous avons déposé sur la fiche juste avant.
III-G. Commande d'affichage d'une table▲
Bien, bien. Ce que nous voulons faire, c'est afficher dans notre tableau le contenu de la table Voitures. La commande SQL que nous devrons exécuter sera :
SELECT
*
FROM
Voitures;
Cette commande sera affectée à la propriété SQL.Text du composant SQLQuery1.
Pour commander l'affichage de la table, ajoutez un simple bouton (de l'onglet Standard). Dans l'inspecteur d'objets, initialisez sa propriété Caption à « Afficher ». Dans l'onglet Événements du composant, cliquez sur les trois points en regard de l'événement OnClick - cela créera une méthode événementielle dans le code source.
Un double-clic sur la case vide à côté de l'événement a le même résultat.
Voici le contenu de cette méthode :
procedure
TMainForm.Button1Click(Sender: TObject);
begin
SQLQuery1.Close;
SQLQuery1.SQL.Text:= 'SELECT * FROM Voitures;'
;
SQLQuery1.Open;
end
;
III-H. Fermeture propre de l'application▲
Nous devons également prévoir la déconnexion propre de notre application à la base de données. Sélectionnez la fiche et, dans l'onglet Événements de l'inspecteur d'objets, cliquez sur les trois points en regard d'OnClose.
Voici le code de la méthode événementielle créé :
procedure
TMainForm.FormClose(Sender: TObject; var
CloseAction: TCloseAction);
begin
SQLQuery1.Close;
SQLTransaction1.Active:= False
;
MySQLConnection.Connected:= False
;
end
;
Il est temps de sauvegarder le projet. Nommez-le (par exemple) mysql01, et enregistrez-le dans un répertoire du même nom.
III-I. Compilation et exécution▲
Vérifions à présent que nous avons bien travaillé. Compilez et exécutez votre programme ; si vous n'avez pas commis d'erreur, le fait de presser sur le bouton Afficher remplit le DBGrid avec la liste des voitures :
Nous notons au passage que la gestion des caractères accentués (notre base de données a été créée avec le jeu de caractères UTF8) n'est pas correcte. Pour y remédier, dans l'inspecteur d'objets, il faut initialiser la propriété CharSet du connecteur MySQLConnection à UTF8.
On s'attendrait a priori à trouver une liste déroulante avec tous les jeux de caractères disponibles, mais il n'en est rien : la valeur « UTF8 » doit être introduite au clavier.
III-J. Code complet de l'exemple 1▲
unit
Main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, mysql56conn, sqldb, db, FileUtil, Forms, Controls,
Graphics, Dialogs, DBGrids, StdCtrls;
type
{ TMainForm }
TMainForm = class
(TForm)
Button1: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
MySQLConnection: TMySQL56Connection;
SQLQuery1: TSQLQuery;
SQLTransaction1: TSQLTransaction;
procedure
Button1Click(Sender: TObject);
procedure
FormClose(Sender: TObject; var
CloseAction: TCloseAction);
private
{ private declarations }
public
{ public declarations }
end
;
var
MainForm: TMainForm;
implementation
{$R *.lfm}
{ TMainForm }
procedure
TMainForm.Button1Click(Sender: TObject);
(* Exécution de la requête d'affichage de la table *)
begin
SQLQuery1.Close;
SQLQuery1.SQL.Text:= 'SELECT * FROM Voitures;'
;
SQLQuery1.Open;
end
;
procedure
TMainForm.FormClose(Sender: TObject; var
CloseAction: TCloseAction);
(* Déconnexion propre de la base de données *)
begin
SQLQuery1.Close;
SQLTransaction1.Active:= False
;
MySQLConnection.Connected:= False
;
end
;
end
.
Téléchargez le projet mysql01 complet ici.