MyBase - Application CLX

Jean-Marc Carayon

Une application CLX orientée MyBase

À la sortie de Kylix une nouveauté est presque passée inaperçue : MyBase. Les essais de cet article ont été réalisés à parts égales avec Kylix et D6.
Certaines images notamment celle de la migration vers une base XML viennent de Delphi 6. Il est important de noter que grâce à la nouvelle CLX cette page est mixte et concerne aussi bien D6 que Kylix.

- Titre : MyBase - Application CLX

- Auteur : Jean-Marc Carayon

- Parution : 1 juin 2001

- Mise à jour : 24 décembre 2019

- Licence : Copyright ® 2005 Jean-Marc Carayon. 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

- I. My Base

- II. Création d'une base

- II-A. Création dans l'IDE directement

- II-B. Création par code

- III. Utilisation d'une base

- III-A. Comparaison avec Paradox en termes de performances

- IV. Migration Paradox ou DBase vers MyBase

- IV-A. Exemple de migration

- IV-B. Une fonction de conversion

- V. Conclusion

I - My Base

Mybase n'est pas à proprement parler une base de données, MyBase est l'appellation qui désigne l'utilisation des nouveaux composants qui permettent de simuler un comportement base de données tout en restant indépendant d'un SGBD externe. MyBase reconnaît et travaille avec des fichiers XML ou binaires. L'utilisation de MyBase permet de s'affranchir du déploiement d'un moteur de base de données. Mybase est de par nature très léger à déployer, rapide et compact. La version Windows nécessite simplement la redististribution d'une dll, « midas.dll », et « midas.so » sous Linux.

Ces caractérisques le désignent donc particulièrement pour une application monoposte légère ou une distribution sur le net. Et cerise sur le gâteau MyBase est portable Kylix/D6 ou inversement.

La conception d'une application utilisant MyBase s'articule principalement sur un composant : TClientDataSet.

Je vous propose d'aborder trois sujets concernant MyBase : la création d'une base, la comparaison de Paradox et de MyBase en termes de performances et enfin comment transporter vos bases de données vers MyBase et donc Linux.

II - Création d'une base

II-A - Création dans l'IDE directement

Clic droit ou double clic sur le TClientDataset et… une petite image valant mille mots :-)

Très simple et bien dans la lignée du TTable de Delphi, on crée les nouveaux champs, on précise leur type. Une fois la structure de la base faite, il suffit de la valider. Clic droit toujours sur le TClientDataSet et « créer un dataset ». Pour l'instant la base n'a pas encore d'existence physique, il faut au préalable, bien que cela puisse être fait par la suite, créer les index. Dans l'inspecteur d'objets, dans propriétés du TClientDataSet, cliquer sur les trois points de « IndexDefs », un nouvel éditeur toujours d'aspect familier apparait. Ici il suffit d'ajouter le nombre d'index souhaités, de les nommer et de spécifier pour chacun d'entre eux le champ (Fields) sur lequel ils portent. Éventuellement la propriété « Options » permet de spécifier certaines particularités portant sur la nature de l'index (primaire, unique, etc.).

Ici la structure la base est créée, il faut maintenant la sauvegarder physiquement. Toujours sur le TClientDataSet, clic droit et Enregister la base Mybase, XML ou CDS au choix. Remarque le format CDS assure une plus grande confidentialité de vos données et s'avère plus compact. Toutefois la compacité est relative, car en cas de transport au format ZIP, le résultat obtenu lors de la compression d'un même ensemble de données donne une taille identique, quel que soit le format de départ.

II-B - Création par code

Encore une fois la similitude avec Delphi est parfaite (ne pas oublier que cet article est initialement fait à partir de Kylix). Le code pourrait être celui-ci :

with ClientDataSet1 do
begin
with FieldDefs.AddFieldDef do
begin
Name := 'NOM_CHAMP1';
DataType := ftInteger;
end;
with FieldDefs.addFieldDef do
begin
Name := 'NOM_CHAMP2';
DataType := ftString;
Size := 10;
end;
CreateDataSet;
end;

// Sauvegarde de la base
ClientDataSet1.SaveToFile('PATH_DE_MA_BASE',dfXML);

III - Utilisation d'une base

III-A - Comparaison avec Paradox en termes de performances

Très simple, maintenant que nous avons créé une base, la méthode LoadFromFile, du TClientDadaSet permet de charger le fichier à l'exécution, et la propriété Filename autorise la même chose dans l'IDE. Ensuite tout se passe comme avec une TTable, il suffit de spécifier un index pour obtenir un ordre de tri. Les méthodes classiques First, Next, Prior fonctionnent, Locate aussi, mais la méthode SetRange/ApplyRange m'a semblé donner des résultats très rapides. Comme avec un TTable, mais en plus rapide encore.

Pour confirmer cette impression, j'ai créé une table Paradox et une table MyBase de 40 000 enregistrements, avec la même structure. Les index sont identiques et utilisés à parts égales. Les résultats sont donnés en millisecondes, le chiffre de gauche indiquant le meilleur temps, celui de droite le plus long. Premier test, SetRange aléatoire, un très léger avantage à MyBase. Ce qui est un très bon résultat quand on connait la vélocité de Paradox sur ce genre d'exercice. Dans le cas de locate l'écart se creuse et devient significatif toujours à l'avantage de MyBase.

SetRange

Locate simple

Locate [loPartialKey]

MyBase

Paradox

MyBase

Paradox

MyBase

Paradox

0 / 5

5 / 10

470 / 500

1345 / 1475

335 / 510

955 / 1420

À ces chiffres, il convient toutefois d'ajouter ceux-ci :

Open

IndexName := 'New_Index'

MyBase

Paradox

MyBase

Paradox

3740

480

1645

5

Paradox prend ici sa revanche, l'ouverture de la table, ou le changement d'index s'avère plus lourd avec MyBase.

IV - Migration Paradox ou DBase vers MyBase

IV-A - Exemple de migration

En fait MyBase possède bien des avantages par rapport à Paradox ou DBase. Ne serait-ce que la portabilité Linux. Par ailleurs, le couple TCLientDataSet/TDataSetProvider est d'une puissance et d'une souplesse d'utilisation incroyable, on peut tout faire avec (ou presque).

Le composant TCLientDataSet est utilisable aussi bien dans des développements d'applis BD locales, deux tiers, trois tiers et multitiers, c'est le composant base de données universel par excellence. Dans cet article seul l'aspect monoposte à travers MyBase est abordé.

Un exemple concret de migration de votre base Paradox vers Linux, pas de problème si ce n'est posséder Delphi 6 et Windows :-) C'est si simple que je n'ai rien à dire, tout est là.

L'image se passe de commentaires, le TTable charge les données, le DataSetProvider les récupère et les fournit au TClientDataSet, il suffit alors de sauvegarder au format XML. Ceci offre donc la possibilité de transporter toutes les bases accessibles via le BDE vers le format XML. Bien évidemment, il n'est pas nécessaire de faire ça dans l'IDE :-) L'affichage des données, donc les « DBGrid » et les « DataSource » ne sont là que pour l'exemple. Il est tout à fait possible de créer dynamiquement les composants sans rien afficher lors du changement de format, une simple procédure ou fonction devrait suffire à la tâche.

IV-B - Une fonction de conversion

function TForm1.DBF2XML(DBFFile,XMLFIle:String):boolean;
var Table:TTable;
DataSetProvider:TDataSetProvider;
ClientDataSet:TClientDataSet;
begin
Result:=true;
try
try
Table:=TTable.Create(self);
if FileExists(DBFFile) then
Table.TableName:=DBFFile
Table.Open;
{création de la Table et chargement du DBF}
try
DataSetProvider:=TDataSetProvider.Create(self);
DataSetProvider.DataSet:=Table;
{creation et paramètres du DataSetProvider}
try
ClientDataSet:=TClientDataSet.Create(Self);
ClientDataSet.SetProvider(DataSetProvider);
ClientDataSet.Open;
ClientDataset.SaveToFile(XMLFile,dfXML);
{Création paramétrage et sauvegarde du ClientDataset}
finally
ClientDataSet.Free;
end;
finally
DataSetProvider.Free;
end;
finally
Table.Free;
end;
except
Result:=false;
{une erreur s'est produite}
end;
end;

V - Conclusion

Cet article vous permettra de faire vos premiers pas avec MyBase ou du moins je l'espère vous en donnera l'envie :-)

Finalement, je pense que des formats comme DBase utilisés pour des raisons de légèreté et de compatibilité ont cette fois, trouvé un concurrent de taille. Aujourd'hui il est possible de distribuer une application sous deux plateformes différentes (Windows et Linux) en utilisant le même format de base de données et sans avoir à installer un quelconque moteur externe. Interbase et Mybase pourraient former le duo BD standard du développeur Delphi/Kylix.