1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

AIDE Comment optimiser une requête ?

Discussion dans 'Sujets Divers' créé par Man, Avr 20, 2019.

Tags:
  1. Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67
    Bonjour je viens ici vous poser un problème qui est souvent récurrent quand je développe les applications avec les produits de PC SOFT, j'ai toujours ce message comme montré en pièce jointe.
    Comment faire pour résoudre ce problème ?
    Je joins ici le code que j'ai l'habitude d'écrire pour exécuter une requête
    Code (Text):
    FenAttenteDébut("Processus d'attribution en cours...")
    SI PAS HExécuteRequête(REQ_Select_UE_Dispensée,hRequêteDéfaut,gnIDClasse_Tenue,gsAnnéeAcad,COMBO_matière..ValeurAffichée) ALORS
        Msg_Toast("Impossible d'exécuter la requête permettant de sélectionner l'UE dispensée")
        VibrationDéclenche(1000)
        RepriseSaisie(COMBO_SousGroupe)
        RETOUR
    FIN
    /////////////////////
    Donc du coup je ne sais pas si j'utilise le bon mode.
    Si un membre meilleur code qui peut résoudre mon problème, je serai preneur.
    Merci et bonne journée
     

    Fichiers attachés:

    Tags:
  2. Mohamed

    Mohamed Active Member

    Inscrit:
    Jan 15, 2018
    Messages:
    304
    J'aime reçus:
    60
    Bonjour

    Votre code est bon, seulement depuis la version 22 Pcsoft améliore son débogueur pour aider un peu plus les développeurs.
    Ce message indique que vous cliquer plusieurs fois sur le bouton qui lance ce code, alors il considère ça un problème tant que tu n'a pas changé les paramètres de cette requête, ne t'en fait pas.
     
  3. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    2,961
    J'aime reçus:
    1,575
    salut

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    ,
    ta pièce jointe n'affiche pas d'erreur.
    mais indique que ta requête est très souvent utilisée dans la même minute.
    c'est juste un conseil d'optimisation.
     
  4. Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    salut

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    ,
    ta pièce jointe n'affiche pas d'erreur.
    mais indique que ta requête est très souvent utilisée dans la même minute.
    c'est juste un conseil d'optimisation.
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Que faire donc face à ça ?
    quel conseil pratique me donneras-tu ?
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour

    Votre code est bon, seulement depuis la version 22 Pcsoft améliore son débogueur pour aider un peu plus les développeurs.
    Ce message indique que vous cliquer plusieurs fois sur le bouton qui lance ce code, alors il considère ça un problème tant que tu n'a pas changé les paramètres de cette requête, ne t'en fait pas.
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    que faire donc pour que ce message ne puisse plus s'afficher ?
    autrement dit comment optimiser cette requête ?
     
  • popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    2,961
    J'aime reçus:
    1,575

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Que faire donc face à ça ?
    quel conseil pratique me donneras-tu ?
    Cliquez pour agrandir...
    Tu fais un pas a pas dans windev et tu regarde ton code, quand il appele la requête.
    Par exemple le message est normale si tu execute la requête dans une boucle.
    A toi de faire ce qu'il faut pour éviter cela.
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Tu fais un pas a pas dans windev et tu regarde ton code, quand il appele la requête.
    Par exemple le message est normale si tu execute la requête dans une boucle.
    A toi de faire ce qu'il faut pour éviter cela.
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour,
    Merci pour ton intervention sauf que là si je savais ce qu'il fallait faire je n'allais créer pas une discussion.
    Bonne fête de la pâques
     
  • popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    2,961
    J'aime reçus:
    1,575
  • PhantomX

    PhantomX Member

    Inscrit:
    Juil 11, 2018
    Messages:
    78
    J'aime reçus:
    61
    Bonjour Man,
    Cette avertissement n'est pas signe de mauvais gestion de ta requête. Prend l'exemple d'une liste qui affiche tes clients et que à chaque fois que tu sélectionne un client il te renvoie la fiche de ton client via ta requête. Si tu clique 2 fois sur le même client en moins dune minutes tu va avoir ce message.

    Ton code n'est pas nécessairement mauvais pour autant. A toi de juger si réellement tu appel trop souvent ta requête avec les mêmes paramètres. Si tu veux vraiment optimiser. Tu peux sauvegarder ton résultat dans un ou un tableau associatif pour pouvoir récupérer le résultat via ton tableau plutôt que de relancer ta requête. Faut pas que tes donne change par contre. Sinon tu vs devoir une procédure de rafraîchissement.
    Reste à voir SELON TON APPLICATION si tu peux appeler la même requête avec les mêmes paramètres assez souvent pour mériter l'optimisation qui va te causer énormément de travail en plus. Alors à toi de juger ce que tu va sauver réellement.

    Est-ce que l'utilisateur va réellement ce rendre compte de ton optimisation? Combien d'utilisateur en même temps? Combien de temps pour recevoir le résultat de ta requête ? C'est des question que tu dois te poser. Si tu à 20 utilisateurs par jour qui lance 20 requêtes de trop c'est pas grave. 1000000 d'utilisateurs à 20 requêtes de trop ça monte la charge de ton serveur inutilement donc augmente les coup de production. Par contre si c'est une BD local se sera inutile d'optimiser dans la plupart des cas car tout ce passe très rapidement.

    Tu peux relâcher ton application et optimiser seulement les partie souvent appeler.

    Utilise la télémétrie de windev qui va te dire en gros ou faut que tu travaille selon le nombre d'appels et le temps des traitements.

    Sinon si tu veux vraiment faire disparaître le message, clique droit dessus et ne plus afficher
     
    aminej76 apprécie ceci.
  • Mohamed

    Mohamed Active Member

    Inscrit:
    Jan 15, 2018
    Messages:
    304
    J'aime reçus:
    60
    J'ai rien à dire après les 2 réponses de

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    et

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  • Fouedusa

    Fouedusa Active Member

    Inscrit:
    Avr 22, 2018
    Messages:
    141
    J'aime reçus:
    120
    Bonjour;
    Tout le monde est confronté au conseil d'optimisation de la requête dans le cas de son execution avec les mêmes paramètres dans un intervale moins d'une minute.
    Mais dès fois on est obligé d'executer une requête plusieurs fois avec les mêmes paramètres dans un intervale de temps inférieur à une minute car on peut avoir des résultats différents.
    Dans le cas contraire, c.à.d. le même résultat pour les mêmes paramètres quelque soit le temps. ===> Qu'est ce qu'il faut ?
    Suggestion :
    Garder trace sur les paramètres.

    Exemple :
    déclarer des variables globales :
    Code (Text):
    Param_IDClasse_Tenue est un entier
    Param_AnnéeAcad est une chaîne
    Param_matière est une chaîne
     
    Test avant l'appel
    Code (Windev):
    FenAttenteDébut("Processus d'attribution en cours.....")
    SI (nParam_IDClasse_Tenue<>gnIDClasse_Tenue) OU (sParam_AnnéeAcad<>gsAnnéeAcad) OU (sParam_matière<>COMBO_matière..ValeurAffichée) ALORS
       SI PAS

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (REQ_Select_UE_Dispensée,hRequêteDéfaut,gnIDClasse_Tenue,gsAnnéeAcad,COMBO_matière..ValeurAffichée) ALORS
           Msg_Toast("Impossible d'exécuter la requête permettant de sélectionner l'UE dispensée")
           

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (1000)
           RepriseSaisie(COMBO_SousGroupe)
       FIN
       nParam_IDClasse_Tenue   =   gnIDClasse_Tenue
       sParam_AnnéeAcad       =   gsAnnéeAcad
       sParam_matière       =   COMBO_matière..ValeurAffichée  
    FIN
     
    Remarque hors sujet :
    Bon Dev.
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour Man,
    Cette avertissement n'est pas signe de mauvais gestion de ta requête. Prend l'exemple d'une liste qui affiche tes clients et que à chaque fois que tu sélectionne un client il te renvoie la fiche de ton client via ta requête. Si tu clique 2 fois sur le même client en moins dune minutes tu va avoir ce message.

    Ton code n'est pas nécessairement mauvais pour autant. A toi de juger si réellement tu appel trop souvent ta requête avec les mêmes paramètres. Si tu veux vraiment optimiser. Tu peux sauvegarder ton résultat dans un ou un tableau associatif pour pouvoir récupérer le résultat via ton tableau plutôt que de relancer ta requête. Faut pas que tes donne change par contre. Sinon tu vs devoir une procédure de rafraîchissement.
    Reste à voir SELON TON APPLICATION si tu peux appeler la même requête avec les mêmes paramètres assez souvent pour mériter l'optimisation qui va te causer énormément de travail en plus. Alors à toi de juger ce que tu va sauver réellement.

    Est-ce que l'utilisateur va réellement ce rendre compte de ton optimisation? Combien d'utilisateur en même temps? Combien de temps pour recevoir le résultat de ta requête ? C'est des question que tu dois te poser. Si tu à 20 utilisateurs par jour qui lance 20 requêtes de trop c'est pas grave. 1000000 d'utilisateurs à 20 requêtes de trop ça monte la charge de ton serveur inutilement donc augmente les coup de production. Par contre si c'est une BD local se sera inutile d'optimiser dans la plupart des cas car tout ce passe très rapidement.

    Tu peux relâcher ton application et optimiser seulement les partie souvent appeler.

    Utilise la télémétrie de windev qui va te dire en gros ou faut que tu travaille selon le nombre d'appels et le temps des traitements.

    Sinon si tu veux vraiment faire disparaître le message, clique droit dessus et ne plus afficher
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour j'ai été ravi de te lire mais il y a un soucis je ne suis pas très futé en Wlangage c'est grâce à vous à vos conseils à vos tutos que je me perfectionne au fil des jours. Vous avez proposez que je puisse utiliser les tableaux associatifs comment m'y prendre si je peux avoir un tuto.
    Merci
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour;
    Tout le monde est confronté au conseil d'optimisation de la requête dans le cas de son execution avec les mêmes paramètres dans un intervale moins d'une minute.
    Mais dès fois on est obligé d'executer une requête plusieurs fois avec les mêmes paramètres dans un intervale de temps inférieur à une minute car on peut avoir des résultats différents.
    Dans le cas contraire, c.à.d. le même résultat pour les mêmes paramètres quelque soit le temps. ===> Qu'est ce qu'il faut ?
    Suggestion :
    Garder trace sur les paramètres.

    Exemple :
    déclarer des variables globales :
    Code (Text):
    Param_IDClasse_Tenue est un entier
    Param_AnnéeAcad est une chaîne
    Param_matière est une chaîne
     
    Test avant l'appel
    Code (Windev):
    FenAttenteDébut("Processus d'attribution en cours.....")
    SI (nParam_IDClasse_Tenue<>gnIDClasse_Tenue) OU (sParam_AnnéeAcad<>gsAnnéeAcad) OU (sParam_matière<>COMBO_matière..ValeurAffichée) ALORS
       SI PAS

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (REQ_Select_UE_Dispensée,hRequêteDéfaut,gnIDClasse_Tenue,gsAnnéeAcad,COMBO_matière..ValeurAffichée) ALORS
           Msg_Toast("Impossible d'exécuter la requête permettant de sélectionner l'UE dispensée")
           

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (1000)
           RepriseSaisie(COMBO_SousGroupe)
       FIN
       nParam_IDClasse_Tenue   =   gnIDClasse_Tenue
       sParam_AnnéeAcad       =   gsAnnéeAcad
       sParam_matière       =   COMBO_matière..ValeurAffichée  
    FIN
     
    Remarque hors sujet :


    Bon Dev.
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour je t'avoue que je n'ai rien compris
     
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Franchement, ne fais pas attention a cet avertissement.
    A moins que tu n’exécute effectivement en boucle inutilement cette requete .. et la il faudrait juste remplacer une des conditions par un IN (<liste de valeur>).
    Mais sinon, c'est ok !
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Franchement, ne fais pas attention a cet avertissement.
    A moins que tu n’exécute effectivement en boucle inutilement cette requete .. et la il faudrait juste remplacer une des conditions par un IN (<liste de valeur>).
    Mais sinon, c'est ok !
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour je viens de lire ton intervention mais quand vous parlez de IN ça signifie quoi ?

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    bonjour dans votre précédent post, vous avez fait allusion au tableau où je devrais sauvegarder les résultats. Le problème est le suivant je ne maîtrise pas grand chose dans la notion de structure et tableau si vous pouvez nous faire un tuto où je récupère les données de ma base de données pour les sauvegarder dans une structure ou tableau et par après les afficher dans une zonerépétée ou table et surveiller s'il y a une mise à jour dans ma base de données.
    Merci d'avance
     
  • PhantomX

    PhantomX Member

    Inscrit:
    Juil 11, 2018
    Messages:
    78
    J'aime reçus:
    61

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Je suis un peu serré dans mes temps libre présentement, en plus du travail et des projets personnel, je suis en train de rénover ma maison.
    Je ne pourrais malheureusement pas faire de tuto dans un cours laps de temps.
    Regarde dans l'aide, et ouvre les exemples fournis avec windev, et essaie de comprendre le code. Sinon tu vas devoir être patient car, faire quelque chose à moitié j'aime mieux pas le faire et faire un tuto clair et précis sur les tableaux, structures et tableau associatif, tâches parallèles pour récupérer les mises à jours des données sans bloqué l'utilisateur, section critique pour protégé tes tableaux si tu passe par les tâches parallèles... va me prendre plusieurs heures. Sinon ça va être un survol qui sera pas beaucoup mieux que l'aide en ligne alors...

    Désolé :(
    Bon développement :)
     
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    C'est a dire quand on a une liste de valeurs a verifier (ex une liste de ID d'enregistrement)
    Imaginons qu'on veuillez verifier 20 enregistrements d'une base dont on connais les ID UNIQUE
    Plutot que de faire une boucle qui va requeter 20 fois (SELECt * FROM Table where ID = tabID
    On va faire SELECt * FROM Table where ID IN (<MaListeID>)

    IN en SQL = Est dans la liste suivante
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Je suis un peu serré dans mes temps libre présentement, en plus du travail et des projets personnel, je suis en train de rénover ma maison.
    Je ne pourrais malheureusement pas faire de tuto dans un cours laps de temps.
    Regarde dans l'aide, et ouvre les exemples fournis avec windev, et essaie de comprendre le code. Sinon tu vas devoir être patient car, faire quelque chose à moitié j'aime mieux pas le faire et faire un tuto clair et précis sur les tableaux, structures et tableau associatif, tâches parallèles pour récupérer les mises à jours des données sans bloqué l'utilisateur, section critique pour protégé tes tableaux si tu passe par les tâches parallèles... va me prendre plusieurs heures. Sinon ça va être un survol qui sera pas beaucoup mieux que l'aide en ligne alors...

    Désolé :(
    Bon développement :)
    Cliquez pour agrandir...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    je serai patient car un tuto venant me mettrai sur le droit chemin
    Car tu as l'art de transmettre
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    290
    J'aime reçus:
    67

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    C'est a dire quand on a une liste de valeurs a verifier (ex une liste de ID d'enregistrement)
    Imaginons qu'on veuillez verifier 20 enregistrements d'une base dont on connais les ID UNIQUE
    Plutot que de faire une boucle qui va requeter 20 fois (SELECt * FROM Table where ID = tabID
    On va faire SELECt * FROM Table where ID IN (<MaListeID>)

    IN en SQL = Est dans la liste suivante
    Cliquez pour agrandir...
    Ok

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    , je vais essayer de modifier mes requêtes et observer le comportement
     
  • PhantomX

    PhantomX Member

    Inscrit:
    Juil 11, 2018
    Messages:
    78
    J'aime reçus:
    61

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Merci, avoir toujours des commentaire comme ça je quitterais ma job et je deviendrait formateur

    Mais bon...
     
  • Partager cette page

    Chargement...