PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Requete imbriquee
Requete imbriquee
Débuté par luc.pirenne, 21 fév. 2006 17:32 - 3 réponses
Posté le 21 février 2006 - 17:32
Bonjour,
J'ai une table centre de couts dans laquelle il y a un champs 'fils de' qui pointe sur la clé primaire de la même table -> cela me permet de créer un structure de couts.
Je voudrais a partir de n'importe quel niveau de ma structure calculer le cout total de tous les fils. Pour cela, j'exécute une premiere fois le requete FilsDe qui me donne la liste des fils, puis je parcours le résultat de ma requete et je relance la requete 'FilsDe' pour avoir le niveau suivant et ainsi de suite.
Le probleme est que si je réexécute la requete FilDe il réinitialise la requete perd le résultat d'origine -> impossible de faire un hlitsuivant sur la requete d'origine.
Quelqu'un peut-il me donner une idée !!!
Merci d'avance
Posté le 21 février 2006 - 18:44
Bonjour,
Je pense que le plus simple est de créer une fonction récursive, avec une source de données et une requête directement créées dans la procédure ( pas dans le générateur de requête, mais plutôt avec un hExecuteRequeteSQL par exemple ). Le seul paramètre nécessaire est le code du "centre de cout", et la fonction renvoie la somme des fils.

Frédéric.
Posté le 21 février 2006 - 18:47
Dans le cas de requete créé avec l'editeur de requete tu peux faire comme suite :
Créé une deuxieme requete qui fait la meme chose que la premiere, ainsi tu ne perd pas le résultat de la première.

Dans le cas de requete codée faire comme suite :
txtreq est une chaine
nomreq1, nomreq2 sont des sources de données

txtreq="Code de ta première requete"
si pas hexecuterequetesql(nomreq1,txtreq) alors
erreur(txtreq,erreurinfo())
sinon
hlitpremier(nomreq1)
tantque pas hendehors(nomreq)
//traitement req1
...
txtreq="code de ta dexieme requete"
si pas hexecuterequetesql(nomreq2,txtreq) alros
erreur(txtreq,erreurinfo())
sinon
//traitement req2
...
fin
fin

voila.
Posté le 22 février 2006 - 18:51
OK, mais mon problème est que le nombre de niveau est inconnu au départ et qu'il n'est pas le même pour toutes les 'branches de l'arbre'