Liste d'objets [Résolu]

okemobi 3 Messages postés mardi 29 juillet 2003Date d'inscription 10 décembre 2004 Dernière intervention - 8 déc. 2004 à 23:52 - Dernière réponse : okemobi 3 Messages postés mardi 29 juillet 2003Date d'inscription 10 décembre 2004 Dernière intervention
- 10 déc. 2004 à 23:10
Bonjour,

J'essaie de créer une liste d'objets avec une TList.
Hypothèses :
- J'ai une classe d'objet TMyClass avec ses propriétés et méthodes,
- j'ai une autre classe TMySuperClass qui outre ses propriétés et méthodes possède une propriété qui est en fait une liste de la première classe.

Voici comment se présente mon code :

TMySuperClass = class
...
MyList : TList;
...
end;

procedure TMySuperClass.LoadData();
var
MyClass : ^TMyClass;
begin
// Une requête quelconque hébergée dans une TQuery
MyQuery.Open;

// Je boucle sur tous mes enregistrements
// 1 enregistrement = 1 instance de MyClass
For nCount := 0 To MyQuery.RecorCount - 1 do
begin
New(MyClass);
MyClass.Prop1 := MyQuery.FieldValues[...];
MyClass.Prop2 := MyQuery.FieldValues[...];
...
MyClass.Propn := MyQuery.FieldValues[...];
MyList.Add(MyClass);
MyQuery.Next;
end;
end;

La bizarrerie que j'ai est que la première boucle s'effectue correctement mais dès que j'essaie de passer à l'enregistrement suivant, j'ai un message du type "Memory Access Violation". Cela se produit au moment du "Next".
Plus bizarre encore, si je veux faire l'affectation de ma dernière propriété avant celle d'une propriété précédente, alors j'ai le même message d'erreur.

Si quelqu'un a une idée, ce serait super sympa.

Merci par avance.

Free your mind ...
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 9 déc. 2004 à 00:36
3
Merci
Okemobi, tu n peux pas cacher que tu as fait du C avant de passer à Delphi, il en reste des séquelles :)

Evite d'utiliser New pour créer des objets et appelle le constructeur de la classe pour créer une instance. De même, n'utilises pas Dispose pour libérer les éléments de la liste mais appelle la méthode Free de chaque objet pointé par la liste.

procedure TMySuperClass.LoadData();
var
  //une variable de la classe TMyClass
  MyClass : TMyClass;
begin
// Une requête quelconque hébergée dans une TQuery
MyQuery.Open;

// Je boucle sur tous mes enregistrements
// 1 enregistrement = 1 instance de MyClass
For nCount := 0 To MyQuery.RecorCount - 1 do
begin
  //PAS DE NEW !
  MyClass := TMyClass.Create;
  MyClass.Prop1 := MyQuery.FieldValues[...];
  MyClass.Prop2 := MyQuery.FieldValues[...];
...
  MyClass.Propn := MyQuery.FieldValues[...];
  MyList.Add(MyClass);
  MyQuery.Next;
end;
end;


En plus, ton code sera compatible avec .Net !

Alors, faut pas hésiter.
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
Meilleure réponse
okemobi 3 Messages postés mardi 29 juillet 2003Date d'inscription 10 décembre 2004 Dernière intervention - 10 déc. 2004 à 23:10
3
Merci
Merci pour ton exemple de code.
Ca marche en plus !

Merci beaucoup.

Free your mind ...

Merci okemobi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de okemobi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.