dbExpress avec Delphi 6

Cette page a pour but de vous aider à construire votre première application dbExpress avec Delphi 6. Suivez les commandes et captures d'écrans.

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Avec l'arrivée de Delphi 6, le développement d'applications de bases de données n'a jamais été aussi facile. Dans Delphi 6 et Interbase 6, nous avons construit une base simple en nous appuyant sur les composants InterBase. Sur la base existante, nous allons poursuivre les objectifs suivants :

  • rendre l'application portable sous différents environnements ;
  • rendre l'application portable sur différentes bases ;
  • préparer le développement multitiers (ou multiniveau).

La portabilité du développement Windows vers Linux est un choix qui avait déjà été fait dans Delphi 6 et Interbase 6 : partant d'Application CLX et utilisant les IBX, nous nous appuyions bien sur des classes présentes dans Kylix. Ici, nous remplacerons les IBX par dbExpress également présent dans Kylix.

Grâce à dbExpress, l'application devient portable sur différentes bases. Nous pourrons en effet nous connecter à :

  • DB2 ;
  • InterBase ;
  • MySQL ;
  • Oracle,

en modifiant simplement les propriétés de l'objet de connexion. Ci-dessous, nous nous connecterons à InterBase, mais il serait très facile d'appliquer notre application aux autres bases indiquées.

Bien que certains composants de dbExpress en regroupent d'autres, nous prendrons les composants élémentaires : d'une part, c'est plus instructif et d'autre part, cela permettra par la suite une séparation articulable des différents niveaux.

II. Ce qu'il vous faut

Delphi 6 et InterBase 6 sur CD avec la Documentation sont aussi disponibles auprès du Centre Officiel de Borland : Diffus'Log - Tél : 01 34 63 07 01.
Il vous faut aussi le fichier MaDatabase.gdb résultant de l'application développée dans Delphi 6 et InterBase 6.
Note : la création de tables à travers l'IDE comme dans Delphi 6 et InterBase 6 ou par CREATE TABLE est une affaire de goût. Ceux qui préfèrent CREATE TABLE, peuvent s'inspirer de Ma première base InterBase et lancer l'ordre suivant (qui n'est volontairement pas formaté pour permettre un copier/coller dans l'Interactive SQL d'IBConsole) :

 
Sélectionnez
CREATE TABLE "NOMS" ( "PK_NOMS" INTEGER NOT NULL, "NOM" VARCHAR(30),
"TELEPHONE" VARCHAR(20), CONSTRAINT "PK_NOMS" PRIMARY KEY ("PK_NOMS") );

III. Les étapes de la connexion

Les composants dbExpress ont pour but de gérer le flux des données de la base de données à l'interface utilisateur, et vice-versa.

Par Fichier/Nouveau/CLX Application créez un projet.
Vous pouvez aussi faire Nouveau/Application.
L'intérêt de CLX Application est de faciliter par la suite le portage vers Kylix.

  1. Pour Fichier/Nouveau/Module de données, ajoutez un module de données.
  2. Renommez DataModule2 en DataModule1.
  3. Sauvegardez en appelant Unit1 : UnitForm, Unit2 : UnitDataModule, Project2 : dbExpressDelphi6.
  4. Ouvrez dbExpressDelphi6, et placez la création du DataModule avant celle de la Form.

Le scénario de liaison commence par un SQLConnection et se termine par le DataSource.

À partir de la palette, placez sur le DataModule :

  • un SQLConnection (onglet dbExpress) ;
  • un DataSource (onglet DataAccess).
Image non disponible

Cliquez droit sur SQLConnection1, et dans l'Éditeur des propriétés de connexion, choisissez IBLocal.

Dans la colonne de droite, modifiez les propriétés suivantes :

Propriété

Valeur

Database

MaDatabase.gdb

SQLDialect

3

Cliquez sur OK. Dans l'inspecteur d'objets, vous pouvez également modifier :

Composant

Propriété

Valeur

SQLConnection1

LoginPrompt

False

DataSource1

Name

DataSourceNoms

Pouvons-nous connecter DataSourceNoms à SQLConnection1 ?
Pas encore, car il manque l'espace mémoire dans lequel vont transiter les données appelées un DataSet.

Nous ajoutons donc un SQLDataSet.

Composant

Propriété

Valeur

SQLDataSet1

Name

SQLDataSetNoms

SQLDataSetNoms

SQLConnection

SQLConnection1

SQLDataSetNoms

CommandText

select * from NOMS

Image non disponible

Maintenant, DataSourceNoms accepte de se connecter à SQLDataSetNoms, comme on peut le voir dans la propriété DataSet de DataSourceNoms. Mais Attention. Si nous procédons ainsi, nous obtenons un curseur unidirectionnel, et nous ne pourrons pas connecter par exemple uneDBGrid à DataSourceNoms. En effet, la DBGrid envoie des demandes de déplacements bidirectionnelles ; de plus, la DBGrid peut permettre d'ajouter, de modifier ou de supprimer des rangées du DataSet. Le SQLDataSet ne permet pas cela : il lit les données du début à la fin. Un point c'est tout.

La magie de dbExpress est de permettre très simplement de rendre le curseur bidirectionnel et éditable.

Pour cela, ajoutons au DataModule, à partir de l'onglet dbExpress :

  • un DataSetProvider ;
  • un ClientDataSet,

et modifions les propriétés suivantes :

Composant

Propriété

Valeur

DataSetProvider1

Name

DataSetProviderNoms

DataSetProviderNoms

DataSet

SQLDataSetNoms

ClientDataSet1

Name

ClientDataSetNoms

ClientDataSetNoms

ProviderName

DataSetProviderNoms

DataSourceNoms

DataSet

ClientDataSetNoms

Vous avez bien noté que le DataSourceNoms est maintenant connecté, non plus directement au SQLDataSetNoms, mais au ClientDataSetNoms.

Ce faisant, il a gagné les deux propriétés que nous recherchions : la bidirectionnalité et les possibilités de modifications.

Et ceci, sans écrire une seule ligne de code : Merci Borland, c'est tout simplement génial !

Image non disponible
Image non disponible

Mettons les ordres de connexion :

 
Sélectionnez
procedure TDataModule1.SQLConnection1Connect;
begin
  SQLConnection1.Connected := True;
end;

procedure TDataModule1.ClientDataSetNomsOpen;
begin
  ClientDataSetNoms.Open;
end;

et pour s'assurer que la Database elle-même est ouverte au moment de l'ouverture du ClientDataSet, nous en faisons la vérification dans l'événement ClientDataSetNomsBeforeOpen :

 
Sélectionnez
procedure TDataModule1.ClientDataSetNomsBeforeOpen(DataSet: TDataSet);
begin
    if not SQLConnection1.Connected then SQLConnection1Connect;
end;

IV. Affichage et modification d'une table

Pour l'UI (User Interface ou Interface Utilisateur), allons sur UnitForm, et connectons le DataModule en ajoutant aux clauses uses UnitDataModule

Nous plaçons sur la forme :

  • une DBGrid (onglet Data Controls) qui présentera les données ;
  • le bouton de confirmation des modifications ;
  • et le bouton d'annulation des modifications.

Modifions les propriétés :

Composant

Propriété

Valeur

Form1

Name

FormNoms

DBGrid1

Name

DBGridNoms

Button1

Name

ButtonApplyUpdates

ButtonApplyUpdates

Caption

Sauvegarder les modifications

Button2

Name

ButtonCancelUpdates

ButtonCancelUpdates

Caption

Annuler les modifications

Enfin, nous ouvrons l'accès à la table à l'affichage de la forme et activons les événements OnClick des deux boutons :

 
Sélectionnez
procedure TFormNoms.FormShow(Sender: TObject);
begin
    DBGridNoms.DataSource := DataModule1.DataSourceNoms;
    DataModule1.ClientDataSetNomsOpen;
end;

procedure TFormNoms.ButtonApplyUpdatesClick(Sender: TObject);
begin
    DataModule1.ClientDataSetNoms.ApplyUpdates(-1);
end;

procedure TFormNoms.ButtonCancelUpdatesClick(Sender: TObject);
begin
    DataModule1.ClientDataSetNoms.CancelUpdates;
end;

Il ne reste plus qu'à compiler, exécuter par [F9].

Il suffit de saisir.

Tip : la saisie ne fonctionne que si avant de commencer à saisir on clique une fois sur Sauvegarder les modifications.
Pour ajouter une rangée, faites [Flèche bas].

Image non disponible

Cliquez sur Sauvegarder les modifications avant de sortir de l'application.

Votre premier programme dbExpress est prêt.

V. Pour aller plus loin

  1. Consultez les forums Delphi ainsi que Delphi et bases de données de www.developpez.com
  2. Abonnez-vous au news group Base de données (en français) (news://news.vienneinfo.org/nzn.fr.base-de-donnees).
  3. Lisez l'article suivant : Base de données relationnelles avec Delphi 6.

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

  

Copyright © 2001 Henry Cesbron Lavau. 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.