IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Délai d'une requête


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut Délai d'une requête
    Bonjour,

    Je cherche a augmenter le délai d'attente d'une requête.

    En effet, j'utilise une requête qui prend plusieurs numéros en paramètre et lorsque j'en met beaucoup, celle ci me retourne le message d'erreur :
    "Délai d'attente de requête expiré".

    Ma requête marche correctement lorsqu'il y a peu de numéros comme paramètre!

    Code de ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    SELECT 
    BENEF.QUALITE AS QUALITE,	
    BENEF.MATPROP AS MATPROP,	
    BENEF.NOM AS NOM,	
    BENEF.PRENOM AS PRENOM,	
    BENEF.DTCARTA AS DTCARTA,	
    BENEF.DTEADH AS DTEADH,	
    BENEF.DTESOUS AS DTESOUS,	
    BENEF.NSS AS NSS,	
    BENEF.DTNAIS AS DTNAIS,	
    BENEF.DTEDEBCART AS DTEDEBCART,	
    BENEF.DTEFINCART AS DTEFINCART,	
    BENEF.CLENSS AS CLENSS,	
    BENEF.NOCATEG AS NOCATEG,	
    ADRES.RUE1 AS RUE1,	
    ADRES.RUE2 AS RUE2,	
    ADRES.RUE3 AS RUE3,	
    ADRES.CODPOS AS CODPOS,	
    ADRES.BURDIS AS BURDIS,	
    LEFT(BENEF.MATPROP,2) AS Code,	
    LEFT(BENEF.MATPROP,8) AS Matri
    FROM 
    BENEF INNER JOIN ADRES ON SUBSTRING(BENEF.MATPROP,1,8)=ADRES.MATRICULE
    WHERE 
    LEFT(BENEF.MATPROP,2) IN ({Param1}) 
    AND	BENEF.DTERAD = 0
    ORDER BY 
    MATPROP ASC,	
    QUALITE ASC
    Cette requête est exécuter sur une base externe je précise!

    Merci de vos réponses.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Comment est lancée la requête en question ?

    Tatayo.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Désolé j'avais oublié de préciser cette élément!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    REQ_SansNom2.Param1=param
    SI HExécuteRequête(REQ_SansNom2) ALORS
    	POUR TOUT REQ_SansNom2
    Merci d'avoir répondu!

  4. #4
    Membre régulier Avatar de DonkeyPuncher
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2013
    Messages : 56
    Points : 113
    Points
    113
    Par défaut
    Salut,

    Je pense que ça peut être paramétrable avec un HDécritConnexion, en utilisant le mot clé WD Connect Timeout dans le champ 'Informations étendues' de la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HDécritConnexion(TaConnexion,"WD Connect Timeout>120")
    Pour 120 secondes par exemple
    DP

  5. #5
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Assure toi que ces rubriques sont indexées
    BENEF.MATPROP
    BENEF.DTERAD
    BENEF.QUALITE
    ADRES.MATRICULE

    peut être remplacer
    SUBSTRING(BENEF.MATPROP,1,8)

    par
    LEFT(BENEF.MATPROP,8)

    Je ne sais pas si cette dernière remarque donne des gains de performance, c'est à tester.
    Mais vérifie bien que toutes les rubriques impliquées dans les conditions et les tris soient bien indexées, c'est souvent l'origine des lenteurs...

    Autre piste, réduire le nombre d'enregistrements pour lesquels on applique la jointure en faisant des sous requêtes
    Pour faire le savant on dit qu'on réduit le produit cartésien des jointures
    Plus les fichiers sont gros plus le gain est important...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    SELECT 
    	b.QUALITE AS QUALITE,	
    	b.MATPROP AS MATPROP,	
    	b.NOM AS NOM,	
    	b.PRENOM AS PRENOM,	
    	b.DTCARTA AS DTCARTA,	
    	b.DTEADH AS DTEADH,	
    	b.DTESOUS AS DTESOUS,	
    	b.NSS AS NSS,	
    	b.DTNAIS AS DTNAIS,	
    	b.DTEDEBCART AS DTEDEBCART,	
    	b.DTEFINCART AS DTEFINCART,	
    	b.CLENSS AS CLENSS,	
    	b.NOCATEG AS NOCATEG,	
    	ADRES.RUE1 AS RUE1,	
    	ADRES.RUE2 AS RUE2,	
    	ADRES.RUE3 AS RUE3,	
    	ADRES.CODPOS AS CODPOS,	
    	ADRES.BURDIS AS BURDIS,	
    	b.Code AS Code,	
    	b.Matri AS Matri
    FROM 
    	(	SELECT
    			BENEF.QUALITE AS QUALITE,	
    			BENEF.MATPROP AS MATPROP,	
    			BENEF.NOM AS NOM,	
    			BENEF.PRENOM AS PRENOM,	
    			BENEF.DTCARTA AS DTCARTA,	
    			BENEF.DTEADH AS DTEADH,	
    			BENEF.DTESOUS AS DTESOUS,	
    			BENEF.NSS AS NSS,	
    			BENEF.DTNAIS AS DTNAIS,	
    			BENEF.DTEDEBCART AS DTEDEBCART,	
    			BENEF.DTEFINCART AS DTEFINCART,	
    			BENEF.CLENSS AS CLENSS,	
    			BENEF.NOCATEG AS NOCATEG,
    			LEFT(BENEF.MATPROP,2) AS Code,	
    			LEFT(BENEF.MATPROP,8) AS Matri
    		FROM
    			BENEF
    		WHERE
    			LEFT(BENEF.MATPROP,2) IN ({Param1})
    		AND	BENEF.DTERAD = 0 
    	) AS b
    	INNER JOIN ADRES ON b.Matri = ADRES.MATRICULE
    ORDER BY 
    MATPROP ASC,	
    QUALITE ASC
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Merci de vos réponses!

    Alors pour DonkeyPuncher, ta réponse m'affiche un message d'erreur.
    Je l'ai placer avant l'exécution de ma requête, en complétant tous les champs de la fonction, était-ce le bon endroit?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HDécritConnexion("MaConnexion2","***","","****","****",hAccèsNatifSQLServer,hOLectureEcriture,"WD Connect Timeout=600")
    J'ai regardé sur internet, on me disait aussi WD Command Timeout, mais ne marche pas non plus...

    L'erreur retournée est : Impossible de charger la DLL d'accès
    Apparemment, il faudrait installer un fichier manquant sur le site de PCSoft.

    Laurent30s, mes rubriques que tu m'as données sont belles et bien indexées.
    Le LEFT ne change rien au temps, car ça me donne le même résultat et j'avais déjà essayé auparavant avec cette fonction.

    Quant à ton autre piste, j'ai recopié ton code et il ne reconnait pas en gros le AS b, donc il m'affiche des erreurs pendant l'exécution sur les premières lignes, mais n'ayant aucune idée de comment changer ce problème, je reviens vers toi, car je n'ai pas l'habitude de faire des requêtes sous select comme tu viens de me le montrer.

    De plus si tu dis que plus le fichier est important, plus le gain est important, sa m’arrangerai, car ma requête doit me ressortir à peu près plus de 300 000 lignes!

    Au secours !!

  7. #7
    Membre régulier Avatar de DonkeyPuncher
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2013
    Messages : 56
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par xGuigui78 Voir le message
    Merci de vos réponses!
    Alors pour DonkeyPuncher, ta réponse m'affiche un message d'erreur.
    Je l'ai placer avant l'exécution de ma requête, en complétant tous les champs de la fonction, était-ce le bon endroit?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HDécritConnexion("MaConnexion2","***","","****","****",hAccèsNatifSQLServer,hOLectureEcriture,"WD Connect Timeout=600")
    J'ai regardé sur internet, on me disait aussi WD Command Timeout, mais ne marche pas non plus...
    Si j'en suis les exemples dans la doc, tu l'a placé au bon endroit.

    Pour le problème de DLL, j'en avais rencontré un une fois mais c'était pour un autre cas, cependant ça concernait une fonction sur les requêtes, et en fait j'avais juste placé mon code dans un mauvais compartiment (affichage d'une ligne au lieu de sélection d'une ligne dans une table).
    Essaies de voir si en le mettant dans un autre endroit plus approprié, l'erreur disparaît.
    DP

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Citation Envoyé par xGuigui78 Voir le message
    Laurent30s, mes rubriques que tu m'as données sont belles et bien indexées.
    Le LEFT ne change rien au temps, car ça me donne le même résultat et j'avais déjà essayé auparavant avec cette fonction.
    Ca ne changera pas grand chose, car vu que tu appliques une fonction sur ces colonnes, les indexes ne sont pas utilisés.

    Tatayo.

  9. #9
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    dans une base de tests, as-tu la possibilité de créer 2 colonnes dans la table avec les 2 et 8 premiers caractères du matricule afin de ne pas prendre les fonctions LEFT et voir si ce sont ces fonctions qui te pourrissent les temps de réponse ?

    Est-ce que le comportement est le même en mettant la condition de jonction sous forme de WHERE et non pas INNER JOIN ?

    à bientôt,

    Nicolas

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Je n'ai malheureusement pas le droit de créer deux nouvelles colonnes sinon sa aurait été largement plus simple

    Même temps en mettant la condition de jointure dans le WHERE, j'étais parti le dessus au départ.

    Je vais essayer de déplacer la ligne DonkeyPuncher on va voir si le résultat change

    Merci de vos réponses!

  11. #11
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Quand on ne peut pas tester sur la base difficile d'être sur de ce qu'on fait
    et impossible de déboguer

    Essaye la sous requête pour voir s'il n'y a pas de problème à ce niveau là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    		SELECT
    			BENEF.QUALITE AS QUALITE,	
    			BENEF.MATPROP AS MATPROP,	
    			BENEF.NOM AS NOM,	
    			BENEF.PRENOM AS PRENOM,	
    			BENEF.DTCARTA AS DTCARTA,	
    			BENEF.DTEADH AS DTEADH,	
    			BENEF.DTESOUS AS DTESOUS,	
    			BENEF.NSS AS NSS,	
    			BENEF.DTNAIS AS DTNAIS,	
    			BENEF.DTEDEBCART AS DTEDEBCART,	
    			BENEF.DTEFINCART AS DTEFINCART,	
    			BENEF.CLENSS AS CLENSS,	
    			BENEF.NOCATEG AS NOCATEG,
    			LEFT(BENEF.MATPROP,2) AS Code,	
    			LEFT(BENEF.MATPROP,8) AS Matri
    		FROM
    			BENEF
    		WHERE
    			LEFT(BENEF.MATPROP,2) IN ({Param1})
    		AND	BENEF.DTERAD = 0
    Si elle marche essaye aussi celle là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    SELECT 
    	b.*,	
    	ADRES.RUE1 AS RUE1,	
    	ADRES.RUE2 AS RUE2,	
    	ADRES.RUE3 AS RUE3,	
    	ADRES.CODPOS AS CODPOS,	
    	ADRES.BURDIS AS BURDIS
    FROM 
    	(	SELECT
    			BENEF.QUALITE AS QUALITE,	
    			BENEF.MATPROP AS MATPROP,	
    			BENEF.NOM AS NOM,	
    			BENEF.PRENOM AS PRENOM,	
    			BENEF.DTCARTA AS DTCARTA,	
    			BENEF.DTEADH AS DTEADH,	
    			BENEF.DTESOUS AS DTESOUS,	
    			BENEF.NSS AS NSS,	
    			BENEF.DTNAIS AS DTNAIS,	
    			BENEF.DTEDEBCART AS DTEDEBCART,	
    			BENEF.DTEFINCART AS DTEFINCART,	
    			BENEF.CLENSS AS CLENSS,	
    			BENEF.NOCATEG AS NOCATEG,
    			LEFT(BENEF.MATPROP,2) AS Code,	
    			LEFT(BENEF.MATPROP,8) AS Matri
    		FROM
    			BENEF
    		WHERE
    			LEFT(BENEF.MATPROP,2) IN ({Param1})
    		AND	BENEF.DTERAD = 0 
    	) AS b
    	INNER JOIN ADRES ON b.Matri = ADRES.MATRICULE
    Si tu utilise l'éditeur de requête ça peut être plus simple
    - Tu fais une 1ère requête sur le ficher BENEF pour réduire le nombre de ligne aves les conditions
    LEFT(BENEF.MATPROP,2) IN ({Param1}) AND BENEF.DTERAD = 0
    - Puis une 2ème sur la 1ère requête (au lieu du fichier BENEF) et le fichier ADRES pour gérer la jointure

    Tiens moi informé, ça m'aidera à cibler ce qui ne vas pas...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  12. #12
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Bonjour,

    pour reprendre l'idée de Nicolas tu pourrai faire un test avec un HCréeVue ?
    la création d'une vue ne doit pas t'être interdite, selon la base tu passe la création via un hexecuteRequêteSQL("CREATE VIEW..."
    l'idée est de créer une vue MatriculeBenef
    avec un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE VIEW "MatriculeBenef" AS SELECT
      BENEF.??? AS ClePrimaire
      LEFT(BENEF.MATPROP,2) AS Code,	
      LEFT(BENEF.MATPROP,8) AS Matricule
    ...
    ...
    et ensuite de faire ta jointure sur les trois tables mais sans avoir à faire de LEFT dans ta requête ce qui prends beaucoup de temps.

    Ensuite pour le coup des params combien de paramètres passes tu quant il te dis qu'il y en a trop ?

    Bon dev

  13. #13
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    j'ai recopié ton code et il ne reconnait pas en gros le AS b
    Petit truc tout bête, SQLServeur reconnait l'opérateur AS dans le FROM ?
    Je sais par exemple qu'Oracle n'en veut pas et que http://sqlpro.developpez.com/cours/sqlaz/select/#L1.6.

    Donc tu devrais réessayer en supprimant ce AS de la requête de Laurent.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Je dirai même plus: hExecuteRequeteSql avec le paramètre hRequeteSansCorrection.

    Tatayo.

Discussions similaires

  1. Délai d'exécution d'une requête SQL la 1ère fois
    Par DjSteph dans le forum Développement
    Réponses: 28
    Dernier message: 25/02/2012, 16h15
  2. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  3. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17
  4. Proposer le resultat d'une requête en téléchargement
    Par Lux interior dans le forum XMLRAD
    Réponses: 5
    Dernier message: 17/02/2003, 15h44
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo