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