Classe

csandrine Messages postés 8 Date d'inscription lundi 18 mars 2002 Statut Membre Dernière intervention 2 juin 2002 - 2 juin 2002 à 19:29
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 2 juin 2002 à 23:08
Je voudrais utiliser les classes pour insérer, modifier, supprimer et afficher les membres d'un carnet d'adresse.
J'ai une classe element dont dérivent les classes ami et entreprise.
J'ai définit ma classe personne:
type
personne=class
protected
numpers : integer;
cnom, cadresse, vcodepostal, cville, cteldom, cportable, cemail, vcommentaire : string;
public
constructor Create;
end;

procedure TForm1.bt_ajouterClick(Sender: TObject);
begin
varpers:=personne.Create;
Tbpers.Insert;
Tbpers.FieldByName('nom').AsString:=varpers.cnom;
Tbpers.FieldByName('adresse').AsString:=varpers.cadresse;
Tbpers.FieldByName('code postal').AsString:=varpers.vcodepostal;
Tbpers.FieldByName('ville').AsString:=varpers.cville;
Tbpers.FieldByName('teldomicile').AsString:=varpers.cteldom;
Tbpers.FieldByName('telportable').AsString:=varpers.cportable;
Tbpers.FieldByName('e-mail').AsString:=varpers.cemail;
Tbpers.Post;

ca ne mmarche pas du tout. J'ai un problème d'allocation de mémoire apparemment.

2 réponses

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
2 juin 2002 à 21:37
Il faudrait savoir si tu veux créer une classe ou juste un enregistrement.

Dans le cas d'une classe.
La définition est faite comme tu le fais. Et je suppose que "varpers" est du type "Personne".

Dans le cas d'un enregistrement la déclaration serait du type :
Type
Personne=Record
numpers : integer;
cnom, cadresse, vcodepostal, cville,cteldom,cportable, cemail, vcommentaire : string;
End;
"varpers" serait alors défini de la même manière :
Varpers:Personne;

Mais il y a une différence fondamentale entre les deux. En utilisant le type "class" la mémoire n'est pas définie. Donc un appel de VarPers.cnom provoque une erreur. Dans le cas du "Record" la mémoire utilisée par VarPers est réservée donc VarPers.cnom ne provoque pas d'erreur.

Pour ne pas créer d'erreur avec le type "Class" il faut réserver la mémoire avant toute chose :
VarPers:=Personne.Create;
Ensuite les valeurs peuvent être utilisées. Et il ne faut pas non plus oublier de librérer la mémoire quand le Varpers n'est plus utile :
VarPers.Free;

Je ne peut te dire lequel est le mieux pour ton appli car ça dépend de l'utilisation de VarPers. Mais si c'est juste une variable contenant un enregistrement pour un ajout à Tbpers, alors utilise le style "Record", c'est beaucoup plus simple à mettre en oeuvre.

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
2 juin 2002 à 23:08
Nono40 a absolument raison : il faut savoir ce que l'on veut.
Tu peux créer un objet métier en déclarant une classe. Mais si tu déclares les variables tu ne pourras pas y accéder à partir d'autres unités.
Secundo, une classe doit posséder des méthodes pour accèder aux champs car les autres n'ont pas à connaitre le fonctionnement intime de ta classe et c'est beaucoup plus sécurisé pour tes données stockées.
Vu le style d'écriture utilisé, je pense que tu devrais te pencher sur la création de composants pour bien comprendre la mécanique. Une fois que tu auras assimilé celà, tu verras que c'est facile à utiliser. Cet un petit investissement à faire, mais qui vaut le coût, crois-moi.
Fais des recherches sur "delphi Objet métier" ou "delphi business objects".
Si tu es pressé, alors emploies des types record.

PS : je te recommande le site de Frédéric BEAULIEU. Il y parle de la création d'objets métier (une dizaine de pages à lire).
C'est très bien fait.

May Delphi be with you.
Delphi advanced
0
Rejoignez-nous