IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Procédure récursive avec requête [WD14]


Sujet :

WinDev

  1. #1
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut Procédure récursive avec requête
    Bonjour,

    Voila j'ai une table UnEvenement qui se compose comme suit

    IdUnEvenement (idAuto)
    Nom (Chaine)
    IdUnEvenementParent (Entier)


    Ce qui me permet de creer la liste suivant

    Anniversaire
    |---Mail.Spam
    |---Autre
    Repas
    |---Midi
    |---Soir
    ----|--Semaine
    ----|--Wekkend

    Ce qui donne dans ma table
    1 Anniversaire 0
    2 Mail.Spam 1
    3 Autre 1
    4 Repas 0
    5 Midi 4
    6 Soir 4
    7 Semaine 6
    8 Weekend 6

    Voilà je voudrais afficher cela dans un champ arbre

    J'ai donc penser à une procédure récursive
    voici mon code
    Initialisation de mon arbre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ArbreAjoute(FI_Evènement.Arbre, "Evènement", aDéfaut, aDéfaut, 0, aTriAlpha)
    Contenue(0,"Evènement")
    Et ma procedure Contenue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    PROCEDURE Contenue(IdParent est un entier,UneFeuille est une chaîne)
    Nouvellefeuille est une chaîne
    NouveauIdParent est un entier
    //	on regarde si la feuille contient des sous feuilles
    SI HLitRecherchePremier(UnEvènement,IdUnévèmentPArent,IdParent) ALORS
    	TANTQUE HTrouve(UnEvènement)
    		Nouvellefeuille = UneFeuille + TAB + UnEvènement.Nom
    		NouveauIdParent = UnEvènement.IDUnEvènement
    		Contenue(NouveauIdParent,Nouvellefeuille)
    		HLitSuivant(UnEvènement)
    	FIN
    SINON
    	Trace(UneFeuille,IdParent)
    	ArbreAjoute(Arbre,UneFeuille,aDéfaut,aDéfaut,IdParent,aTriAlpha)
    FIN
    Mais voilà la recursivite me change la position de mon enregistrement
    Et donc ne marche pas

    J'ai essayé aussi avec une requête mais après la première recursivite il me dit
    que ma requête est inconnu

    voici le code avec la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    PROCEDURE Contenue(IdParent est un entier,UneFeuille est une chaîne)
    Nouvellefeuille est une chaîne
    NouveauIdParent est un entier
    MaRQT est Sources de Données
     
    //	on regarde si la feuille contient des sous feuilles
    SI PAS HExécuteRequêteSQL(MaRQT,hRequêteDéfaut,"SELECT IDUnEvènement, Nom FROM UnEvènement WHERE IdUnévèmentParent = " + IdParent) ALORS
    	Erreur(ErreurInfo())
    SINON
    	//	On se place sur le premier enregistrement de la requête
    	//	Si on ne peut pas c'est qu'il n'y a pas d'enregistrement donc pas de sous feuille
    	SI HLitPremier(MaRQT) ALORS
    		TANTQUE PAS HEnDehors(MaRQT)
    			Nouvellefeuille = UneFeuille + TAB + MaRQT.Nom
    			NouveauIdParent = MaRQT.IDUnEvènement
    			Contenue(NouveauIdParent,Nouvellefeuille)
    			HLitSuivant(MaRQT)
    		FIN
    	SINON
    		Trace(UneFeuille,IdParent)
    		ArbreAjoute(Arbre,UneFeuille,aDéfaut,aDéfaut,IdParent,aTriAlpha)
    	FIN
     
    FIN
    Donc peux t on faire de la récursivité avec des filtre ou des requêtes


    Merci pour votre aide
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    La réponse rapide est oui si on utilise un nom généré pour la source de données dans ton exemple qui utilise la requête SQL (Cf. la longue discussion sur la magnifique gestion des contextes HyperFile).

    Pour le premier exemple, tu pourrais mémoriser et restaurer la position.

    Et enfin une solution alternative : tu peux parcourir tous les éléments d'un même niveau et les mettre dans un tableau. Et seulement ensuite, boucler sur le tableau pour lancer la récursivité. Ainsi tu es débranché des problématiques de contexte sur les fichiers de données.

  3. #3
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    En ce qui concerne le mode fichier : Il te faut utiliser hsauveposition et hretourposition pour que ça marche bien.

    En ce qui concerne le mode requête : Il te faut une requête par entrée dans la fonction c'est à dire utiliser un tableau de source de données.

    Edit Tableau à définir en dehors de la fonction.

    Lol : pas assez rapide moi !
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  4. #4
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour

    et merci pour vos réponse très rapide.

    Je vais me pencher sur la solution de plusieur Source de donnée.

    Car sauver ma position ne vas pas sauver ma condition de hlitrecherchepremier

    Enfin je ne crois pas.

    Encore Merci


    Merci aussi a JBO pour la solution

    Il faut simplement ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaRQT += HeureSys()
    Temporisation(1)
    Après la déclaration de la source de donnée ce qui permet d'avoir une source
    de donnée différente à chaque fois

    Il faut mettre aussi Temporisation(1) sinon le nom peut être le même
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    DonneIdentifiant est plus approprié qu'une heure systrème temporisée.

  6. #6
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Citation Envoyé par mail.spam Voir le message
    ...Car sauver ma position ne vas pas sauver ma condition de hlitrecherchepremier...
    Mais si...

    Citation Envoyé par mail.spam Voir le message
    Il faut simplement ajouter
    MaRQT += HeureSys()
    Temporisation(1)...
    Pas idiot du tout ça... mais ça fait bidouille quand même...
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  7. #7
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Et n'oubliez pas qu'il faudra peut-être libérer les ressources une fois fini...
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  8. #8
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Citation Envoyé par vmolines Voir le message
    DonneIdentifiant est plus approprié qu'une heure systrème temporisée.
    Merci je ne connaissais pas.

    sinon mogwai162 je vais essayer en sauvant ma position.

    Mais MaRQT += DonneIdentifiant()

    fonctionne très bien, il faut que je regarde pour libérer les ressources

    Merci beaucoup
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [11gR2] Requête récursive avec omissions
    Par JGLord dans le forum PL/SQL
    Réponses: 9
    Dernier message: 11/02/2014, 14h20
  2. Requête récursive avec jointure
    Par Jmdu_44fr dans le forum SQL
    Réponses: 2
    Dernier message: 07/07/2011, 15h10
  3. [PHP 5.0] Boucle récursive pour effectuer un fil d'ariane avec requête
    Par eltyty dans le forum Langage
    Réponses: 9
    Dernier message: 10/07/2009, 17h45
  4. Réponses: 4
    Dernier message: 04/05/2006, 19h01
  5. SQL SERVER 2005 -- requête récursive avec bcp données
    Par evans dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/05/2006, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo