Gestion d'une base de données MySQL

Avec les composants natifs de Lazarus


précédentsommairesuivant

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 :

Image non disponible

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 :

 
Sélectionnez
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 :

 
Sélectionnez
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éé :

 
Sélectionnez
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 :

Image non disponible

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

 
Sélectionnez
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.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Alcatîz. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.