Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Delphi 10.3
  3. Connectivité aux bases de données
Extrait - Delphi 10.3 Programmation orientée objet en environnement Windows
Extraits du livre
Delphi 10.3 Programmation orientée objet en environnement Windows
8 avis
Revenir à la page d'achat du livre

Connectivité aux bases de données

Définitions

Base de données

Une base de données est un ensemble logiciel qui permet de stocker des données et de les retrouver dans leur intégralité. On distingue deux types de bases de données : les bases de données dites « relationnelles » et les autres désignées par l’appellation « NoSQL ».

Dans les bases de données relationnelles, les données sont stockées de manière structurée en séparant les différents concepts de ce que l’on veut stocker dans différentes tables. Chaque table représente une entité et il se peut qu’un ou plusieurs liens soient définis entre plusieurs tables.

On interagit avec une base de données relationnelle avec le langage SQL propre à chaque moteur. Même si tous les moteurs ont un langage SQL proche, ils ont tous quelques nuances syntaxiques.

À travers l’exécution d’une requête SQL, on peut ajouter, modifier ou supprimer des données dans une ou plusieurs tables.

Exemple

Concernant une application d’achat d’objets, on peut identifier quelques entités comme cela a été vu en programmation orienté objet. On dénombre les acheteurs (users), les objets (products), les commandes (purchases) et les adresses de livraison...

Les différents frameworks

Depuis les versions les plus anciennes, Delphi expose des frameworks toujours plus performants pour se connecter aux différentes bases de données. Les voici dans l’ordre chronologique de leur apparition.

Pour rappel, un framework est un ensemble de composants logiciels dédiés à l’élaboration de tout ou partie d’une application. En général, un framework impose une manière d’utiliser les composants entre eux, à l’inverse d’une bibliothèque qui met à disposition des fonctionnalités.

1. Le framework BDE

BDE pour Borland Database Engine. C’était le premier moteur d’accès aux bases de données historiquement inclus avec Delphi. Il ne fonctionne qu’avec des Windows 32 bits et n’a pas de support pour les chaînes de caractères Unicode. Il est conseillé dans la mesure du possible de migrer les applications utilisant le BDE avec le dernier framework de connectivité qui est FireDAC.

2. Le framework dbGo

Les composants dbGo proposent des accès à travers la technologie ADO de Microsoft (ADO pour ActiveX Data Objects). Cette technologie est basée sur les appels COM à travers des composants d’accès OLE fournis par les éditeurs de chaque moteur de base de données. Cette technologie n’est supportée...

Le SQL en bref - fonctions de base

Comme mentionné précédemment, chaque moteur SQL possède des particularités qu’il faut connaître en explorant les manuels utilisateurs ou les tutoriels fournis par l’éditeur du moteur SQL.

Les méthodes de connexion au moteur de base de données sont variées. Cela peut aller d’un simple accès fichier (SQLite ou Firebird, à l’identification TCP/IP (Firebird, MySQL, Oracle), en passant par l’identification Windows de domaine (SQLServer). Par identification Windows, on entend que l’accès à une base de données installée sur un domaine sera autorisé au même titre qu’un utilisateur voulant s’identifier sur le domaine.

Cependant, une fois l’utilisateur identifié et autorisé à interagir avec la base de données, les fonctions de base sont identiques et seule la syntaxe diffère parfois :

  • Create database <dbname> : crée une base de données dont le nom est dbname.

  • Use database <dbname> : positionne l’utilisateur dans la base de données dbname. Un moteur de base de données comme MySQL ou Firebird peut gérer plusieurs bases de données en même temps. Il est donc nécessaire de définir dans quelle base l’utilisateur veut interagir.

  • Create...

Les composants FireDAC

FireDAC fournit un nombre important de composants visuels ou non visuels. Voici la liste des composants que nous mettrons en œuvre dans notre application de e-commerce. Il existe d’autres composants fournis par FireDAC, mais on peut déjà réaliser un grand nombre d’opérations avec ces classes.

Le composant TFDConnection

Ce composant encapsule le mécanisme de connexion propre à chaque moteur de base de données. Une fois la connexion paramétrée, quand la propriété Active passe à True, le mécanisme de connexion s’effectue et la connexion est soit autorisée, soit refusée. On peut paramétrer la connexion par l’éditeur ou bien directement dans le code.

Le composant TFDTable

Ce composant permet d’interagir avec une table ou une vue de la base de données. Les méthodes accessibles de la classe TFDTable autorisent l’ajout, la modification ou la suppression d’enregistrements. Une instance de la classe TFDTable est forcément rattachée à une instance de TFDConnection.

Le composant TFDTransaction

Cette classe permet de verrouiller la base de données le temps d’effectuer plusieurs requêtes consécutives et de revenir à l’état initial de la base si une des requêtes effectuées échoue pendant...

Une application de e-commerce avec back-office

Utiliser Delphi et FireDAC pour se connecter à une base de données est simple. Cependant, il existe de nombreuses implémentations différentes qui permettent d’obtenir un résultat plus ou moins rapidement ou une application plus ou moins maintenable dans le temps.

Nous allons implémenter dans ce chapitre une application e-commerce qui fonctionnerait sur un réseau local, ou même internet, mais sans passer par un navigateur web du style Chrome ou Firefox.

L’application complète comprend deux exécutables :

  • BackOffice.exe, qui permet de gérer les produits et les acheteurs.

  • Ecommerce.exe, qui propose à un utilisateur de s’enregistrer, s’identifier, gérer ses adresses de livraison, choisir et valider un ensemble de produits à acheter. Cet exécutable génère également une facture en PDF.

L’application BackOffice sera implémentée en utilisant au maximum les composants de Delphi et FireDAC. On verra que l’implémentation est très rapide pour obtenir un résultat satisfaisant, mais que cela induit quelques problèmes. 

L’application ECommerce.exe sera implémentée autour du design pattern MVC : Model View Controller. Une rapide présentation de cette méthodologie sera faite et un exemple d’implémentation sera réalisé.

1. Design de la base de données

Listons les différents composants d’un site d’achat :

  • Des produits à acheter.

  • Des utilisateurs qui achètent.

  • Des adresses...

L’application de back-office

Créons un nouveau projet VCL Form et appelons-le BackOffice.exe. Le nom de la classe de la fenêtre principale sera TFormBackOffice.

Dans la form principale, glissons un TPageControl et rajoutons deux pages : une pour gérer les produits (tbProduct) et l’autre pour gérer les utilisateurs (tbUser).

images/12P01.png

Séparons la page en deux avec deux TPanel. La partie gauche sera nommée pnlGrid et possédera un alignement alClient. De même avec la partie droite pnlImg qui aura un alignement alRight.

Pour gérer les produits, nous utiliserons les composants TDBGrid et TDBNavigator. Ils permettent une interaction directe avec la base de données. 

Glissons ces deux composants dans le pnlGrid et le composant TDBImage dans le pnlImg.

images/12P02.png

Le rendu graphique (layout) est fini pour cette partie. Il nous reste à interfacer la base de données.

Rajoutons un TDataModule au projet et nommons-le DMBO. Il servira à stocker les entités FireDAC de manipulation de base de données.

Pour rappel le TDataModule est un composant non graphique qui sert de container pour d’autres composants n’ayant pas de rendu graphique. On s’en sert pour configurer des composants à travers l’Inspecteur d’objet et ne pas affecter les propriétés dans le code Delphi.

Déposons un TFDConnection, un TFDTable et un TDataSource. Nommons-les respectivement FDConnection, FDQueryProduct et DataSourceProduct.

La capture ci-dessous montre la zone d’édition de composants de Delphi. La zone avec la grille de point est le TDataModule portant les composants TFDQuery, TFDConnection et TDataSource.

images/12P03.png

Le composant TDataSource fournit une interface entre un dataset (un résultat de requête select) et un composant graphique. Le composant graphique en question est la grille TDBGrid.

1. Configuration des composants

a. Configuration de TFDConnection : FDConnection

En double cliquant sur l’icône FDConnection posée sur le TDataModule, on fait apparaître l’assistant à la configuration de la connexion. Il se présente comme suit :

images/12P04.png

La première action à réaliser est de configurer le moteur de la base de données sur lequel on veut se connecter. Il s’agit du menu déroulant Driver ID.

En cliquant dessus, on fait apparaître...

Conclusion

En seulement une centaine de lignes de code, en exploitant au maximum les possibilités de FireDAC et des composants VCL, on peut réaliser une interface graphique permettant d’interagir avec une table d’une base de données.

Cependant, dans la pratique, on remarque que cette seule approche est limitée, car il est difficile dans ce cas de définir des règles métiers régissant l’application. Dans notre cas présent, il n’y en avait aucune et l’approche effectuée était donc tout à fait convenable pour obtenir un résultat rapide.

Dans le chapitre suivant, nous allons voir comment aller beaucoup plus loin dans l’interaction entre la base de données, les règles métiers et la représentation graphique de l’application.