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

Persistance des valeurs calculées dans une requête SQL

1 réponse
Avatar
Juliane
Bonjour,



J'ai besoin d'avoir en mémoire un ensemble d'enregistrements en petit nombre
(30 à 40 lignes en moyenne) mais construit à partir d'une requête assez
complexe, car utilisant de très nombreuses liaisons, dont certaines sur
elles-mêmes (j'utilise notamment des personnes reliées à des personnes
elles-mêmes reliées à d'autres personnes...).



Le nombre des fichiers reliés et la complexité des jointures externes m'
obligent à créer moi-même cette requête par programmation, avec des données
issues de plusieurs fichiers HF et des rubriques calculées.



J'initialise cette requête à partir d'un texte ressemblant à (simplifié) :

sTexteReq = " Select 0 as COL1 , FICHIER1.RUB1 as COL2, FICHIER2.RUB2 as
COL3,

' ' as COL4, ' ' as COL5, From FICHIER1, FICHIER2

where FICHIER1.IDRUB = ' " + MonParam + " ' and FICHIER2.RUBAA
=FICHIER1.RUBAA "



Elle est lancée par "HExécuteRequêteSQL".



Dans une étape provisoire et afin de vérifier mes données, j'affiche le
résultat dans une table mémoire avec ConstruitTableFichier( MATABLE ,
MaRequete, taAvecIDAuto+taRemplirTable+taAvecBinaire).



è Jusque là tout est OK : j'ai bien toutes mes valeurs, plus les colonnes
vides COL1 (numérique), COL4 et COL5 (alpha).



Puis j'efface la table avec "TableSupprimeTout(MATABLE)".

Les données disparaissent, mais les colonnes créées en automatique restent
en place.



Je passe ensuite ma requête dans une boucle pour affecter des valeurs aux
rubriques vides et recréer les lignes de la table avec les enregistrements
de la requête modifiés :



sChaine est une chaine

nCpt est un entier = 0 // compteur spécifique

HLitPremier(MaRequete)

TANTQUE PAS HEnDehors(MaRequete)

nCpt ++

MaRequete.COL1 = nCpt

nIndice est un entier = MaRequete.COL3

HLitRecherchePremier(FICHIERXXX, IDXXX, nIndice)

SI Htrouve(FICHIERXXX) ALORS

MaRequete.COL4 = FICHIERXXX.LaValeurQueJeVeux1

MaRequete.COL5 = FICHIERXXX.LaValeurQueJeVeux2

FIN

sChaine = HRécupèreEnregistrement(MaRequete)

TableAjoute(MATABLE,sChaine)

HLitSuivant(MaRequete)

FIN



è Toujours OK : la table contient tous les enregistrements complétés
(rubriques d'origine + calculées)



Je repasse une nouvelle fois dans la requête pour lire les valeurs sous le
débogueur :



vTest est un variant

HLitPremier(MaRequete)

TANTQUE PAS HEnDehors(MaRequete)

vTest = Marequete.COL1 ////// colonne calculée = 0

vTest = Marequete.COL2 // OK - colonne d'origine

vTest = Marequete.COL3 // OK - colonne d'origine

vTest = Marequete.COL4 ////// colonne calculée = " "

vTest = Marequete.COL5 ////// colonne calculée = " "

HLitSuivant(MaRequete)

FIN



è Et là, mes valeurs calculées se sont perdues dans la nature et mes champs
ont retrouvé leur valeur d'initialisation ... entre le premier passage et la
copie des informations dans une table mémoire, et le deuxième passage !!!



J'ai fait un autre essai en ne construisant ma table qu'après l'affectation
des valeurs calculées : c'est pareil, je perds ces valeurs.

Il semblerait qu'elles ne soient utilisables que sur l'enregistrement en
cours de modif. et qu'elles disparaissent dès que l'on passe à
l'enregistrement suivant.



Quelqu'un a t'il déjà remarqué ce phénomène ?

Ou bien ai-je fais une erreur quelque part ?

Ou encore y a t'il une manip particulière à faire ?

Je n'ai rien pu trouver dans l'aide à ce sujet, hormis sur la commande
HModifie, dont il est dit de ne pas l'utiliser sur une requête, l'
enregistrement étant automatique.



J'ai envoyé une requête au ST, mais comme je suis en version 9, je ne sais
pas si je vais avoir une réponse.



Merci aux bonnes âmes qui pourraient me mettre sur la piste.

1 réponse

Avatar
Juliane
Bonjour,

J'ai résolu mon problème.
En fait, c'était dans le mode d'exécution de la requête.
J'avais utilisé la constante "hModifieFichier" au lieu de
"hRequêteDéfaut", et de ce fait j'avais une erreur quand j'utilisais
HModifie.

Merci à ceux qui auraient réfléchi à ma question.


"Juliane" a écrit dans le message de
news:dukjcl$pbf$
Bonjour,



J'ai besoin d'avoir en mémoire un ensemble d'enregistrements en petit


nombre
(30 à 40 lignes en moyenne) mais construit à partir d'une requête assez
complexe, car utilisant de très nombreuses liaisons, dont certaines sur
elles-mêmes (j'utilise notamment des personnes reliées à des personnes
elles-mêmes reliées à d'autres personnes...).



Le nombre des fichiers reliés et la complexité des jointures externes m'
obligent à créer moi-même cette requête par programmation, avec des


données
issues de plusieurs fichiers HF et des rubriques calculées.



J'initialise cette requête à partir d'un texte ressemblant à (simplifié) :

sTexteReq = " Select 0 as COL1 , FICHIER1.RUB1 as COL2, FICHIER2.RUB2 as
COL3,

' ' as COL4, ' ' as COL5, From FICHIER1, FICHIER2

where FICHIER1.IDRUB = ' " + MonParam + " ' and FICHIER2.RUBAA
=FICHIER1.RUBAA "



Elle est lancée par "HExécuteRequêteSQL".



Dans une étape provisoire et afin de vérifier mes données, j'affiche le
résultat dans une table mémoire avec ConstruitTableFichier( MATABLE ,
MaRequete, taAvecIDAuto+taRemplirTable+taAvecBinaire).



è Jusque là tout est OK : j'ai bien toutes mes valeurs, plus les colonnes
vides COL1 (numérique), COL4 et COL5 (alpha).



Puis j'efface la table avec "TableSupprimeTout(MATABLE)".

Les données disparaissent, mais les colonnes créées en automatique restent
en place.



Je passe ensuite ma requête dans une boucle pour affecter des valeurs aux
rubriques vides et recréer les lignes de la table avec les enregistrements
de la requête modifiés :



sChaine est une chaine

nCpt est un entier = 0 // compteur spécifique

HLitPremier(MaRequete)

TANTQUE PAS HEnDehors(MaRequete)

nCpt ++

MaRequete.COL1 = nCpt

nIndice est un entier = MaRequete.COL3

HLitRecherchePremier(FICHIERXXX, IDXXX, nIndice)

SI Htrouve(FICHIERXXX) ALORS

MaRequete.COL4 = FICHIERXXX.LaValeurQueJeVeux1

MaRequete.COL5 = FICHIERXXX.LaValeurQueJeVeux2

FIN

sChaine = HRécupèreEnregistrement(MaRequete)

TableAjoute(MATABLE,sChaine)

HLitSuivant(MaRequete)

FIN



è Toujours OK : la table contient tous les enregistrements complétés
(rubriques d'origine + calculées)



Je repasse une nouvelle fois dans la requête pour lire les valeurs sous le
débogueur :



vTest est un variant

HLitPremier(MaRequete)

TANTQUE PAS HEnDehors(MaRequete)

vTest = Marequete.COL1 ////// colonne calculée = 0

vTest = Marequete.COL2 // OK - colonne d'origine

vTest = Marequete.COL3 // OK - colonne d'origine

vTest = Marequete.COL4 ////// colonne calculée = " "

vTest = Marequete.COL5 ////// colonne calculée = " "

HLitSuivant(MaRequete)

FIN



è Et là, mes valeurs calculées se sont perdues dans la nature et mes


champs
ont retrouvé leur valeur d'initialisation ... entre le premier passage et


la
copie des informations dans une table mémoire, et le deuxième passage !!!



J'ai fait un autre essai en ne construisant ma table qu'après


l'affectation
des valeurs calculées : c'est pareil, je perds ces valeurs.

Il semblerait qu'elles ne soient utilisables que sur l'enregistrement en
cours de modif. et qu'elles disparaissent dès que l'on passe à
l'enregistrement suivant.



Quelqu'un a t'il déjà remarqué ce phénomène ?

Ou bien ai-je fais une erreur quelque part ?

Ou encore y a t'il une manip particulière à faire ?

Je n'ai rien pu trouver dans l'aide à ce sujet, hormis sur la commande
HModifie, dont il est dit de ne pas l'utiliser sur une requête, l'
enregistrement étant automatique.



J'ai envoyé une requête au ST, mais comme je suis en version 9, je ne sais
pas si je vais avoir une réponse.



Merci aux bonnes âmes qui pourraient me mettre sur la piste.