begin process at 2010 02 10 06:23:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Delphi

 > 

Archives

 > 

Bases de données

 > 

Recursivite


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

Recursivite

mardi 27 décembre 2005 à 13:11:23 | Recursivite

redrad

Bonjour

Voici mon problème

Sur un programme Vba Access j'utilise une fonction récursive que voici qui fonctionne très bien  :

Function Nomenclature(Article As String, Rang As Long, Variante As String)

Set Db = CurrentDb
Sql = "SELECT * FROM Nomenclature" & " WHERE [Article]='" & Article & "' " & "AND [Variante]='" & Variante & "' ORDER BY [Composant]"
Set Rs = Db.OpenRecordset(Sql)

With Rs
    If .RecordCount > 0 Then
      .MoveFirst
      Do While Not .EOF
        MsgBox .Fields("Composant")
        Call Nomenclature(.Fields("Composant"), Rang + 1, .Fields("Variante_Comp"))
        .MoveNext
      Loop
    End If
    .Close
  End With
  Rang = Rang - 1

End Function

j'ai traduit cette même fonction en delphi
que voici :

Procedure Nomenclature (Article : String ; Rang : Integer ; Variante : String)  ;

begin


   Sql :='Select * From Nomenclature Where [Article]=' +
   QuotedStr(Article) + ' And [Variante]=' + QuotedStr(Variante) + ' ORDER BY [Composant]';
   Rs:=CoRecordset.Create
   RS.Open(Sql, Cnx, adOpenStatic, adLockOptimistic, adCmdText );

   With RS do Begin
      if (RecordCount > 0) then begin
         MoveFirst;
        While Not EOF DO Begin
           Showmessage (Fields['Composant'].Value + '///'+ Article);
            Nomenclature(Fields['Composant'].Value, Rang + 1,Fields['Variante_Comp'].Value) ;
           MoveNext;
         end ;
      end ;
      Close ;
   end ;
     Rang:=Rang - 1

end ;


mais le problème c'est que elle ne fonctionne pas de la même façon au niveau du recordset  
redrad
mercredi 28 décembre 2005 à 17:19:28 | Re : Recursivite

f0xi

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
pourrait tu nous preciser de quelle façon elle ne fonctionne pas ?

resultat erroné ?
erreur de compilation ?
erreur d'execution ?
debordement de memoire ?




La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.

mercredi 28 décembre 2005 à 21:15:26 | Re : Recursivite
mercredi 28 décembre 2005 à 21:24:09 | Re : Recursivite

redrad



Procedure Nomenclature (Article : String ; Rang : Integer ; Variante : String)  ;

begin


   Sql :='Select * From Nomenclature Where [Article]=' +
   QuotedStr(Article) + ' And [Variante]=' + QuotedStr(Variante) + ' ORDER BY [Composant]';
   Rs:=CoRecordset.Create
   RS.Open(Sql, Cnx, adOpenStatic, adLockOptimistic, adCmdText );

   With RS do Begin
      if (RecordCount > 0) then begin
         MoveFirst;
        While Not EOF DO Begin       
            Nomenclature(Fields['Composant'].Value, Rang + 1,Fields['Variante_Comp'].Value) ;

//LE PROBLEME SE TROUVE ICI SUR LE MOVENEXT
//IL M'EST IMPOSSIBLE DE PASSER A L'ENREGISTREMENT
//SUIVANT CAR LE RECORDSET EST FERMER
//ALORS QU'EN VB JE POUVAIS PASSER A L'ENREGISTREMENT SUIVANT UNE FOIS LA PREMIERE RECURSIVITE FINI
           MoveNext;
         end ;
      end ;
      Close ;
   end ;
     Rang:=Rang - 1

end ;


j'espère avoir était clair

Merci
jeudi 29 décembre 2005 à 04:18:00 | Re : Recursivite

f0xi

Membre Club Administrateur CodeS-SourceS
deja je pense que tu ne devrais pas créer RS dans ta procedure ... cela semble illogique et peu posé probleme avec la recursivitée.

a moins de faire un truc genre :

if RS = nil then RS := CoRecordSet.Create;


a part cela ... tout a l'air bon j'ai l'impression.





La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.

jeudi 29 décembre 2005 à 10:22:39 | Re : Recursivite

redrad

j'ai essayé est toujours le même problème
Ma base de donnée est une Nomenclature voici un exmple
//Structure de ma base de donnée
Champ Composé     Champ Composant
15-811655         501-811655
15-811655         502-811655
501-811655        0043-0010
501-811655        0044-0010
502-811655        0040-0050


//Le résultat que je veux obtenir est celui ci :
Rang   Article
1      15-811655
2      501-811655
  3      0043-0010
  3      0044-0010
2      502-811655
  3      0040-0050


Merci d'avance


Cette discussion est classée dans : end, article, rang, variante, nomenclature


Répondre à ce message

Sujets en rapport avec ce message

probleme dans mon programme [ par tarik ] monsieur kerad je crois que j'ai un bug dans mon programme ci-dessousprocedure TForm1.Button1Click(Sender: TObject);begintable1.open;try Table1.First urgent : code à corriger. Cela fait des jours que je suis dessus !!!!!! [ par Marcel ] Le code qui suit sert à créer un compte à rebours. Les 2 dernières lignes de ce code sont incorrecte car le compilateur signale:[Erreur]Unit1.pas(56): Erreur: Declaration forward ... [ par Lénaïc ] Avec le code ci-dessous j'ai une erreur "Déclaration forward ou external non satisfaite: 'TFrm_Perso.ComboAddFile'".Je n'arrive pas à trouver l'erreur Pb sur une classe pile [ par ninuko ] Aider moi, au secour!!!! URGENT!!!!!unit UntClasPile; { UntClasPile porteuse de la Classe pile Cette classe permet de : raise Exception.Create : gérer les exceptions ? [ par manudel ] Voilà je ne sais pas comment "catcher" une exception.L'exception se déclenche, et à mon avis remonte au niveau le plus haut, en cherchant un gestionna Datamodule et accès à partir d'une form [ par manudel ] Voilà, je voudrais avoir accès aux événements des objets figurant sur mon datamodule, mais je n'y arrive pas. J'ai l'erreur suivante : "le type de l'e visibilité procédures et fonctions dans une unit [ par manudel ] Je déclare une fonction qui renvoit un résultat de type TPersonne, et je voudrais savoircomment faire pour la mettre au même nivau de visibilité que l Code pas fiable dans un livre [:(!] [ par Youyou0214 ] Voil j'ai achet un livre sur delphi et je fais leurs exercises. Tout march pars un lanceur D'application. Il est compos d'une comboBox ( nom (c le n Index d'un table Dbase [ par webazard ] Bonjour, je crée un base Dbase indiqué dans l'aide de delphi en remplacant ttparadox par ttdbase.en supprimant la construction d'index min prog marche Conseils et Orinetations [ par apz ] Salut, Je veux gérer un magasin a l'aide des fiches appelées fiches matériel. Chaque article du magasin doit avoir une fiche (s'il y a, par exemple, 4


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,203 sec (3)

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