Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD10] comment imbriquer des parcours de requêtes ?

11 réponses
Avatar
PERCAPITA
Bonjour,

Je suis devant le problème suivant : je n'arrive pas à imbriquer des
parcours sur une même requête (requête intégré au projet utilisé avec
HExecuteRequete())

Avec les fonctions HlitRecherche() j'utilisait HSauvePostion() et
HRetourPosition() mais là je suis complètement coincé !

Merci pour votre aide.

10 réponses

1 2
Avatar
patrice
PERCAPITA a écrit :
Bonjour,

Je suis devant le problème suivant : je n'arrive pas à imbriquer des
parcours sur une même requête (requête intégré au projet utilisé avec
HExecuteRequete())

Avec les fonctions HlitRecherche() j'utilisait HSauvePostion() et
HRetourPosition() mais là je suis complètement coincé !




et copiant-collant la requete pour en faire une deuxieme identique ?
et pis si ca marche, ptet voir avec les alias pour éviter le copie/coller
Avatar
PERCAPITA
Hello Patrice,

Impossible je suis dans une procédure récursive.

"patrice" a écrit dans le message de news:
45cdfd56$0$430$
PERCAPITA a écrit :
Bonjour,

Je suis devant le problème suivant : je n'arrive pas à imbriquer des
parcours sur une même requête (requête intégré au projet utilisé avec
HExecuteRequete())

Avec les fonctions HlitRecherche() j'utilisait HSauvePostion() et
HRetourPosition() mais là je suis complètement coincé !




et copiant-collant la requete pour en faire une deuxieme identique ?
et pis si ca marche, ptet voir avec les alias pour éviter le copie/coller


Avatar
PERCAPITA
Hello Gilles,

Tu as raison j'ai été obligé de mettre ma requete dans une chaine puis de la
lancer avec HExecuteRequeteSQL(). Neanmoins comme je suis dans une procédure
récursive j'ai eu un problème avec le nom de la requête ! Il a donc fallu
que le nom de la requête soit dynamique. C'est qd même étrange (et
inquiétant) que le nom de la requête est une portée globale ! Pour info
voici un extrait de mon code :

hReqSQL est une chaîne = GetSelectMvtChai(eIDCuveE, dateDébutE, dateFinE)
sdReqMvt est Source de Données = NumériqueVersChaîne(DonneIdentifiant())
//Ceci est la bidouille pour pouvoir imbriquer cette requête
SI HExécuteRequêteSQL(sdReqMvt, hReqSQL) ALORS
POUR TOUT sdReqMvt
bla bla bla ...




"Gilles" a écrit dans le message de news:

PERCAPITA a exposé le 10/02/2007 :
Bonjour,

Je suis devant le problème suivant : je n'arrive pas à imbriquer des
parcours sur une même requête (requête intégré au projet utilisé avec
HExecuteRequete())



A priori, à part utiliser HExecuteRequeteSQL, perso, je ne vois pas de
solution.





Avatar
patrice
"PERCAPITA" a écrit dans le message de
news:45d0dee3$0$5077$
que le nom de la requête soit dynamique. C'est qd même étrange (et
inquiétant) que le nom de la requête est une portée globale ! Pour info
voici un extrait de mon code :




amha c'est normal, les fichiers sont globaux

est ce vraiment normal de lancer récursivement des requetes sql ?
n'y a t'il pas moyen de faire un algo linéaire ?
Avatar
PERCAPITA
Hello,

Malheureusement non car sinon le récursif je m'en serait bien passé. Note
bien qu'un pro du SELECT aurait sans doute réussi avec une seule requête.

Je suis d'accord avec ta remarque les fichiers sont globaux mais pas les
requêtes écrite à la mano et executé avec HExcecuteRequeteSQL(). La preuve,
il a suffit de rendre dynamique le nom de ma source de données pour ne plus
avoir de problème.

Bon rassurons nous ce genre de code c'est pas tous les jours ;-)

"patrice" a écrit dans le message de
news: 45d17cc8$0$29719$
"PERCAPITA" a écrit dans le message de
news:45d0dee3$0$5077$
que le nom de la requête soit dynamique. C'est qd même étrange (et
inquiétant) que le nom de la requête est une portée globale ! Pour info
voici un extrait de mon code :




amha c'est normal, les fichiers sont globaux

est ce vraiment normal de lancer récursivement des requetes sql ?
n'y a t'il pas moyen de faire un algo linéaire ?




Avatar
mat
PERCAPITA wrote:
Hello,

Malheureusement non car sinon le récursif je m'en serait bien passé. Note
bien qu'un pro du SELECT aurait sans doute réussi avec une seule requête.

Je suis d'accord avec ta remarque les fichiers sont globaux mais pas les
requêtes écrite à la mano et executé avec HExcecuteRequeteSQL(). La preuve,
il a suffit de rendre dynamique le nom de ma source de données pour ne plus
avoir de problème.




Bonjour,

un discours intéressant car le problème de nommage de sources de données
a été discuté à plusieurs reprises sans vraiment trouver une solution.

""
sdReqMvt est Source de Données = NumériqueVersChaîne(DonneIdentifiant())
SI HExécuteRequêteSQL(sdReqMvt, hReqSQL) ALORS
""

En fait, le nom n'est pas dynamique puisque celui utilisé dans
hExecuteRequete est toujours sdReqMvt et ne pas l'identifiant obtenu par
la procédure DonneIdentifiant() .

Mais c'est remarquable que ça fonctionne quand-même. Et puisque ce n'est
pas documenté: tu as trouvé par hasard?. Même le forum PC Soft et la FAQ
donne zéro messages pour "source de données". Il serait intéressant de
savoir comment accéder aux instances spécifiques de la requête.

Merci et salutations
Mat
Avatar
nwjb
Le Thu, 15 Feb 2007 01:12:24 +0100, mat a écrit:

PERCAPITA wrote:
Hello,
Malheureusement non car sinon le récursif je m'en serait bien passé.
Note bien qu'un pro du SELECT aurait sans doute réussi avec une seule
requête.
Je suis d'accord avec ta remarque les fichiers sont globaux mais pas
les requêtes écrite à la mano et executé avec HExcecuteRequeteSQL(). La
preuve, il a suffit de rendre dynamique le nom de ma source de données
pour ne plus avoir de problème.




Bonjour,

un discours intéressant car le problème de nommage de sources de données
a été discuté à plusieurs reprises sans vraiment trouver une solution.

""
sdReqMvt est Source de Données = NumériqueVersChaîne(DonneIdentifiant())
SI HExécuteRequêteSQL(sdReqMvt, hReqSQL) ALORS
""

En fait, le nom n'est pas dynamique puisque celui utilisé dans
hExecuteRequete est toujours sdReqMvt et ne pas l'identifiant obtenu par
la procédure DonneIdentifiant() .

Mais c'est remarquable que ça fonctionne quand-même. Et puisque ce n'est
pas documenté: tu as trouvé par hasard?. Même le forum PC Soft et la FAQ
donne zéro messages pour "source de données". Il serait intéressant de
savoir comment accéder aux instances spécifiques de la requête.

Merci et salutations
Mat




Bonjour,

Ayant eu un problème voisin (traitement récursif d'un arbre avec requête)
nous avons nommé la requête
en concaténant un entier global incrémenté/décrémenté lors des changements
de niveau. L'accès à la requête
de niveau n reste donc possible simplement (bien que nous n'en ayons pas
eu besoin).

--
J.Bratières

Enlever paspub pour répondre
Please remove paspub when answering
Avatar
mat
nwjb wrote:
Bonjour,

Ayant eu un problème voisin (traitement récursif d'un arbre avec
requête) nous avons nommé la requête
en concaténant un entier global incrémenté/décrémenté lors des
changements de niveau. L'accès à la requête
de niveau n reste donc possible simplement (bien que nous n'en ayons pas
eu besoin).




Merci pour cette confirmation. Je ne peux toujours pas croire qu'une
telle fonctionnalité ne soit pas documenté car elle est essentielle pour
centraliser/automatiser la gestion des requetes, p.ex. dans des classes.

Je viens de faire le petit test suivant, et je confirme que la source de
donnée maintient les deux instances en mémoire. Selon mes tests, les
données ne sont disponibles que via indirection. Ce n'est pas un
problème majeur, mais y-a-t il une autre façon de faire?

Merci
Mat


-----------------------------------------------------------
sQuery est chaîne
sQuery = "select * from contract "
dsSQL est une Source de Données = "maRequete1"
SI HExécuteRequêteSQL(dsSQL,sQuery) ALORS
SI HLitPremier("maRequete1") ALORS
Info({"maRequete1.IDcontract",indRubrique})
FIN
FIN

dsSQL = "maRequete2"
SI HExécuteRequêteSQL(dsSQL,sQuery) ALORS
SI HLitDernier("maRequete2") ALORS
Info({"maRequete1.IDcontract",indRubrique},
{"maRequete2.IDcontract",indRubrique})
FIN
FIN
-----------------------------------------------------------
Avatar
flambour
On 15 fév, 01:12, mat wrote:
PERCAPITA wrote:
> Hello,

> Malheureusement non car sinon le récursif je m'en serait bien passé . Note
> bien qu'un pro du SELECT aurait sans doute réussi avec une seule requ ête.

> Je suis d'accord avec ta remarque les fichiers sont globaux mais pas les
> requêtes écrite à la mano et executé avec HExcecuteRequeteSQL() . La preuve,
> il a suffit de rendre dynamique le nom de ma source de données pour n e plus
> avoir de problème.

Bonjour,

un discours intéressant car le problème de nommage de sources de donn ées
a été discuté à plusieurs reprises sans vraiment trouver une solu tion.

""
sdReqMvt est Source de Données = NumériqueVersChaîne(DonneIdentif iant())
SI HExécuteRequêteSQL(sdReqMvt, hReqSQL) ALORS
""

En fait, le nom n'est pas dynamique puisque celui utilisé dans
hExecuteRequete est toujours sdReqMvt et ne pas l'identifiant obtenu par
la procédure DonneIdentifiant() .

Mais c'est remarquable que ça fonctionne quand-même. Et puisque ce n' est
pas documenté: tu as trouvé par hasard?. Même le forum PC Soft et l a FAQ
donne zéro messages pour "source de données". Il serait intéressant de
savoir comment accéder aux instances spécifiques de la requête.

Merci et salutations
Mat



Non je n'ai pas trouvé par hasard. C'est un exemple dans l'aide en
ligne utilisé pour récupérer la source de données d'un état qui m 'a
mis sur la voie.
Voici l'exemple de l'aide en ligne


// Récupération du nom de la source de données en cours dans l'état
SourceDonnée est une source de donnée
SourceDonnée = MaSource..Nom

// Récupération du nom du client en cours d'impression
SI MaSource.NomCli = "Martin" ALORS
TotalHT..CouleurFond = iRougeClair
FIN

En fait une variable type source de données à bien une portée locale
mais pas la source de données quelle représente. Un sacré piège qd
même.

a+
Avatar
flambour
On 15 fév, 09:50, mat wrote:
nwjb wrote:
> Bonjour,

> Ayant eu un problème voisin (traitement récursif d'un arbre avec
> requête) nous avons nommé la requête
> en concaténant un entier global incrémenté/décrémenté lors des
> changements de niveau. L'accès à la requête
> de niveau n reste donc possible simplement (bien que nous n'en ayons pas
> eu besoin).

Merci pour cette confirmation. Je ne peux toujours pas croire qu'une
telle fonctionnalité ne soit pas documenté car elle est essentielle p our
centraliser/automatiser la gestion des requetes, p.ex. dans des classes.

Je viens de faire le petit test suivant, et je confirme que la source de
donnée maintient les deux instances en mémoire. Selon mes tests, les
données ne sont disponibles que via indirection. Ce n'est pas un
problème majeur, mais y-a-t il une autre façon de faire?

Merci
Mat

-----------------------------------------------------------
sQuery est chaîne
sQuery = "select * from contract "
dsSQL est une Source de Données = "maRequete1"
SI HExécuteRequêteSQL(dsSQL,sQuery) ALORS
SI HLitPremier("maRequete1") ALORS
Info({"maRequete1.IDcontract",indRubrique})
FIN
FIN

dsSQL = "maRequete2"
SI HExécuteRequêteSQL(dsSQL,sQuery) ALORS
SI HLitDernier("maRequete2") ALORS
Info({"maRequete1.IDcontract",indRubrique},
{"maRequete2.IDcontract",indRubrique})
FIN
FIN
-----------------------------------------------------------



Une petite remarque en passant pour conclure : ne pas oublier
d'utiliser HAnnuleDeclaration() !
1 2