begin process at 2012 02 09 23:56:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Delphi

 > 

Archives

 > 

J'AI BESOIN D'AIDE !!!! :O

 > 

classe


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

classe

dimanche 2 juin 2002 à 19:29:45 | classe

csandrine

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.
dimanche 2 juin 2002 à 21:37:23 | Re : classe

Nono40

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.

--- Nono du Moulin ---


-------------------------------
Réponse au message :
-------------------------------

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.

dimanche 2 juin 2002 à 23:08:23 | Re : classe

Delphiprog

Administrateur CodeS-SourceS
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


-------------------------------
Réponse au message :
-------------------------------

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.

--- Nono du Moulin ---


-------------------------------
Réponse au message :
-------------------------------

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.




Cette discussion est classée dans : classe, fieldbyname, asstring, tbpers, varpers


Répondre à ce message

Sujets en rapport avec ce message

violation d'accés [ par apz ] salut a tous,j'ai 3 tables paradox : TK, TF, TNreliées par la relations maitre-details (deux jointures ?)la table maitre est TKTF est TN sont les deux plain de questions [ par bassoumti ] Salut, Jai pas mal de questions à poser. 1/Est ce qu'on peut filtrer une dbgrid selon 2 champs simultanément ?si oui comment je peux le faire.< completer automatiquement certains champs d'une grosse TTable [ par juan ] bjour tous, j'ai 2 questions en fait: - j'ai une table remplie partiellement, mais je voudrais remplir certains champs qui sont associés à d'autres: p completer automatiquement certains champs d'une grosse TTable [ par juan ] bjour tous, j'ai 2 questions en fait: - j'ai une table remplie partiellement, mais je voudrais remplir certains champs qui sont associés à d'autres: p probleme d'enregistrement dans un table [ par maxell_64 ] salut a tous, Dans un projet , j'ai une table paradox qui reçoit divers information concernant des personnesDans la table sont declarer comme index - Pas de modification [ par cmoimeme ] Bonjour, J'ai crée un programme de gestion mais malheureusement j'ai un petit probleme pour la modification, elle ne modifie aucune donnée des champs Comment lié deux logique dans sur seul Tbutton [ par jennybless ] Salut tout le monde!C'est juste une question de curiosité que je pose cette question car je n'arrive pas à dissocier les deux modules que je tiens à f Création de Composant (asstring) [ par kinay ] Bonjour,j'ai créé un composant d'accès à une base MySQL, et j'ai écris une fonction 'fieldbyname('Nom du champ')'. Mais Celle-ci est toujours du type Pomper des données sur des Edits à partir d'une ligne selectionnée d'un DbGrig [ par Lunasoft ] Salut! <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /? Mon Timage est-il malade? Que faire? [ par leader2000 ] Mes grandes salutations à Tous! J'ai une question. Mais curieusement, j'ai comme l'impression que cette question a été posée dans ce forum il y a de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,434 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales