PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Lenteur Pour Tout / hlitpremier
Lenteur Pour Tout / hlitpremier
Débuté par Anthony, 16 aoû. 2016 21:13 - 9 réponses
Posté le 16 août 2016 - 21:13
Bon après-midi, j'éprouve présentement des lenteurs avec l'instruction Pour tout / hlitpremier.
J'ai testé les deux et même avec l'option "hsansrafraichir" ou parcours sur clé, ça prend 500ms seulement pour cet instruction.

Est-ce normal?
Membre enregistré
2 569 messages
Popularité : +222 (260 votes)
Posté le 17 août 2016 - 10:15
Bonjour,

Pour pouvoir t'aider il nous faudrait un peu plus d'informations sur le type de base que tu utilises et le code que tu as mis en place.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
148 messages
Popularité : +4 (14 votes)
Posté le 17 août 2016 - 11:54
Bonjour

Montre nous votre code pour qu'on puisse vous aider.

--
FETOUI MOHAMED
Développeur, Consultant et Formateur WinDev, WebDev et WinDev Mobile
fib.fetouimed@gmail.com
https://www.linkedin.com/pub/mohamed-el-fetoui/a0/680/109
MAROC+212(0)661249774
Membre de http://www.be-dev.be
Skype : FETOUI MOHAMED
Posté le 18 août 2016 - 17:37
Bonjour, pour le code sql, voici:

SELECT
MAX(Commande.Date_Liv_Commande_De) AS Commande_Date_Liv_Commande_De,
MAX(Waybill.Date_Liv_Reel) AS Waybill_Date_Liv_Reel
FROM
Commande INNER JOIN Waybill ON Commande.COCLEUNIK = Waybill.COCLEUNIK


Puis le code:
I HExécuteRequête(reqDernDateLiv,hRequêteDéfaut) ALORS
SI HLitPremier(reqDernDateLiv,"",hSansRafraîchir) ALORS
SI reqDernDateLiv.Waybill_Date_Liv_Reel <= DateDuJour() ALORS
SAI_DateMax = reqDernDateLiv.Commande_Date_Liv_Commande_De
SINON
SAI_DateMax = reqDernDateLiv.Waybill_Date_Liv_Reel
FIN
FIN
FIN
Membre enregistré
2 569 messages
Popularité : +222 (260 votes)
Posté le 18 août 2016 - 20:58
Bonjour,

Sur quelle base tu travailles ?

Essayes de retirer les doubles quotes dans le hlitpremier et met
HLitPremier(reqDernDateLiv,hSansRafraîchir)


Moi je l'utilise comme tu et ça fonctionne super bien.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
148 messages
Popularité : +4 (14 votes)
Posté le 19 août 2016 - 10:17
Bonjour

vous avez une erreur de syntaxe (hlitpremiser,hSansRafraîchir) éviter ça ""

--
FETOUI MOHAMED
Développeur, Consultant et Formateur WinDev, WebDev et WinDev Mobile
fib.fetouimed@gmail.com
https://www.linkedin.com/pub/mohamed-el-fetoui/a0/680/109
MAROC+212(0)661249774
Membre de http://www.be-dev.be
Skype : FETOUI MOHAMED
Membre enregistré
257 messages
Popularité : +35 (37 votes)
Posté le 19 août 2016 - 11:52
Perso ma syntaxe favorite est :

SI HExécuteRequête(reqDernDateLiv,hRequêteDéfaut) ALORS
HLitPremier(reqDernDateLiv)
SI PAS HEnDehors(reqDernDateLiv) ALORS
SELON reqDernDateLiv.Waybill_Date_Liv_Reel
CAS DateDuJour() : SAI_DateMax = reqDernDateLiv.Commande_Date_Liv_Commande_De
AUTRE CAS : SAI_DateMax = reqDernDateLiv.Waybill_Date_Liv_Reel
FIN
SINON
// MESSAGE AUCUN RESULTAT TROUVER
FIN
SINON
// MESSAGE ERREUR EXECUTION REQUETE
FIN


--
Baptiste CLOART
Consultant
b.cloart@blv-tech.com
06.88.74.80.65
www.linkedin.com/in/cloart
www.blv-tech.com
Posté le 19 août 2016 - 11:56
Le 18/08/2016 à 15:37, Anthony a écrit :
Bonjour, pour le code sql, voici:

SELECT
MAX(Commande.Date_Liv_Commande_De) AS Commande_Date_Liv_Commande_De,
MAX(Waybill.Date_Liv_Reel) AS Waybill_Date_Liv_Reel
FROM
Commande INNER JOIN Waybill ON Commande.COCLEUNIK = Waybill.COCLEUNIK


Puis le code:
I HExécuteRequête(reqDernDateLiv,hRequêteDéfaut) ALORS
SI HLitPremier(reqDernDateLiv,"",hSansRafraîchir) ALORS
SI reqDernDateLiv.Waybill_Date_Liv_Reel <= DateDuJour() ALORS
SAI_DateMax = reqDernDateLiv.Commande_Date_Liv_Commande_De
SINON
SAI_DateMax = reqDernDateLiv.Waybill_Date_Liv_Reel
FIN
FIN
FIN



Bonjour,

En fait, c'est normal, le hexecuteRequete travaille dans un thread
secondaire, il rends la main instantanément. Par contre, pour que le
hlitpremier "fonctionne" il faut que la requête soit traitée, on attends
donc la fin du thread secondaire.

En théorie, si tu teste ta requête sql dans le wdsql, elle devrait
prendre environ 500ms.

J'avais constaté ce phénomène entre wd10 et wd12 (de mémoire en wD10, le
hexecuterequete n'était pas dans un thread et rendait la main une fois
la requête traitée)

Bon dev,

Fred
Membre enregistré
148 messages
Popularité : +4 (14 votes)
Posté le 19 août 2016 - 12:07
Bonjour Baptiste


CAS DateDuJour() : SAI_DateMax = reqDernDateLiv.Commande_Date_Liv_Commande_De
AUTRE CAS : SAI_DateMax = reqDernDateLiv.Waybill_Date_Liv_Reel

A mon avis ça ne change rien au niveau de la vitesse...

--
FETOUI MOHAMED
Développeur, Consultant et Formateur WinDev, WebDev et WinDev Mobile
fib.fetouimed@gmail.com
https://www.linkedin.com/pub/mohamed-el-fetoui/a0/680/109
MAROC+212(0)661249774
Membre de http://www.be-dev.be
Skype : FETOUI MOHAMED
Membre enregistré
344 messages
Popularité : +24 (28 votes)
Posté le 19 août 2016 - 12:38
Bonjour

On ne sait pas
qu'elle est la taille de la base
quel type de base HF/cs ou HF classique
On ne sait pas la mémoire du serveur en cas de HF/CS
On ne sait pas la structure des tables ; On la devine
On ne sait pas si c'est seulement cette requête qui est lente et quelle est la durée que le traitement de
Hexecuterequetereq(DernDateLiv,hRequêteDéfaut)


question as tu utilisé l'outil Explain dans le centre de contrôle HFCS qui indique les optimisations de la requête si cela est nécessaire.
Il faut utiliser la commande
AnalyseurDébut()
HExécuteRequête(reqDernDateLiv,hRequêteDéfaut)
pour TOUT reqDernDateLiv,
SELON reqDernDateLiv.Waybill_Date_Liv_Reel
CAS DateDuJour() :
SAI_DateMax = reqDernDateLiv.Commande_Date_Liv_Commande_De
AUTRE CAS :
SAI_DateMax = reqDernDateLiv.Waybill_Date_Liv_Reel
FIN
FIN
AnalyseurFin()

Qui va t'indiquer le temps de chaque traitement

--
Utiliser l'aide avant que l'on vous aide
Bon développement
Alain PETTITI (apettiti.cg06.fr)
Avec licence PCSOFT certifiée et abonnement LST
Je peux prendre la main avec teamwiever
Apprentissage Windev : http://apprentissagewindev.blogspot.fr