Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2849 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] Copier Objet (Assign) ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Delphi] Copier Objet (Assign) ?

n°1134423
flam182
Posté le 29-06-2005 à 10:13:09  profilanswer
 

Bonjour j'ai un objet Utilisateur contenant une 50aine de champs,
 
j'aimerais pouvoir copier cette objet, a priori c la méthode 'assign'
qui s'en occupe, mais lorsque je l'utilise

Code :
  1. monUtil := TUtilisateur.Create;
  2. monUtil.Assign(dmMain.monUtilisateur);


j'ai l'erreur : 'impossible d'affecter TUtilisateur à TUtilisateur'
 
quelqun peut m'aider ?

mood
Publicité
Posté le 29-06-2005 à 10:13:09  profilanswer
 

n°1134439
Olyv
Posté le 29-06-2005 à 10:25:09  profilanswer
 

il faut que dans ton objet TUtilisateur tu surcharges la procédure AssignTo (de Tpersistent).

n°1134445
flam182
Posté le 29-06-2005 à 10:28:20  profilanswer
 

donc je suis obligé de faire manuellement la copie des champs ?

n°1134461
Olyv
Posté le 29-06-2005 à 10:41:49  profilanswer
 

en quelque sorte oui.
perso j'utilise énormément cette méthode.
Pour chaque objet que je créé, je dérive la procédure AssignTo dans 90% des cas.

n°1134482
flam182
Posté le 29-06-2005 à 11:06:28  profilanswer
 

ok merci pour l'aide :)

n°1134510
flam182
Posté le 29-06-2005 à 11:26:47  profilanswer
 

Bon j'y arrive pas (oui je débute :() :
 
ds ma classe Utilisateur j'ai déclaré en public :

Code :
  1. procedure AssignTo(Source: TPersistent);override;


et implémenter

Code :
  1. procedure TUtilisateur.AssignTo(Source: TPersistent);
  2. begin
  3.   inherited AssignTo(Source);
  4.   self.Fnom := (Source as TUtilisateur).nom;
  5. end;


et ca plante sur le inherited, et sans, ca plante également sur l'affectation :(

n°1134523
Olyv
Posté le 29-06-2005 à 11:34:11  profilanswer
 

si tu as delphi pro, regarde le code de TPersistent.AssignTo, tu verras qu'en fait il lance la fameuse exception.
 

Code :
  1. procedure TPersistent.AssignTo(Dest: TPersistent);
  2. begin
  3.   Dest.AssignError(Self);
  4. end;
  5. procedure TPersistent.AssignError(Source: TPersistent);
  6. var
  7.   SourceName: string;
  8. begin
  9.   if Source <> nil then
  10.     SourceName := Source.ClassName else
  11.     SourceName := 'nil';
  12.   raise EConvertError.CreateResFmt(@SAssignError, [SourceName, ClassName]);
  13. end;
  14. procedure TPersistent.Assign(Source: TPersistent);
  15. begin
  16.   if Source <> nil then Source.AssignTo(Self) else AssignError(nil);
  17. end;


 
Dans l'utilisation du AssignTo, il ne faut donc pas faire de inherited sauf si tu t'apercois que ton objet n'est pas copiable ex: tu copies un TUtilisateur dans un TOrdinateur


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] Copier Objet (Assign) ?

 

Sujets relatifs
script php ôur copier contenuConception orienté objet autour d'une BD
problème d'objetMéthode click(); sur un objet input : IE OK, mais MOZ NOK ?
insere un objet dans un Fichier RFTDelphi - Heritage et TForm
Drag impossible sur un objet créé dynamiquement ?Transformer mon code PHP en PHP Objet
Exécuter une méthode d'un objet dans un Thread[Delphi] Instruction à la fermeture d'un Active X
Plus de sujets relatifs à : [Delphi] Copier Objet (Assign) ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR