Ensemble de données TDataSet et collection d'objets
Basé sur la classe TDataSet pour les composants ensemble de données, le composant TObjectDataSet (que vous pouvez télécharger à l'aide du lien de la rubrique Ressource), sert de conteneur d'objets en gérant des objets de même type au lieu d'enregistrements tout en offrant la persistance des objets dans un fichier.
L'intérêt d'un tel composant est de pouvoir utiliser normalement tous les contrôles orientés données de Delphi pour manipuler et modifier des objets au lieu d'enregistrements, tout comme on le ferait avec le composant TTable par exemple.

Voici la marche à suivre pour utiliser le composant TObjectDataSet avec Delph 5 :

1. Installer la bibliothèque de paquet PObjectDataSet.bpl à partir de la page 'Paquets' de la boîte de dialogue 'Options de projet' ; le composant TObjectDataSet est alors placé dans la page 'AccèsBD' de la palette d'outils de Delphi.

2. Déposer le composant TObjectDataSet sur une nouvelle fiche et affecter un nom de classe dans la propriété ObjectClass du composant ; à l'exécution le composant vérifiera qu'il existe bien une classe de ce nom recensée dans l'application par l'instruction RegisterClass ou RegisterClasses de l'unité Classes.
Cette classe doit obligatoirement être dérivée de la classe TPersistent ou de l'une de ses classes descendantes, et surcharger la méthode virtuelle Assign. L'implémentation de Assign doit définir comment assigner un objet du même type, en faisant intervenir en particulier les propriétés publiées qui sont utilisées avec les contrôles orientés données.
En effet, à l'exécution, le composant TObjectDataSet analyse la classe grâce à RTTI pour créer les champs correspondants aux propriétés publiées ; TObjectDataSet reconnaît les propriétés de type String (le champ créé est de type TStringField avec une taille de 255 caractères), entier et flottant. De la sorte, les contrôles orientés données connectés à l'ensemble de données peuvent utiliser les noms des propriétés pour la propriété DataField.
D'autre part pour bénéficier du support de la persistance des objets contenus dans une instance de TObjectDataSet avec un fichier, à l'aide des méthodes SaveToFile et LoadFromFile, la classe de base doit être TComponent.

3. Il ne reste plus qu'à déposer sur la fiche un composant TDataSource, pour le relier au composant TObjectDataSet, et des composants orientés données eux-mêmes connectés au TDataSource. Comme précisé plus haut, la propriété DataField d'un composant orienté données doit être le nom d'une propriété publiée de la classe gérée par l'objet TObjectDataSet.


Le composant TObjectDataSet offre aussi un accès orientée objet à ses éléments par un ensemble de méthodes dont voici la description :


property ObjectData[const Index: Integer]: TObject ; default ;

ObjectData est une propriété tableau qui, en lecture, permet d'obtenir l'objet d'indice Index, et, en écriture affecte l'entrée d'indice Index avec un nouvel objet (une vérification de type est effectuée); comme le composant possède toutes les instances qu'on lui ajoute, les objets sont libérés automatiquement, soit lorsqu'un objet est remplacé par un autre, soit lorsque le composant est libéré de la mémoire.
Si le composant TObjectDataSet de nom ObjODS gère des instances de la classe TTest, on accèdera au premier élément avec une instruction du type :
ObjTest := ObjODS[0] as TTest ; // ObjTest de type TTest


procedure Insert(Index: Integer; const Obj: TObject);

Cette procédure permet d'insérer un objet TTest à l'indice Index ; une vérification de type est effectuée.


function Add(Obj: TObject): Integer;

Cette fonction ajoute un objet TTest à la fin de la liste des objets et renvoie l'index auquel l'objet est placé.


procedure Delete(Index: Integer);

Supprime l'objet d'indice Index. L'objet de type TTest est libéré de la mémoire.


procedure LoadFromFile(const FileName: String);

Cette procédure et la suivante gère la sérialisation des objets du composant dans un fichier. Pour en bénéficier la class TTest doit être dérivée de TComponent ou de l'une de ses classes descendantes.


procedure SaveToFile(const FileName: String);


Ressource

Le fichier zip comporte le composant TObjectDataSet ainsi qu'un projet de démonstration pour Delphi 5.
tobjds.zip

Sommaire

Ressource

Début

Copyright © 2003 OBJECT-EVERYWHERE. Tous droits réservés | Bertrand Goetzmann