[Delphi] Faire et défaire dynamiquement une relation Maître-Détail

Faire et défaire dynamiquement une relation Maître-Détail [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 27-05-2002 à 11:19:31    

:hello: à tous
 
Voilà sous Delphi, j'établi dynamiquement une relation Maître-Détail comme ça :
 
   Tab_detail.MasterSource:=Dat_maitre;
   Tab_detail.MasterFields:= 'NUM';
 
Avec Tab_detail : DataSource:Dat_detail  
     Tad_maitre : DataSource:Dat_maitre, identifiant:NUM
 
Mon problème, c'est de détruire de façon dynamique cette relation dans Delphi :)  
 
Comment y faut faire :??:  
 
 :jap: de vos réponses

Reply

Marsh Posté le 27-05-2002 à 11:19:31   

Reply

Marsh Posté le 27-05-2002 à 11:32:39    

viiz a écrit a écrit :

Tab_detail.MasterFields:= '';
Tab_detail.MasterSource:=nil;  
 
Mé bon c'est peut etre pas ca...  




 
J'ai déjà essayé ça (en toute logique) mais il m'affiche un message d'erreur :(

 

[jfdsdjhfuetppo]--Message édité par Thander le 27-05-2002 à 11:33:10--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 27-05-2002 à 11:52:35    

Bon, ben finalement, ça marche avec ça, désolé pour le dérangement :D  
 
Tab_detail.MasterFields:= '';  
Tab_detail.MasterSource:=nil;  
 
Aujoud'hui ça marche alors que jeudi ça ne marchait pas, étrange :heink:  
 
 :jap: pour ton aide viiz

 

[jfdsdjhfuetppo]--Message édité par Thander le 27-05-2002 à 11:53:24--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 03-06-2002 à 13:27:48    

Toujours des problèmes :(  
 
Avec Tab_tva : DataSource:Dat_tva
     Tab_categorie : DataSource:Dat_categorie, identifiant:NUM  
 
 
 
procedure TFrm_categorie.FormCreate(Sender: TObject);
begin
   Tab_categorie.IndexName:= 'ILIB_CATEGORIE';
   Tab_tva.MasterSource:= Dat_categorie;
   Tab_tva.MasterFields:= 'NUM';
   Tab_tva.IndexFieldNames:= 'NUM_CATEGORIE;JOUR';    
end;
 
procedure TFrm_categorie.FormClose(Sender: TObject);
begin
   Tab_tva.MasterSource:=nil;
   Tab_tva.MasterFields:= '';
   Tab_tva.IndexFieldNames:= '';  
end;
 
La 1° fois que j'ouvre la Form, pas de problème ;)
Ensuite, je la ferme et je la ouvre à nouveau, et là gros message d'erreur "Field 'NUM' not found" :ouch:  
 
 
Par contre si j'essaie d'enlever la ligne Tab_tva.IndexFieldNames:= ''; et bien là ça marche :heink:  
 
C'est quoi ce truc :pt1cable:

Reply

Marsh Posté le 03-06-2002 à 15:05:22    

:bounce:

Reply

Marsh Posté le 03-06-2002 à 15:43:43    

Bon, ben j'ai trouvé tout seul :kaola:

Reply

Marsh Posté le 03-06-2002 à 17:10:02    

Le temps de tester si ça marche dans tous les cas ;)  
 
Je donne directement les procédures :
 
procedure SupprimerRMD(Table: TIBTable);
begin
   Table.Active:= False;
   Table.MasterSource:= nil;
   Table.MasterFields:= '';
   Table.IndexFieldNames:= '';
   Table.Active:= True;
end;
 
procedure CreerRMD(Table: TIBTable; MasterSource: TDataSource; MChamp: String; Index: String);
begin
   SupprimerRMD(Table);
   Table.Active:= False;
   Table.MasterSource:= MasterSource;
   Table.MasterFields:= MChamp;
   Table.IndexFieldNames:= Index;
   Table.Active:= True;
end;
 
 :sol:


Message édité par Thander le 06-03-2002 à 17:15:16
Reply

Marsh Posté le 03-06-2002 à 18:51:15    

Ok, j'aurai pu mettre des with (c'est pour antp :D )

Reply

Marsh Posté le 04-06-2002 à 12:31:39    

Version finale :
 
procedure SupprimerRMD(Table: TIBTable);
begin
   with Table do
   begin
      Active:= False;
      MasterSource:= nil;
      MasterFields:= '';
      IndexFieldNames:= '';
      Active:= True;
   end;
end;
 
procedure CreerRMD(Table: TIBTable; MSource: TDataSource; MChamp: String; Index: String);
begin
   SupprimerRMD(Table);
   with Table do
   begin
      Active:= False;
      MasterSource:= MSource;
      MasterFields:= MChamp;
      IndexFieldNames:= Index;
      Active:= True;
   end;
end;
 
 
 
 :non: A ne pas faire (je me suis fait avoir :D )
 
procedure CreerRMD(Table: TIBTable; MasterSource: TDataSource; MChamp: String; Index: String);  
begin  
   SupprimerRMD(Table);
   with Table do
   begin  
      Active:= False;  
      MasterSource:= MasterSource;  :gun:  
      MasterFields:= MChamp;  
      IndexFieldNames:= Index;  
      Active:= True;  
  end;
end;  
 
 
MasterSource:= MasterSource, là le compilateur fait i:=i, alors la procédure ne marche pas :non:  
Donc with attention :kaola:

Reply

Sujets relatifs:

Leave a Replay

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