[Delphi] Copier Objet (Assign) ?

Copier Objet (Assign) ? [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 29-06-2005 à 10:13:09    

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 ?

Reply

Marsh Posté le 29-06-2005 à 10:13:09   

Reply

Marsh Posté le 29-06-2005 à 10:25:09    

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

Reply

Marsh Posté le 29-06-2005 à 10:28:20    

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

Reply

Marsh Posté le 29-06-2005 à 10:41:49    

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.

Reply

Marsh Posté le 29-06-2005 à 11:06:28    

ok merci pour l'aide :)

Reply

Marsh Posté le 29-06-2005 à 11:26:47    

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 :(

Reply

Marsh Posté le 29-06-2005 à 11:34:11    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed