fonction recursive

fonction recursive - C#/.NET managed - Programmation

Marsh Posté le 25-08-2005 à 17:02:20    

j utilise une fonction recursive mais ça marche pas
au debut la requete me renvoie 3 valeurs donc la fontion va s executer 3 fois mais ce n'est pas le cas elle ne s'execute que sur la premiere valeur et ainsi de suite tout au long de l execution  
en somme elle ne fait pas de marche arrière pour reprendre la suite de la fonction
 
public void WhereUsed(string pid){
string ma_requete;
listpid+="\n"+pid;
if(pid=="" ){  
    MessageBox.Show("vide" );
}else{
    gestionbd.InitConnection();
 ma_requete="select ParentPartid From partstructure where ChildPartId='"+pid+"'";
 BDR=gestionbd.ExecuterRequete(ma_requete);
 [#ff2a00]while(BDR.Read()){
     parentpid=cascading.TestBDNull(BDR.GetValue(0));         WhereUsed(parentpid);
 }
}
}[/#5500aa]

Reply

Marsh Posté le 25-08-2005 à 17:02:20   

Reply

Marsh Posté le 25-08-2005 à 20:45:54    

kausa a écrit :

j utilise une fonction recursive mais ça marche pas
au debut la requete me renvoie 3 valeurs donc la fontion va s executer 3 fois mais ce n'est pas le cas elle ne s'execute que sur la premiere valeur et ainsi de suite tout au long de l execution  
en somme elle ne fait pas de marche arrière pour reprendre la suite de la fonction
 
public void WhereUsed(string pid){
string ma_requete;
listpid+="\n"+pid;
if(pid=="" ){  
    MessageBox.Show("vide" );
}else{
    gestionbd.InitConnection();
 ma_requete="select ParentPartid From partstructure where ChildPartId='"+pid+"'";
 BDR=gestionbd.ExecuterRequete(ma_requete);
 [#ff2a00]while(BDR.Read()){
     parentpid=cascading.TestBDNull(BDR.GetValue(0));         WhereUsed(parentpid);
 }
}
}[/#5500aa]


 
 :ouch:  
 
 
c'est pas bien bô comme fonction recursive ça  
 

Code :
  1. public void WhereUsed(string pid)
  2. {
  3.   string ma_requete;
  4.   listpid+="\n"+pid;
  5.   if(pid=="" )
  6.   {
  7.     MessageBox.Show("vide" );
  8.   }
  9.   else
  10.   {
  11.     gestionbd.InitConnection();
  12.     ma_requete="select ParentPartid From partstructure where ChildPartId='"+pid+"'";
  13.     BDR=gestionbd.ExecuterRequete(ma_requete);
  14.     while(BDR.Read())
  15.     {
  16.     parentpid=cascading.TestBDNull(BDR.GetValue(0));         WhereUsed(parentpid);
  17.     }
  18.   }
  19. }


 
C'est deja un peu plus en forme :)
 
petites questions:
 

  • c'est quoi ce "casacading" ???

  • Quelle est la base de donnée ?

  • Quel est le DBType de "ChildPartId"


 
Petits conseils:
 

  • Organise mieux ton code ;)

  • stocke plutot des "pid" dans un arraylist membre de ta classe

  • Fait le Apres le test de condition de chaine vide (ou null... attention à ça)

  • Gere un try... catch... finally, c'est plus simple pour tracer une fonction recursive

  • Debug ton programme :)


Reply

Marsh Posté le 26-08-2005 à 09:13:15    

et met des commentaires ;)

Reply

Marsh Posté le 26-08-2005 à 09:45:38    

ouch  
coté bd c est tous bon pas de souci faut pas se focaliser sur ça  
le pb vient de la fonction récursive comme je l'ai déja dit elle revient pas en arrière?
j ai trouve une partie du pb le BDR je l 'ai déclare en variable global alors qu'il ne faut pas mais quand je le declare au niveau de la fonction il me genere l exception comme quoi le BDR il c est fermé  
voila si vous avez pas tres bien compris dites le moi et je vais essayer d etre plus claire

Reply

Marsh Posté le 01-09-2005 à 09:31:59    

BDR (on dirait un IDataReader) n'est pas déclaré en local ? a chaque passage dans ta méthode, le BDR de l'appelant est écrasé ?
si c'est le cas, ton while(BDR.Read()) sort directement apres la 1ere itération a chaque fois, ce qui explique que la méthode retourne directement a chaque fois.
sinon, si tu travailles avec SQLServer par exemple, il m'eusse semblé (corrigez moi si je me trompe) que seul un DataReader pouvait etre ouvert par connexion.


---------------
-( BlackGoddess )-
Reply

Sujets relatifs:

Leave a Replay

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