Repositionnement dans un parcours par HRetourPosition
Le
pmoune
Soit le bout de code suivant :
IdSauve est entier
wRequete est Source de Données
SI HExécuteRequêteSQL(wRequete,hRequêteDéfaut,"Select
CodeArticle,Designation,CodeFournisseur From Article Order By
CodeArticle") ALORS
HLitPremier(wRequete,"Designation")
TANTQUE PAS HEnDehors(wRequete)
Trace(wRequete.CodeArticle,wRequete.Designation)
IdSauve = HSauvePosition(wRequete)
HLitRecherchePremier(wRequete,"CodeFournisseur","ZZZ")
HRetourPosition(IdSauve)
HLitSuivant(wRequete,"Designation")
FIN
SINON
AfficheErreur()
FIN
On voit qu'u milieu de la boucle, je fais un HLitRecherchePremier sur
une clé différente de la clé de parcours, donc je fais un
HSauvePosition() et un HRetourPosition() après pour retrouver mon
parcours en cours. Jusque là, tout fonctionne
Maintenant comme cest écrit dans laide de la fonction HLitPremier()
je veux utiliser la clause Order By de la requête comme clé de
parcours donc je ne spécifie pas de clé de parcours dans les
HLitPremier() et HLitSuivant() (il est à noter que ceci est un
exemple, en réalité la clause Group By de ma requête fait au moins 1=
0
ou 15 éléments). Mon code devient alors le suivant :
IdSauve est entier
wRequete est Source de Données
SI HExécuteRequêteSQL(wRequete,hRequêteDéfaut,"Select
CodeArticle,Designation,CodeFournisseur From Article Order By
CodeArticle") ALORS
HLitPremier(wRequete)
TANTQUE PAS HEnDehors(wRequete)
Trace(wRequete.CodeArticle,wRequete.Designation)
IdSauve = HSauvePosition(wRequete)
HLitRecherchePremier(wRequete,"CodeFournisseur","ZZZ")
HRetourPosition(IdSauve)
HLitSuivant(wRequete)
FIN
SINON
AfficheErreur()
FIN
Eh bien la, le HRetourPosition() ne rétablit pas le contexte du
parcours, et lors du HLitSuivant(), le HEndehors() devient vrai. Il
ny a donc quun enregistrement affiché. Je pense que ceci vient du
fait que la clé de parcours nest pas spécifiée. Mais alors comment
contourner ceci car jai absolument besoin de cette fonctionnalité. Je
pourrais construire une clé de parcours contenant les éléments de la
clause Order By et utiliser cette clé de parcours ça fonctionne, mais
cela alourdit considérablement la requête. Ny a-t-il pas une autre
solution ?
Est-ce pareil en Windev 15 ?
Merci de vos réponses
IdSauve est entier
wRequete est Source de Données
SI HExécuteRequêteSQL(wRequete,hRequêteDéfaut,"Select
CodeArticle,Designation,CodeFournisseur From Article Order By
CodeArticle") ALORS
HLitPremier(wRequete,"Designation")
TANTQUE PAS HEnDehors(wRequete)
Trace(wRequete.CodeArticle,wRequete.Designation)
IdSauve = HSauvePosition(wRequete)
HLitRecherchePremier(wRequete,"CodeFournisseur","ZZZ")
HRetourPosition(IdSauve)
HLitSuivant(wRequete,"Designation")
FIN
SINON
AfficheErreur()
FIN
On voit qu'u milieu de la boucle, je fais un HLitRecherchePremier sur
une clé différente de la clé de parcours, donc je fais un
HSauvePosition() et un HRetourPosition() après pour retrouver mon
parcours en cours. Jusque là, tout fonctionne
Maintenant comme cest écrit dans laide de la fonction HLitPremier()
je veux utiliser la clause Order By de la requête comme clé de
parcours donc je ne spécifie pas de clé de parcours dans les
HLitPremier() et HLitSuivant() (il est à noter que ceci est un
exemple, en réalité la clause Group By de ma requête fait au moins 1=
0
ou 15 éléments). Mon code devient alors le suivant :
IdSauve est entier
wRequete est Source de Données
SI HExécuteRequêteSQL(wRequete,hRequêteDéfaut,"Select
CodeArticle,Designation,CodeFournisseur From Article Order By
CodeArticle") ALORS
HLitPremier(wRequete)
TANTQUE PAS HEnDehors(wRequete)
Trace(wRequete.CodeArticle,wRequete.Designation)
IdSauve = HSauvePosition(wRequete)
HLitRecherchePremier(wRequete,"CodeFournisseur","ZZZ")
HRetourPosition(IdSauve)
HLitSuivant(wRequete)
FIN
SINON
AfficheErreur()
FIN
Eh bien la, le HRetourPosition() ne rétablit pas le contexte du
parcours, et lors du HLitSuivant(), le HEndehors() devient vrai. Il
ny a donc quun enregistrement affiché. Je pense que ceci vient du
fait que la clé de parcours nest pas spécifiée. Mais alors comment
contourner ceci car jai absolument besoin de cette fonctionnalité. Je
pourrais construire une clé de parcours contenant les éléments de la
clause Order By et utiliser cette clé de parcours ça fonctionne, mais
cela alourdit considérablement la requête. Ny a-t-il pas une autre
solution ?
Est-ce pareil en Windev 15 ?
Merci de vos réponses

Poser une question


Tu suppose (à tort) que hsauveposition mémorise le parcours.
hsauveposition ne mémorise que la position, et pas la clé de parcours.