1. Ressources▲
Le fichier zip comporte le composant TObjectDataSet ainsi qu'un projet de démonstration pour Delphi 5.
L'article original
2. Détails▲
Voici la marche à suivre pour utiliser le composant TObjectDataSet avec Delphi 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é 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 classe TTest doit être dérivée de TComponent ou de l'une de ses classes descendantes.
procedure
SaveToFile(const
FileName: String
);