Delphi 6 et InterBase 6

Henry Cesbron Lavau

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

- Titre : Delphi 6 et InterBase 6

- Auteur : Henry Cesbron Lavau

- Parution : 8 mai 2001

- Licence : Copyright ® 2013 Henry Cesbron Lavau. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.

Sommaire

- 1. Introduction

- 2. InterBase

- 3. Ce qu'il vous faut

- 4. Création d'une database

- 5. Création d'une table

- 6. Affichage et modification d'une table

- 7. Pour aller plus loin

1. Introduction

Avec l'arrivée de Delphi 6, le développement d'application de base de données InterBase n'a jamais été aussi facile.
Dans Ma première base InterBase nous avions utilisé abondamment le SQL.
Ici nous allons développer une base simple en utilisant au maximum le nouvel IDE (Environnement de Développement Intégré) de Delphi 6.

2. InterBase

Aujourd'hui, InterBase est soutenue d'une part au sein de Source Forge® ou d'IBPhoenix, d'autre part par Borland. La version certifiée Borland et la version en Open Source sont la 6.01. La présence simultanée d'un groupe d'initiatives Open Source et d'un acteur commercial est le meilleur modèle de développement d'un progiciel. Loin de s'opposer, ils s'appuient l'un sur l'autre et se renforcent. (C'est d'ailleurs le modèle de Linux).

En résumé InterBase

- vous permet sortir du BDE et de passer au client/serveur ;

- est supporté par Borland ;

- existe également en Open Source ;

- est une base de données puissante, fiable et facile à installer et à déployer.

3. Ce qu'il vous faut

- Delphi 6 Pro ou Entreprise.

- Delphi 6 et InterBase 6 sur CD avec la Documentation sont aussi disponible auprès du Centre Officiel de Borland : Diffus'Log - Tél. : 01 34 63 07 01.

4. Création d'une database

Avec InterBase, toutes les tables, tous les index et autres éléments sont rassemblés en un seul fichier database dont l'extension usuelle est .gdb. Vous pouvez créer autant de databases que vous le souhaitez. Généralement un programme accédera à une database dans laquelle se trouvent les tables et les index liés.

- 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.

- Par Fichier/Nouveau/Module de données, ajoutez un module de données.

- Renommez DataModule2 en DataModule1.

- Sauvegardez en appelant Unit1 : UnitForm, Unit2 : UnitDataModule, Project2 : IB6Delphi6.

- Ouvrez IB6Delphi6, et placez la création du DataModule avant celle de la Form :

program IB6Delphi6;

uses QForms,

UnitForm in 'UnitForm.pas' {Form1},

UnitDataModule in 'UnitDataModule.pas' {DataModule1: TDataModule};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TDataModule1, DataModule1);

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

- À partir de l'onglet InterBase de la palette, placez sur le DataModule :

- un IBDatabase et

- un IBTransaction.

Cliquez droit dessus, et dans le Database Editor, modifiez les propriétés suivantes :

Composant

Propriété

Valeur

IBDatabase1

DatabaseName

MaDatabase.gdb

IBDatabase1

LoginPrompt

False

IBDatabase1

SQLDialect

3

IBDatabase1

DefaultTransaction

IBTransaction1

IBTransaction1

DefaultDatabase

IBDatabase1

Sur IBTransaction1, cliquez droit, et ouvrez le Transaction Editor. Choisissez l'option read commited.

Créez la procédure privée suivante :

procedure TDataModule1.IBDatabase1Open;

begin

try

IBDatabase1.Params.Text := 'user_name=SYSDBA'#13

+ 'password=masterkey';

IBDatabase1.Open;

except

IBDatabase1.Params.Text := 'user ''SYSDBA'''#13

+ 'password ''masterkey'''#13

+ 'page_size 4096';

IBDatabase1.CreateDatabase;

end;

IBTransaction1.Active := True;

end;

À l'exécution (n'exécutez pas maintenant) cette procédure ouvrira la base.
Mais si la base n'est pas trouvée, l'erreur est dirigée en except.
(Il est évident que la source d'erreur pourrait être autre que l'absence de base. Par simplicité nous en restons là.)

Note : Ne soyez pas surpris de la différence de syntaxe de Params entre Open et CreateDatabase : dans le premier cas, Params est analysé par les IBX, dans le second, la chaîne Params.Text est envoyée telle quelle ajoutée à l'ordre SQL 'CREATE DATABASE'. C'est pourquoi j'ai mis ceci dans le code plutôt que d'utiliser le Database Editor auquel le menu contextuel de IBDatabase1 donne accès.

5. Création d'une table

Nous allons maintenant ajouter trois autres composants sur le DataModule :

- un IBTable ;

- un IBClientDataSet ;

- un DataSource (onglet DataAccess) qui fera le lien avec le ClientDataSet.

Notre objectif sera d'utiliser l'IBClientDataSet qui permettra ultérieurement de bâtir une application multitiers.
Mais au démarrage, pour créer la table, c'est le composant IBTable qui sera sollicité.

Modifiez les objets selon le tableau suivant :

Objet

Propriété

Valeur

IBTable1

Name

IBTableNoms

IBTableNoms

Database

IBDatabase1

IBTableNoms

TableName

NOMS (1) Ignorez les messages la base est fermée

IBTableNoms

FieldDefs

cliquez sur ... et tapez trois fois sur la touche Ins

Modifier les noms des champs ainsi que leurs propriétés :

IBTableNomsField1

Name

PK_NOMS (1)

PK_NOMS

DataType

ftInteger

PK_NOMS

Attributes

[faRequired]

NOM

DataType

ftString

NOM

Size

30

TELEPHONE

DataType

ftString (taille par défaut : 20)

(1) Vous devez bien entrer le TableName et les Name en MAJUSCULES, pour qu'ils soient bien reconnus.

Tip : Pour passer facilement d'un objet à l'autre, si la fenêtre IBTableNoms.FieldDefs n'est pas visible, utilisez l'Object TreeView, une nouveauté de Delphi 6 très pratique.

Note : Attention à ne pas utiliser le Fields Editor du menu contextuel de IBTableNoms.
En effet, celui-ci ne permet pas d'indiquer les clés ni de modifier les types.
De même, ne vous avisez pas de modifier Name ou TableName de la table une fois les définitions saisies : vous perdriez tout.
Si vous devez le faire, inscrivez-le (en MAJUSCULES) directement dans le fichier .xfm qui s'obtient par [Alt+F12].
(Cet article a été écrit à partir de la version bêta de Delphi 6.)

Après avoir bien vérifié qu'aucun DataType n'est resté à ftUnknown, nous allons préciser les clés.
Par l'object TreeView, activez IBTableNoms, et dans l'inspecteur d'objet, cliquez sur les … de IndexDefs.
Faites Ins et modifiez les propriétés suivantes :

Objet

Propriété

Valeur

Pk_Noms

Fields

Pk_Noms

Pk_Noms

Option

ixPrimary

Nous avons donc paramétré IBTableNoms qui servira à la création de la table grâce à la méthode IBTableNoms.CreateTable.
Mais pour afficher et modifier les données, nous utiliserons un IBClientDataSet. En effet, ce composant est beaucoup mieux adapté pour cela.
Et surtout, il est la première pierre d'une application multitiers.

Terminons le module de données en modifiant les propriétés des composants IBClientDataSetet et DataSource1

Objet

Propriété

Valeur

IBClientDataSet1

Name

IBClientDataSetNoms

IBClientDataSetNoms

Command Text

select * from NOMS

IBClientDataSetNoms

DBTransaction

IBTransaction1

DataSource1

Name

DataSourceNoms

DataSourceNoms

DataSet

IBClientDataSetNoms

et en insérant la méthode publique IBClientDataSetNomsOpen.

procedure TDataModule1.IBClientDataSetNomsOpen;

begin

try

IBClientDataSetNoms.Open;

except

IBTable1.CreateTable;

IBTransaction1.CommitRetaining;

IBClientDataSetNoms.Open;

end;

end;

Enfin, 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 IBClientDataSetNomsBeforeOpen :

procedure TDataModule1.IBClientDataSetNomsBeforeOpen(DataSet: TDataSet);

begin

if not IBDatabase1.Connected then IBDatabase1Open;

end;

Voilà, nous en avons fini avec le DataModule.

6. Affichage et modification d'une table

Reste 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 ;

- un bouton de confirmation des modifications ;

- un bouton d'annulation des modifications.

et modifions les propriétés :

Objet

Propriété

Valeur

Form1

Name

FormNoms

DBGrid1

Name

DBGridNoms

DBGridNoms

DataSource

DataSourceNoms

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 :

procedure TFormNoms.FormShow(Sender: TObject);

begin

DataModule1.IBClientDataSetNomsOpen;

end;

procedure TFormNoms.ButtonApplyUpdatesClick(Sender: TObject);

begin

DataModule1.IBClientDataSetNoms.ApplyUpdates(-1);

end;

procedure TFormNoms.ButtonCancelUpdatesClick(Sender: TObject);

begin

DataModule1.IBClientDataSetNoms.CancelUpdates;

end;

Il ne reste plus qu'à compiler par [Ctrl+F9]. (Ne pas exécuter par F9.)

Nous exécutons maintenant hors de l'IDE (pour que les try except remplissent leur fonction sans envoyer de messages d'erreur).

1. La base MADATABASE.GDB se crée.

2. La table NOMS se crée.

3. La grille affiche les colonnes.

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].

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

Votre premier programme InterBase est prêt.

Et sans une seule ligne de SQL (pour être exact, une ligne pour définir la Commande du ClientDataSet).

7. Pour aller plus loin

- Pour ne pas entrer la clé primaire Pk_Noms à la main, utilisez des compteurs autoincrémentés : lisez Gérez les Compteurs Auto-Incrémentés avec InterBase par Sylvain James et Kloo (Pascal Barnouin).

- Consultez la documentation (en anglais) livrée avec InterBase 6.0.

- Consultez les forums Delphi ainsi que Delphi et bases de données de www.developpez.com.

- Abonnez-vous au news group InterBase (en français) (news://news.vienneinfo.org/nzn.fr.interbase).

- Lisez les articles :

- dbExpress avec Delphi 6 ;

- Base de données relationnelle avec Delphi 6 ;

- Application multitiers avec Delphi 6 (à venir).

Interbase

Ma première base InterBase

Delphi 6 et InterBase 6

dbExpress avec Delphi 6

Delphi 6 Relationnel

Le bon PLAN d'InterBase

MDA (Model Driven Architecture)

MDA

Programmez avec les diagrammes de Delphi 7

Les objets métiers avec ModelMaker de Delphi 7

Les Design Patterns avec ModelMaker de Delphi 7

Autres articles

Les transactions

Mise à jour de Delphi 6