Persistance des valeurs calculées dans une requête SQL
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
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 + rubriques 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, 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.


Contribution le : 07/03/2006 18:42
Créer un fichier PDF de la contribution Imprimer


Re: Persistance des valeurs calculées dans une requête SQL
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour Julianne,

Meme pour une requête si l'on veut conserver les données il faut les enregistrer dans la requête elle-meme:
SI Htrouve(FICHIERXXX) ALORS 
   MaRequete.COL4 = FICHIERXXX.LaValeurQueJeVeux1 
   MaRequete.COL5 = FICHIERXXX.LaValeurQueJeVeux2
   HModifie(MaRequete)
FIN

Contribution le : 07/03/2006 18:57
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Persistance des valeurs calculées dans une requête SQL
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
Merci de ta réponse DrCharly,

C'est bien justement là qu'était le problème.

J'avais mis au départ HModifie(MaRequete) et mais j'avais dans ce cas un message d'erreur :
"La rubrique <COL1> est une rubrique calculée de la requête <MaqRequete>. Ce type de rubrique ne peut pas être modifiée."

Ce qui m'avait amenée à voir dans l'aide sur HModifie (en fin de page) :
"Modification d'un enregistrement sélectionné dans une requête"
"La modification du contenu d'une rubrique calculée provoque une erreur W-Langage. Le contenu de ces rubriques est automatiquement calculé lors de la modification de l'enregistrement."

Et je m'étais braquée la dessus.

Mais je viens de trouver. C'était dans le mode d'exécution de la requête. J'avais mis :
HExécuteRequêteSQL(MaRequete,hModifieFichier,sTexteReq)
Au lieu de :
HExécuteRequêteSQL(MaRequete,hRequêteDéfaut,sTexteReq)


Et là, ça marche.
Ouf...

Merci à ceux qui ont pu réfléchir à mon problème.

Contribution le : 07/03/2006 19:55

Edité par juliane sur 7/3/2006 20:22:08
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2