Liste d'objets [Résolu]

Messages postés
3
Date d'inscription
mardi 29 juillet 2003
Dernière intervention
10 décembre 2004
- - Dernière réponse : okemobi
Messages postés
3
Date d'inscription
mardi 29 juillet 2003
Dernière intervention
10 décembre 2004
- 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
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

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

Merci beaucoup.

Free your mind ...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 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.