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

WD Requêtes

Discussion dans 'Windev' créé par Fatehb71, Juil 31, 2018.

  1. Fatehb71

    Fatehb71 Member

    Inscrit:
    Jan 9, 2018
    Messages:
    64
    J'aime reçus:
    39
    Bonjour,
    J'ai un traitement pour lequel je dois exécuter une requête plusieurs fois.
    Le premier traitement passe (on va dire bien).
    si je ne ferme pas la fenêtre, et j'exécute le traitement, le temps d'exécution de la requête devient long.
    J'ai déroulé le traitement avec F8 :
    l'exécution est rapide Puis devient lourd (temps considérable à l'exécution)
    J'espère étais clair, est ce que quelqu'un a eu déjà ce problème, et est qu'il y a une solution?
    La base de données est HFSQL
    Merci
     
    Tags:
  2. Ezekiel056

    Ezekiel056 Active Member

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

    Un petit bout de code ?
     
  3. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618
    Déjà pourquoi exécuter plusieurs fois la même requête ?
    Ensuite celle-ci contient elle des paramètres ?
    De plus quand libère tu celle-ci ?
    Contenu de la requête ?
     
  4. Fatehb71

    Fatehb71 Member

    Inscrit:
    Jan 9, 2018
    Messages:
    64
    J'aime reçus:
    39
    Pourquoi exécuter plusieurs fois une requête : (dans une boucle) Parcours d'une table mémoire + exécution avec paramètres pris de chaque ligne
    Libération après chaque fin traitement d'une ligne
    Contenu de la requête : somme de d'un nombre, sélection des élément,

    Mais j'ai découvert que l'utilisation des requêtes dans une boucle est lourde, alors j'ai utilisé le HFiltre et HLitRecherche et ça marche très bien
    (Pourquoi ça ne marche pas avec les requêtes, c'est ça ce que je veux comprendre)
     
  5. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618
    regarde ce lien

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


    pour t'aider il faut plus de détail.
    des fois une seule ligne de code mal placé peut tout changé.
     
  6. 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!

    Déjà pourquoi exécuter plusieurs fois la même requête ?
    Cliquez pour agrandir...
    si c'est une requete paramétrée, tous les paramètres ne sont peut être pas connu dès le départ. ce n'est pas gênant en soit.

    Ca devrait fonctionner. Ca m'arrive souvent d'executer plusieurs fois d'affilé la meme requete et je ne constate pas ca.
     
  • popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618

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

    si c'est une requete paramétrée, tous les paramètres ne sont peut être pas connu dès le départ. ce n'est pas gênant en soit.

    Ca devrait fonctionner. Ca m'arrive souvent d'executer plusieurs fois d'affilé la meme requete et je ne constate pas ca.
    Cliquez pour agrandir...
    Je pense que le problème c'est la boucle.
    il faut voir le code de la boucle et le code de la requête pour comprendre ce qui cloche.
    mais

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

    a déjà tout remplacé par hfiltre. donc difficile de répondre sans plus de détail.
     
  • Fatehb71

    Fatehb71 Member

    Inscrit:
    Jan 9, 2018
    Messages:
    64
    J'aime reçus:
    39
    Voila à quoi ressemble le traitement
    nNombreTotal est un entier = 0
    POUR i = 1 _A_ Table_Test..Occurrence
    REQ_Test.Parm1 = COL_1
    REQ_Test.Parm2 = COL_2
    REQ_Test.Parm3 = COL_3
    REQ_Test.Parm4 = COL_4
    SI HExécuteRequête(REQ_Test, hRequêteDéfaut) ALORS
    HLitPremier(REQ_Test)
    TANTQUE PAS HEnDehors(REQ_Test)
    nNombreTotal += REQ_Test.Nombre
    HLitSuivant(REQ_Test)
    FIN
    HLibère(REQ_Test)
    FIN
    FIN

    Avec Le nombre de ligne de la table dépasse 2000
    J'ai un bouton si Je clic dessus j'exécute ce traitement
    1er clic, bien
    2eme clic bien
    3eme clic : au niveau de HExécuteRequête(REQ_Test, hRequêteDéfaut) prends du temps
    avec HFiltre ou en créant une requete SQL texte avec HexecuteRequeteSQL et les même paramètres la même boucle l’exécution de HExecuteRequete SQL marche très bien même après 10 clics
     
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154
    Pourquoi Hlibère ? Il ne sert a RIEN ici.
    Pour info sur le but de Hlibère (cf doc pcsoft) :

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

    ) d'un fichier de données en enregistrements supprimés. La place occupée par les enregistrements rayés est ainsi libérée et pourra être réutilisée lors des prochains ajouts (fonction

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

    ).
    Cliquez pour agrandir...
    Avec HexecuteRequeteSQL ca fonctionne ? .. c'est curieux en effet.
    Je ferais des tests de mon coté... mais je sais déjà qu'il m'arrive de lancer plusieurs fois la même requete et je n'ai jamais eu ce soucis ..

    HFSQL est local ou distant ?
     
  • popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618

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

    Voila à quoi ressemble le traitement
    nNombreTotal est un entier = 0
    POUR i = 1 _A_ Table_Test..Occurrence
    REQ_Test.Parm1 = COL_1
    REQ_Test.Parm2 = COL_2
    REQ_Test.Parm3 = COL_3
    REQ_Test.Parm4 = COL_4
    SI HExécuteRequête(REQ_Test, hRequêteDéfaut) ALORS
    HLitPremier(REQ_Test)
    TANTQUE PAS HEnDehors(REQ_Test)
    nNombreTotal += REQ_Test.Nombre
    HLitSuivant(REQ_Test)
    FIN
    HLibère(REQ_Test)
    FIN
    FIN

    Avec Le nombre de ligne de la table dépasse 2000
    J'ai un bouton si Je clic dessus j'exécute ce traitement
    1er clic, bien
    2eme clic bien
    3eme clic : au niveau de HExécuteRequête(REQ_Test, hRequêteDéfaut) prends du temps
    avec HFiltre ou en créant une requete SQL texte avec HexecuteRequeteSQL et les même paramètres la même boucle l’exécution de HExecuteRequete SQL marche très bien même après 10 clics
    Cliquez pour agrandir...
    As tu essayer de remplacé la ligne
    POUR i = 1 _A_ Table_Test..Occurrence
    par
    pour tout Table_Test.
    pareil
    tu peut remplacer plusieurs ligne
    HLitPremier(REQ_Test)
    TANTQUE PAS HEnDehors(REQ_Test)
    nNombreTotal += REQ_Test.Nombre
    HLitSuivant(REQ_Test)
    par
    pour tout req_test
    nNombreTotal += REQ_Test.Nombre

    a tester et voir si cela améliore la boucle
     
  • popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618

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

    Pourquoi Hlibère ? Il ne sert a RIEN ici.
    Pour info sur le but de Hlibère (cf doc pcsoft) :


    Avec HexecuteRequeteSQL ca fonctionne ? .. c'est curieux en effet.
    Je ferais des tests de mon coté... mais je sais déjà qu'il m'arrive de lancer plusieurs fois la même requete et je n'ai jamais eu ce soucis ..

    HFSQL est local ou distant ?
    Cliquez pour agrandir...
    il a peut être confondu avec

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


    Remarques
    Conditions d'utilisation de la fonction HLibèreRequête
    Cette fonction ne doit être utilisée QUE lorsque vous n'avez plus besoin de la requête concernée !
     
  • Partager cette page

    Chargement...