PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Impossible de récupérer le résultat d'une requête
Impossible de récupérer le résultat d'une requête
Débuté par Laurent, 22 nov. 2020 11:09 - 18 réponses
Membre enregistré
70 messages
Popularité : +1 (1 vote)
Posté le 22 novembre 2020 - 11:09
Bonjour à tous,

J'ai créé une requête sur une base Access importé en OLE DB. Le requête fonctionne et donne le bon résultat dans l'éditeur de requêtes.
Par contre, dans mon code ci-dessous j'arrive pas à faire remonter le bon résultat. J'obtiens systématiquement 0.

HExécuteRequête(REQ_Demandes_en_estimation)
LIB_135 = REQ_Demandes_en_estimation.Comptage_1


Auriez-vous une idée ?

Merci à vous.
Membre enregistré
313 messages
Popularité : +8 (10 votes)
Posté le 22 novembre 2020 - 14:06
Bonjour

Il faut lire le premier enregistrement ?
Ou voir le format de tin champ libellé... ?
Membre enregistré
90 messages
Popularité : +7 (7 votes)
Posté le 22 novembre 2020 - 16:52
Bonjour,

Il serait bon de vérifier déjà que la requête a été exécutée sans erreur :

SI HExécuteRequête(REQ_Demandes_en_estimation) ALORS
Info("Comptage : " + REQ_Demandes_en_estimation.Comptage_1)
SINON
Erreur(HErreurInfo())
FIN


Bon dév.
Membre enregistré
70 messages
Popularité : +1 (1 vote)
Posté le 22 novembre 2020 - 18:38
GB a écrit :
Bonjour

Il faut lire le premier enregistrement ?
Ou voir le format de tin champ libellé... ?


C'est une requête de comptage, il n'y a donc pas de première enregistrement.
le format du libellé est en numérique.

Thierry M a écrit :
Bonjour,

Il serait bon de vérifier déjà que la requête a été exécutée sans erreur :

SI HExécuteRequête(REQ_Demandes_en_estimation) ALORS
Info("Comptage : " + REQ_Demandes_en_estimation.Comptage_1)
SINON
Erreur(HErreurInfo())
FIN


Bon dév.


La requête fonctionne et s'exécute mais le résultat est 0 alors que que je dois avoir 55 }:(
Membre enregistré
90 messages
Popularité : +7 (7 votes)
Posté le 22 novembre 2020 - 18:44
Ce que j'ai compris du premier message c'est que la "requête fonctionne et donne le bon résultat dans l'éditeur de requêtes"
Est-ce également vérifié aussi en exécution et en mode GO ?
Membre enregistré
90 messages
Popularité : +7 (7 votes)
Posté le 22 novembre 2020 - 18:55
Autres choses à tester serait de vérifier le nombre d'enregistrements :

- en remplaçant le SUM(Rub) par COUNT(*) dans la requête
SI HExécuteRequête(REQ_Demandes_en_estimation) ALORS
Info(REQ_A1_Declarations.Nb)
SINON
Erreur(HErreurInfo())
FIN


- en faisant un simple SELECT sans SUM ni COUNT dans la requête et en vérifiant le nombre d'enregistrements :
SI HExécuteRequête(REQ_Demandes_en_estimation) ALORS
Info(REQ_A1_Declarations.NbEnr())
SINON
Erreur(HErreurInfo())
FIN
Membre enregistré
70 messages
Popularité : +1 (1 vote)
Posté le 22 novembre 2020 - 19:17
Thierry M a écrit :
Ce que j'ai compris du premier message c'est que la "requête fonctionne et donne le bon résultat dans l'éditeur de requêtes"
Est-ce également vérifié aussi en exécution et en mode GO ?


Oui la requête fonctionne et donne le bon résultat dans l'éditeur.
Alors là je suis pas sur de te suivre, je teste la requête en cliquant sur Go et ça marche. C'est lorsque je teste l'application complète avec le grand GO que le résultat de la requête n'est plus bon.
Membre enregistré
70 messages
Popularité : +1 (1 vote)
Posté le 22 novembre 2020 - 19:21
Thierry M a écrit :
Autres choses à tester serait de vérifier le nombre d'enregistrements :

- en remplaçant le SUM(Rub) par COUNT(*) dans la requête
SI HExécuteRequête(REQ_Demandes_en_estimation) ALORS
Info(REQ_A1_Declarations.Nb)
SINON
Erreur(HErreurInfo())
FIN


- en faisant un simple SELECT sans SUM ni COUNT dans la requête et en vérifiant le nombre d'enregistrements :
SI HExécuteRequête(REQ_Demandes_en_estimation) ALORS
Info(REQ_A1_Declarations.NbEnr())
SINON
Erreur(HErreurInfo())
FIN


Ma requête est la suivante :

SELECT
COUNT(Tab_Demande.Num_Etape) AS Comptage_1
FROM
Tab_Demande
WHERE
Tab_Demande.Num_Etape = 40


Windev reconnait pas "REQ_A1_Declarations" c'est le nom de ma requête ?
Membre enregistré
70 messages
Popularité : +1 (1 vote)
Posté le 22 novembre 2020 - 19:27
J'ai supprimé le COUNT et fais un SELECT simple, du coup j'ai bien 55 enregistrements qui s'affiche avec le code :

SI HExécuteRequête(REQ_Demandes_en_estimation) ALORS
Info(REQ_Demandes_en_estimation.NbEnr(hEtatActif))
SINON
Erreur(HErreurInfo())
FIN


ça contourne mon problème, mais ça reste une énigme :(
Membre enregistré
70 messages
Popularité : +1 (1 vote)
Posté le 22 novembre 2020 - 19:33
J'ai une autre requête qui me pose également problème et pour laquelle ça va être compliqué de contourner :D

SELECT
Tab_Suivi.Num_Dem AS Num_Dem,
Tab_Suivi.Etat AS Etat,
Tab_Suivi.Num_Etape AS Num_Etape
FROM
Tab_Suivi
WHERE
Tab_Suivi.Etat = 'Traitement en cours'
AND Tab_Suivi.Num_Dem = {ParamNum_Dem}


Pour résumer, je souhaite connaitre le Numéro d'étape qui est en "Traitement en cours" d'une Demande par son numéro.
Je sais pas si c'est très clair :p
Membre enregistré
70 messages
Popularité : +1 (1 vote)
Posté le 22 novembre 2020 - 19:38
Le résultat de ma requête REQ_Recherche_EtapeEnCours.Num_Etape me donne bien entendu 0 }:(
Membre enregistré
313 messages
Popularité : +8 (10 votes)
Posté le 22 novembre 2020 - 20:41
Curieux...

Essaie de refaire ta requete pas a pas en faisant les tests a chaque etape. Ca doit se jouer a rien
Membre enregistré
70 messages
Popularité : +1 (1 vote)
Posté le 22 novembre 2020 - 22:36
GB a écrit :
Curieux...

Essaie de refaire ta requete pas a pas en faisant les tests a chaque etape. Ca doit se jouer a rien


J'en ai refais une autre mais c pareil... Pourtant la requête fonctionne bien, c'est la lecture du résultat qui ne fonctionne pas.
Membre enregistré
313 messages
Popularité : +8 (10 votes)
Posté le 23 novembre 2020 - 06:31
Alors il y a quelque chose là ou tu essaie de la lire dans ton appli. Un hfiltre ou autre ?
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 23 novembre 2020 - 09:16
Salut Laurent

c'est normal que cela ne fonctionne pas correctement, tu exécutes la requête mais tu ne la lit pas.
C'est bien repris dans l'aide https://doc.pcsoft.fr/fr-FR/?3044080

Attention : Pour se positionner sur le premier Enregistrement du résultat de la requête, utilisez par exemple la FONCTION HLitPremier.


SQL 1 Remplacer
===========
HExécuteRequête(REQ_Demandes_en_estimation)
LIB_135 = REQ_Demandes_en_estimation.Comptage_1


Par
===
SI PAS HExécuteRequête(REQ_Demandes_en_estimation, hRequêteDéfaut) ALORS
Erreur(HErreur(hErrEnCours))
SINON
HLitPremier(REQ_Demandes_en_estimation)
LIB_135 = REQ_Demandes_en_estimation.Comptage_1
FIN


SQL 2
=====

SI PAS HExécuteRequête(REQ_Recherche_EtapeEnCours, hRequêteDéfaut, nNumDemande) ALORS
Erreur(HErreur(hErrEnCours))
SINON
HLitPremier(REQ_Recherche_EtapeEnCours)
TANTQUE PAS HEnDehors(REQ_Recherche_EtapeEnCours) // Je suppose que tu peux avoir plusieurs étape en cours
Info(REQ_Recherche_EtapeEnCours.Num_Etape)
FIN
FIN


Bon Dev
Daryl

--
http://www.concept4u2.com
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 23 novembre 2020 - 09:32
Bonjour,
Dans ta deuxième requête je mettrais :
WHERE
UPPER(TRIM(Tab_Suivi.Etat)) = 'TRAITEMENT EN COURS''


--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 23 novembre 2020 - 09:34
Avec une seule simple quote fermante

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
90 messages
Popularité : +7 (7 votes)
Posté le 23 novembre 2020 - 09:58
Effectivement , Daryl a raison il manque un HLitPremier(REQ_Demandes_en_estimation) dans la première requête

Concernant la seconde requête, si la suggestion judicieuse de Voroltinquo ne fait pas le job, je suggère de vérifier que le type de la rubrique "Tab_Suivi.Etat" est bien une chaîne (et non - peut-être - une rubrique de type entier )

Bon Dév.
Membre enregistré
70 messages
Popularité : +1 (1 vote)
Posté le 23 novembre 2020 - 10:51
Daryl a écrit :
Salut Laurent

c'est normal que cela ne fonctionne pas correctement, tu exécutes la requête mais tu ne la lit pas.
C'est bien repris dans l'aide https://doc.pcsoft.fr/fr-FR/?3044080

Attention : Pour se positionner sur le premier enregistrement du résultat de la requête, utilisez par exemple la fonction HLitPremier.


SQL 1 Remplacer
===========
HExécuteRequête(REQ_Demandes_en_estimation)
LIB_135 = REQ_Demandes_en_estimation.Comptage_1


Par
===
SI PAS HExécuteRequête(REQ_Demandes_en_estimation, hRequêteDéfaut) ALORS
Erreur(HErreur(hErrEnCours))
SINON
HLitPremier(REQ_Demandes_en_estimation)
LIB_135 = REQ_Demandes_en_estimation.Comptage_1
FIN


SQL 2
=====

SI PAS HExécuteRequête(REQ_Recherche_EtapeEnCours, hRequêteDéfaut, nNumDemande) ALORS
Erreur(HErreur(hErrEnCours))
SINON
HLitPremier(REQ_Recherche_EtapeEnCours)
TANTQUE PAS HEnDehors(REQ_Recherche_EtapeEnCours) // Je suppose que tu peux avoir plusieurs étape en cours
Info(REQ_Recherche_EtapeEnCours.Num_Etape)
FIN
FIN


Bon Dev
Daryl

--
http://www.concept4u2.com


Bonjour Daryl,

Tu as raison, avec le HLitPremier tout fonctionne ... par contre sur une base HFSQL, sans HLitPremier ça fonction du coup pour moi tout était bon.

Merci à toi, ça me débloque bien :merci: