Qu'est-ce que MyBase ? C'est un petit moteur de base de données mémoire dont les données peuvent être sauvegardées, soit au format XML, soit dans un format Binaire. Selon les spécifications annoncées, la limite de ces tables mémoire serait de 15000 enregistrements tout de même. En fait il n'y a pas de réelle limite de taille de fichier, hormis celle éventuellement imposée par l'OS, mais à partir de 15000 enregistrements les temps de réponses se dégradent trop pour être une solution acceptable. Mieux vaut donc réserver cette base de données à une utilisation limitées, elle ne remplacera jamais une vraie Base de données comme Firebird.

I - Mise en oeuvre de Mybase

Creation de la structure de notre table

Cette fonction se trouve incluse dans le composant TClientDataset de la palette "Accès aux données". Posons le sur un module de données (par exemple), double-cliquons dessus, la fenêtre contenant la liste des champs s'affiche, vide pour le moment. Appuyons sur la touche Inser, le dialogue de création de champs apparaît alors :
AjoutChamp.jpg Ajoutons donc trois champs : Nom, Prénom et EMail :
ChampEMail.jpg Il ne reste plus qu'à renommer le composant, à effectuer un click droit dessus, et à choisir l'option "Créer un ensemble de données" :
CreerEnsembleDonnees.jpg Voilà, nous avons indiqué à Delphi que ce ClientDataset serait une table Mybase.

Ajouter des données à notre table

Nous allons maintenant écrire une petite méthode pour ajouter des enregistrements à cette table :

 procedure TDataModule2.AjouterEnregistrement(Nom, Prenom, eMail: string);
 begin
   carnet.Open; //-> On ouvre la table
 
   carnet.Insert; //-> On indique qu'on va faire un ajout
   CarnetNom.Value    := Nom;      //
   CarnetPrenom.Value := Prenom;   //--> On affecte les données dans les champs
   CarnetEMail.Value  := eMail;   
 
   Carnet.Post; //--> et Enfin on Valide l'enregistrement
 end;

Revenons maintenant à notre formulaire, posons un bouton dessus et ajoutons ces 2 lignes dans son évennement OnClick :

 procedure TForm1.btnRemplirClick(Sender: TObject);
 begin
   DataModule2.AjouterEnregistrement( 'Kifoui', 'Yamamoto', 'yamamoto@kifoui.com');
   DataModule2.AjouterEnregistrement( 'Bertrand', 'Labevue', 'bertrand@labevue.com');
 end;

Voilà nous avons ajouté deux enregistrements à notre table MyBase. Notez qu'il aurait été préférable de faire une petit formulaire pour permettre à l'utilisateur d'ajouter lui même ses valeurs dans la table, mais là n'était pas le sujet de ce tutoriel.

Visualisons notre table

Tout cela est bien joli, mais comment pouvons nous voir le contenu de la table que nous venons de créer ?
Et bien le TClientDataset hérite de TDataset, il en a donc tous les comportements. Donc pour visualiser le contenu de notre table, rien de plus simple : Posons un TDataSource, relions le à notre Table MyBase. Puis ajoutons un TDBGrid et enfin un bouton. Sur l'évennement OnClick de ce bouton, ajoutons juste cette petite ligne de code :

 procedure TForm1.btnVoirClick(Sender: TObject);
 begin
   grdCarnet.DataSource := dsCarnet;
 end;

Voilà, c'est fait ! Executons notre application, cliquons sur le bouton Remplir, puis sur le bouton Voir, voici le résultat :

Resultat.jpg

Que se passe-t-il, mes données ne sont pas conservées ?

Aïe ! j'e viens de quitter l'application, et lorsque je la relance, les données ne sont plus là, qu'avons nous donc oublié ?
Pas de panique, comme nous l'avons vu au début le TClientDataset est une table mémoire, nous avons donc bien ajouté des enregistrements à notre table, mais dans son espace mémoire. Donc une fois l'application quittée cet espace est liberé et hop, plus de données dans notre table.
Il va donc nous falloir enregistrer ce que nous avons inséré. Pour cela rien de plus simple : posons un nouveau bouton Enregistrer, et ajoutons ce code dans son évennement OnClick :

 procedure TForm1.btnEnregistrerClick(Sender: TObject);
 begin
   with TSaveDialog.Create( Application) do
   begin
     try
       if Execute then
         DataModule2.Carnet.SaveToFile( FileName, dfXML);
     finally
       Free;
     end;
   end;
 end;

Le TClientDataSet a donc une méthode SaveToFile permettant de rendre persistantes les données de notre table. Dans l'exemple ci dessus, j'ai choisi le format XML car il est pratique et offre la possibilité d'être facilement visualisé dans n'importe quel bon éditeur, et même dans notre navigateur préféré. Mais il existe aussi un format binaire (dfBinary) qui est non lisible mais plus léger, donc plus rapide à charger en cas de volume important de données.
De même ce composant possède une propriété LoadFromFile qui permet de recharger le contenu du fichier dans la table mémoire.

Il ne nous reste plus qu'à déployer l'application

Rien de bien particulier pour cela, sinon qu'il faut penser à joindre la librairie Midas.dll avec notre projet. Voilà, c'est tout.

2 - Conclusion

Voilà un composant bien pratique qui peut servir dans bien des cas, mais il faut tout de même garder en tête qu'il faut le réserver à de petits volumes et lorsque nous ne voulons pas déployer un SGBD. Pour les détenteurs d'une version récente de Delphi (D2007 et supérieur), je pense qu'il sera même préférable d'utiliser blackfishSQL, ce dernier offrant la possibilité d'utiliser du SQL et étant performant avec des volumes de données plus importants.

Vous pouvez télécharger les sources du projet ici : Carnet.zip