ECOLE VEGA IP

Bases de Données sous Delphi

Bases de Données sous l’environnement Delphi

Résumé Ce chapitre est consacré à quelques rappels sur les bases de données (en particulier les bases de données relationnelles). Par la suite, nous verrons comment développer une application bases de données sous l’environnement Delphi. Ce support de cours ne se veut nullement exhaustif. Ce n’est qu’une référence de base.

I. DEFINITIONS ELEMENTAIRES
Bases de données : une base de données est un ensemble d’informations structurées mémorisées sur un support permanent. SGBD (Système de Gestion de Bases de Données): un SGBD (en anglais DBMS, Data Base Management System) est un programme (logiciel) informatique de haut niveau qui permet de créer et de maintenir une base de données. C’est à dire : - décrire les données qui seront stockées, - manipuler ces données (ajouter, modifier, supprimer des informations), - Consulter les données (sélectionner, trier, calculer, agréger, etc) - Définir des contraintes d'intégrités sur les données (contraintes de domaines, d'existence,etc) - Définir des protections d'accès (mots de passe, autorisations, etc.), - Résoudre les problèmes d'accès multiples aux données (interblocages), - Prévoir des procédures de reprise en cas d'incident (sauvegardes, journaux, etc). On distingue trois types de SGBDs : SGBD hiérarchique, SGBD réseau, et SGBD relationnel. Dans ce qui suit dans ce fascicule, nous nous intéresserons à ce dernier type de SGBD pour plusieurs raisons parmi lesquelles notamment le fait qu’ils soient les plus utilisées actuellement. Parmi les SGBD relationnels existants sur le marché, on peut citer par exemple : Oracle, Paradox, Access, DB2, Gemstone, Sybase, Informix, DBase, Ingres, etc. Alias : Il est possible de définir un alias au répertoire de travail. Cet alias sera utilisé ultérieurement dans le développement de l'application et permettra d'éviter d'avoir à fournir le chemin absolu du répertoire de travail. Par exemple : alias c:\delphi\bdd\ La notion d'alias permet de développer une application complète en s'affranchissant de la configuration physique de la machine support. Il suffit en effet de configurer l'alias (grâce à l'utilitaire adéquat) pour prendre en compte un chemin d'accès aux différentes tables différent (de celui utilisé lors de la phase de conception mais aussi, éventuellement, en cas de déplacement de l'application sur d'autres machines). Bases de données relationnelles : Les bases de données relationnelles gèrent les données selon le mode, mis au point par E.F. Codd, basé sur l'utilisation du langage SQL (Structured Query Language). Ce mode sépare l'aspect physique des données (stockage sur disque) de leur représentation logique (présentation à l'utilisateur). Les données apparaissent alors sous forme de tables qui masquent la complexité des mécanismes d'accès en mémoire. Ce modèle libère l'utilisateur de tous les détails de stockage et permet un accès purement logique aux données. Chaque table permet de stocker un type particulier de données. Une donnée stockée constitue un enregistrement dans la table (= une ligne). Elle peut être constituée d'un nombre variable d'informations élémentaires. Chaque information élémentaire constitue un champ de l'enregistrement (= une colonne). Les besoins actuels nécessitent l'utilisation fréquente de dizaines de tables, chacune permettant le stockage d'une donnée structurée particulière. Il y a lieu d'éviter la redondance des données élémentaires stockées. L'ensemble de tables ainsi constitué s'appelle une base de données.

Clé (key) : On appelle clé un identifiant permettant de déterminer d'une façon unique un enregistrement dans une table. Une clé peut être : • Un des champs de la table si les valeurs qu'il peut prendre sont toutes différentes ; • Un ensemble de champs permettant de définir un identifiant unique ; • Un champ spécial qui n'est pas une donnée proprement dite mais dont on peut être certain de l'unicité (identifiant numérique en général). La clé sert à déterminer précisément un enregistrement. Elle est unique. Enseignant : N. BOUCHAMA

ECOLE VEGA IP

Bases de Données sous Delphi

Index : un index est une information sur l'ordonnancement des différents enregistrements dans une table (il peut ne pas correspondre à l'ordonnancement physique des enregistrements). Il sert à réaliser des tris. On peut définir plusieurs indexes pour une même table. Lorsqu’un index correspond à une clé, on parle d’un index primaire. Autrement, on parle d’index secondaire. Requête : Pour accéder aux différentes informations l'utilisateur doit exécuter différentes requêtes qui seront ensuite interprétées par le gestionnaire de base de données. Dans le cas d'une base utilisée dans le contexte client / serveur, seule la requête est transmise au serveur. Celui-ci la traite puis renvoie les résultats au client. Une requête est formulée selon un langage particulier, qui est d'ailleurs un des fondements des bases de données relationnelles : le langage SQL. Vue (view): Une vue peut être affichée sous forme de tableau (chaque ligne correspond à un enregistrement et les colonnes correspondent aux champs sélectionnés) ou sous forme de fiche : un seul enregistrement est à l'écran en même temps. Lorsqu'une table est triée selon un index secondaire, elle présente à l'utilisateur une "vue" qui diffère de son implémentation physique. Moteur Bases de Données (Datase Engine) Un moteur de base de données est un ensemble de programmes chargés de gérer les différentes données stockées dans les tables (accès aux tables, ajout, modification et suppression d'enregistrement, gestion des accès concurrents). C'est le coeur d'un SGBDR. Il ne permet pas de créer les tables et n'assure pas l'interface avec les utilisateurs. Ces fonctionnalités sont réalisées par d'autres utilitaires.

II. COMPOSANTS BASES DE DONNEES SOUS DELPHI
Delphi dispose de nombreux composants permettant d’accéder aux bases de données et de les exploiter. Delphi répartit ces composants selon les mécanismes d’accès aux données qui diffèrent d’une technologie à l’autre. Sur la palette des composants, les composants bases de données sont regroupés dans six pages : La page BDE (Borland Database Engin) : C’est cette page qui nous intéresse le plus. Le modèle BDE représenté par la page BDE correspond aux composants du moteur d’accès BDE qui constitue une interface fonctionnelle API qui permet de travailler avec les bases de données. Le modèle BDE est le meilleur moyen d’exploiter une base de données Paradox ou des tables dBase. La page ADO (Activex Data Objects) La page dbExpress La page InterBase La Page AccèsBD

La table ci-dessous nous décrit le rôle des composants essentiels : DataSource Table Source de données. Agit comme un conduit entre un composant TTable, TQuery ou TStoredProc et des composants orientés données, tels que TDBGrid. Récupère les données d'une table physique, via le BDE, et les fournit à un ou plusieurs composants orientés données par le biais d'un composant DataSource. Inversement, envoie les données reçues d'un composant vers une base de données physique, via le BDE. Utilise des instructions SQL pour récupérer les données d'une table physique, via le BDE, et les fournir à un ou plusieurs composants orientés données par le biais d'un composant DataSource. Inversement, utilise des instructions SQL pour envoyer les données reçues d'un composant vers une base de données physique, via le BDE.

Query

Enseignant : N. BOUCHAMA

ECOLE VEGA IP

Bases de Données sous Delphi

La page ContrôleBD

La table ci-dessous nous décrit le rôle de chaque composant : DBGrid Grille de base de données. Grille personnalisée orientée données permettant d'afficher les données sous forme d'un tableau comme dans une feuille de calcul. Possède des propriétés TField (définies dans l'éditeur de champs) pour déterminer la visibilité d'une colonne, le format d'affichage, l'ordre, etc. Navigateur de base de données. Boutons de navigation orientés permettant de déplacer en avant ou en arrière le pointeur d'enregistrement dans une table. Le navigateur peut aussi mettre une table en mode insertion, édition ou consultation seulement, valider des enregistrements nouveaux ou modifiés et récupérer des données mises à jour pour rafraîchir l'écran. Texte de base de données. Libellé orienté données qui affiche la valeur d'un champ de l'enregistrement en cours. Saisie de base de données. Boîte de saisie orientée données permettant d'afficher et de modifier un champ de l'enregistrement en cours. Mémo de base de données. Mémo orienté données permettant d'afficher et de modifier du texte BLOB de l'enregistrement en cours. Boîte liste de base de données. Boîte liste orientée données qui affiche une liste défilable des valeurs d'une colonne d'une table. Boîte à options de base de données. Boîte à options orientée données qui permet d'afficher et de modifier une liste défilable des valeurs d'une colonne d'une table. Case à cocher de base de données. Case à cocher orientée données qui permet d'afficher et de modifier un champ booléen de l'enregistrement en cours. Groupe de boutons radio de base de données. Groupe de boutons radio orientés données qui affichent l'ensemble des valeurs d'une colonne. Boîte liste de références de base de données. Boîte liste orientée données dont les éléments proviennent d'un champ de référence défini pour un ensemble de données, ou d'une source de données, d'un champ de données et de touches secondaires

DBNavigator

DBText DBEdit DBMemo DBListBox DBComboBox DBCheckBox DBRadioGroup DBLookupListBox

Remarque : Dans le cadre de cette formation, nous nous intéresserons surtout au moteur de base de données de Borland, c'est-à-dire BDE .

Onglet QuickReport
En plus de ces six pages, on trouve également une autre page dans la palette des composants de Delphi qui nous permet d’afficher les états de sortie : Page QReport. Remarque : Cette page n’est pas présente par défaut dans Delphi 7. Par conséquent il faut l’installer.

Dans cet onglet, on s’intéresse surtout au composant QuickRep QuickRep C'est un composant visuel qui adopte la taille du format de papier sélectionné. Vous créez des états en plaçant des bandes et des composants imprimables sur le composant TQuickRep et en le connectant à un ensemble de données. Enseignant : N. BOUCHAMA

ECOLE VEGA IP

Bases de Données sous Delphi

III. ARCHITECTURE INTERNERNE PERMETTANT L’ACCES AUX DONNEES
Delphi met en place un certain nombre d'utilitaires et de mécanismes internes pour qu'une application ait accès aux données gérées par les différents SGBDR. Il fournit en particulier un moteur de base de données interne appelé BDE (Borland Database Engine), qui permet de créer et de gérer des bases de données locales. C'est BDE qui assure par ailleurs la communication avec les autres bases de données.

Figure 1 : Architecture interne d’une BDD sous Delphi. Moteur BDE : Le moteur de base de données Borland BDE (Borland Database Engine ) est l'élément central d'une application de gestion de base de données créée avec Delphi. Il est inclus directement dans les composants spécifiques fournis avec Delphi. Un programmeur n'a donc pas à s'en occuper et il n'apparaît pas dans l'arborescence de l'application créée. Par contre l'exécutable généré est plus important. L'application Delphi créée est essentiellement constituée d'une l'interface utilisateur permettant d'accéder de manière transparente à BDE. Module de Bases de Données : Les structures des différentes tables utilisées dans l'application sont mises au point par un utilitaire spécial : DBD (DataBase Desktop). Cet utilitaire, accessible par une icône spécifique ou par le menu Outils' permet de créer les différentes tables de l'application (dénominations, types et tailles des différents champs et définition des clés), de définir les différents index, de créer les liens entre les différentes tables. SGBDR (SGBD Relationnel) : Il est possible d'utiliser des tables déjà conçues par d'autres SGBDR (Paradox ou dBase). Dans notre cas, c’est le SGBDR Paradox que nous utiliserons.

I
Etats de sortie (Reports) : L'utilitaire Report Smith (ou le composant QReport) permet de générer des états complexes, en mode WYSIWYG (What You See Is What You Get), à partir des tables gérées par l'application Delphi. Pilotes ODBC : Les pilotes ODBC permettent l'accès à différentes bases de données et serveurs SQL non reconnus directement par Delphi.

IV. DEVELOPPEMENT D’UNE APPLICATION BASES DE DONNEES SOUS DELPHI
Delphi permet de gérer les applications de bases de données relationnelles. Les bases de données relationnelles organisent les informations en tables, qui contiennent des lignes (enregistrements) et des colonnes (champs). Ces tables peuvent être manipulées par des opérations simples appelées calculs relationnels (sélection, projection, jointure). Sous Delphi, on peut développer une base de données en suivant les étapes suivantes : Concevoir le MCD (Modèle Conceptuel de Données) et effectuer le passage au modèle relationnel. Inutile de rappeler ici que la cohérence et l’efficacité de votre base de données dépendent de façon très étroite de votre MCD et du respect des règles de passage. Donner un nom à notre base de données (il est vivement recommandé que votre nom de base de données soir significatif. Ex : GestionScolarité est préférable à BDD1 ) Enseignant : N. BOUCHAMA

ECOLE VEGA IP

Bases de Données sous Delphi

Création des alias Création des tables en utilisant le module de base de données (Voir figure 2 ci-Dessous). Dans cette étape, on s’intéresse aux champs de chaque table, à leurs tailles, et à leurs types (numérique, alphanumérique, date, etc). On doit également préciser les indexes (index) et les clés (key). Une fois notre base de données créée, on peut procéder au remplissage. On parle alors de phase d’exploitation de la table

V. CREATION DES TABLES EN UTLISANT LE MODULE BASE DE DONNEES

Figure 2 : Module de base de données. Dans ce paragraphe, nous donnons un exemple de création d’une table Etudiant qui contiendra les champs suivants : • • • • • • Numéro d’immatriculation Nom Prénom Date de naissance Adresse Numéro de téléphone

La clé de cette table est Numéro d’immatriculation. Ceci veut dire que deux étudiants ne doivent pas avoir le même numéro d’immatriculation sinon il y aura une violation de clé.

Etape 1 : Lancement du module de base de données : Pour ce faire, lançons le module base de données de Delphi (si vous utilisez une version anglaise de Delphi alors lancer Data Base Desktop). Ceci peut être fait soit en choisissant le module base de données dans le groupe de programme Delphi, soit en allant dans le menu Outils/Module base de données Etape 2 : Création des alias : Rappelons qu’un alias est équivalent à un chemin d’accès. Pour créer un nouveau alias, aller dans le menu Outils/Gestionnaire d’alias de votre moniteur de base de données. Cliquer sur le bouton Nouveau Dans la case Alias de base définir votre nouveau alias. Par exemple : AliasStudent Cliquer sur Parcourir pour associer le chemin d’accès correspondant à votre alias. Par exemple : C:\Delphi Enregistrer votre nouveau alias en cliquant sur le bouton Enregistrer sous. Etape 3 : Création de la table : Aller sur le menu Fichier/Nouveau/Table Choisir un pilote de base de données. Dans notre cas, choisir Paradox puis cliquer sur OK. Définir les champs de votre table tout en définissant le type et la longueur de chaque champ. Sauvegarder votre table dans l’emplacement que vous avez associé à votre alias (enregistrer votre table sous le nom Etudiant.db).

Enseignant : N. BOUCHAMA

ECOLE VEGA IP

Bases de Données sous Delphi

Figure 3 : Interface pour créer une nouvelle table.

VI. CREATION DE L’APPLICATION

Figure 4 : Composants Base de données sur une fiche Delphi. Le module Base de Données Delphi nous permet de créer les tables contenant les données. Il s’agit de l’aspect statique de votre application. Tandis que pour exploiter ces données, on doit utiliser des composant bases de données dont dispose Delphi. Pour ce faire, créez une nouvelle applications Delphi en allant dans : Fichier/Nouveau/Application Une fois votre nouvelle application créée, ajouter les composant suivants à votre fiche : • TTable : ce composant se trouve dans l’onglet BDE. Associer le champ DatabaseName au nom de votre alias, et le champ TableName au nom de votre table (dans notre cas ’est Etudiant.db). Une fois ce deux propriétés définies, définir la propriété Active à true. • TDatasource : Associer au champ Dataset de ce composant Table1 • TDBNavigator : comme son nom l’indique, ce composant sert à naviguer dans la base de données. Naviguer veut dire : se déplacer d’un enregistrement à l’autre en utilisant les boutons suivants :

Figure 5 : Boutons du composant DBNavigator Configurer la propriété DataSource de ce composant à DataSource1 • TDBGrid : ce composant sert à afficher le contenu de la table Table1. On peur également utiliser ce composant pour modifier directement le contenu de la table. Pour ce faire, configure la propriété Datasource à Datasource1.

Remarques :
Enseignant : N. BOUCHAMA

ECOLE VEGA IP • •

Bases de Données sous Delphi

Lorsque vous voulez découvrir les différentes méthodes et propriétés d’un composant Delphi, placez votre composant sur la fiche et appuyez sur F1 ; Vous pouvez accéder aux différentes méthodes et propriétés d’un composant en en tapant le nom du composant + point+ (CTRL+ESPACE). On utilise rarement le navigateur (et une grille) pour réaliser des insertions et suppressions de champs. Il n'y a pas assez de contrôles de réaliser et l'entrée des données n'est pas très pratique et peut générer des erreurs (on préférera utiliser une fenêtre spéciale contenant l'ensemble des champs de saisie sous forme de formulaire). On utilise donc principalement le navigateur pour réaliser des déplacements à l'intérieur de la base. Il faut donc éliminer les boutons inutiles (cas de manipulation dangereuse) et ne conserver que ceux que l'on souhaite mettre à la disposition des utilisateurs. Pour cela on sélectionne le composant Navigateur et on affiche la liste des options accessibles via la propriété VisibleButtons. Il suffit alors de faire basculer à False les boutons que l'on ne veut pas afficher. L'effet est immédiat dans la fenêtre de conception et il n'y a plus qu'à redimensionner le navigateur.

VII. UTILISATION DE L’EXPERT FICHE
Dans ce que nous avons vu précédemment, les composants base de données ont été rajoutés manuellement par un glisser/déplacer sur la fiche. Cependant, il existe un autre moyen plus commode pour visualiser et mettre à jour une base de données. Il s’agit de l’expert fiche de Delphi. Pour utiliser cet outil, il faut suivre les étapes suivantes : Aller dans Fichier/Nouveau/Autre Choisir l’onglet Affaires Cliquer sur Expert Fiche Base de données Vous pouvez procéder par une autre façon : Aller simplement dans le menu Base de données/Expert Fiche de Delphi

Figure 6 : Expert fiche

Par la suite, cet assistant vous guidera pour obtenir une fiche contenant une interface vous permettant d’interagir avec votre base de données.

VIII. MISE À JOUR D’UNE BASE DE DONNES EN UTLISANT DU CODE
Jusqu’à maintenant, nous avons vu comment mettre à jour une base de données en utilisant des composants visuels (DBNavigator, DBGrid, etc). Il existe un autre moyen pour mettre à jour une base de données ; à savoir : le code PASCAL.
Numéro d’immatriculation 0 Nom 1 Prénom 2 Date de naissance 3 Adresse 4 Numéro de téléphone 5

Figure 7 : Numéro de chaque champ de la table Etudiant. Pour accéder à un champ d’un enregistrement donné, on doit connaître la position du champ ainsi que celle de l’enregistrement. Exemple : Imaginons que le premier enregistrement est le suivant : A005 Ait Amar Hocine 23/06/1982 Ihaddaden, Béjaia 034202020

Enseignant : N. BOUCHAMA

ECOLE VEGA IP Et supposons qu’on veuille modifier le nom de cet étudiant à Ait Ammar : Dans ce cas, Il y deux méthodes pour modifier de champs par code Méthode 1 (en utilisant les indices des champs): On doit taper le code suivant :

Bases de Données sous Delphi

Table1.Edit ; //ouvrir la table en mode édition Table1.Fields[1].AsString :=’Ait Ammar’ ; // car l’indice du champ nom est 1 .
Méthode 2 (en utilisant les noms des champs): Dans ce cas, on n’est pas obligé de savoir l’indice du champs mais son nom exact :

Table1.Edit ; //ouvrir la table en mode édition Table1.FieldByName(‘Nom’) :=’Ait Ammar’ ; //Ici on utilise directement le nom du champ IX. PROPRIETES DES COMPOSANTS ESSENTIELS :
Dans ce paragraphe, nous donnons quelques propriétés de trois composants, à savoir : le composant Table, le composant Datasource, et le composant DBNavigator.

Composant Table
Active DataBaseName Fieldefs Fields [i] IndexName MasterSource Modified ReadOnly RecordCount State TableName Indique si la table est ouverte ou non. Le fait de basculer Active à True ouvre la table est et équivalent à : Table1.Open Indique l'alias ou le chemin d'accès à la table Donne des renseignements sur les différents champs de la table. Permet d'accéder à un champ particulier par son indice (base 0). Spécifie un index secondaire. Celui-ci doit avoir été définit dans DBD. Utilisé dans le cas de tables liées. Indique si un champ de l'enregistrement courant a été modifié. Empêche l'utilisateur de modifier les données si elle est configurée à true. Indique le nombre d'enregistrements. Indique l'état courant de la table. Nom de la table avec laquelle le composant est lié.

Composant Datasource Active DataSet State Indique si le composant est actif ou nom. Indique le composant de gestion de données auquel TDataSource est connecté. Indique l'état du composant de gestion de donnée.

Composant DBNavigator Field [i] FixedColor Options Read Only Permet d'accéder au i° champ de la grille Spécifie la couleur de la grille Les nombreuses options permettent de modifier l'aspect de la grille Permet de déterminer si les données ne sont qu'affichées ou si l'on peut les modifier

Liens très recommandés:
www.developpez.com www.commentcamarche.com www.phidels.com www.borland.com www.delphi32.com

Enseignant : N. BOUCHAMA

Sign up to vote on this title
UsefulNot useful