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

Requêtes et SQL. Discussion :

Vitesse de chargement de ma requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 61
    Points
    61
    Par défaut Vitesse de chargement de ma requête
    Bonjour,
    J'ai un formulaire dont la source de donnée est une instruction SQL que voici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Produit.N°_Commande, T_Produit.N°Auto_Produit, T_Produit.No_Ligne_CDA, T_Produit.N°_Produit_Réf, T_Produit.Code_Article_PSFT, T_Produit.Date_Echéance, T_Produit.Qté_Ligne_Répartition, T_Produit_Référencé.Ref_Article_Fournisseur, T_Produit_Référencé.Unité_de_mesure, T_Produit_Référencé.Libellé_ligne_CDA, [Qté_Ligne_Répartition]-Extrait_Somme_Quantitee_Recue([N°_Commande],[N°Auto_Produit]) AS [Reste à Livrer]
    FROM T_Produit_Référencé INNER JOIN T_Produit ON T_Produit_Référencé.N°Auto_Produit_Réf = T_Produit.N°_Produit_Réf
    GROUP BY T_Produit.N°_Commande, T_Produit.N°Auto_Produit, T_Produit.No_Ligne_CDA, T_Produit.N°_Produit_Réf, T_Produit.Code_Article_PSFT, T_Produit.Date_Echéance, T_Produit.Qté_Ligne_Répartition, T_Produit_Référencé.Ref_Article_Fournisseur, T_Produit_Référencé.Unité_de_mesure, T_Produit_Référencé.Libellé_ligne_CDA, [Qté_Ligne_Répartition]-Extrait_Somme_Quantitee_Recue([N°_Commande],[N°Auto_Produit])
    HAVING (((T_Produit.N°_Commande)=[Formulaires]![F_Saisie_Entrée_par_Commande]![N°Auto_Commande]));
    Cette instruction fait appelle à une fonction que j'ai créée :

    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
    Public Function Extrait_Somme_Quantitee_Recue(N°_Commande_Concernée As Long, N°_Produit_Concerné As String) As Currency
    Dim RS_Synthèse_Quantitée_Recue As DAO.Recordset
    Dim Compteur As Long
    Dim SQL_QLAU As String
    Set db = CurrentDb
     
    Compteur = 0
     
    SQL_QLAU = "SELECT T_Produit.N°_Commande, T_Produit_Réf_T_Emp_Parc.N_Produit, Sum(T_Entrée_Détail.Quantitée_Livrée) AS SommeDeQuantitée_Livrée "
    SQL_QLAU = SQL_QLAU & "FROM T_Produit INNER JOIN (T_Produit_Réf_T_Emp_Parc INNER JOIN T_Entrée_Détail ON T_Produit_Réf_T_Emp_Parc.N°Auto_Produit_Réf_T_Emp_Parc = T_Entrée_Détail.N°_Produit_Réf_T_Emp_Parc) ON T_Produit.N°Auto_Produit = T_Produit_Réf_T_Emp_Parc.N_Produit "
    SQL_QLAU = SQL_QLAU & "GROUP BY T_Produit.N°_Commande, T_Produit_Réf_T_Emp_Parc.N_Produit "
    SQL_QLAU = SQL_QLAU & "HAVING (((T_Produit.N°_Commande) = " & N°_Commande_Concernée & ") And ((T_Produit_Réf_T_Emp_Parc.N_Produit) = '" & N°_Produit_Concerné & "')) "
    SQL_QLAU = SQL_QLAU & "WITH OWNERACCESS OPTION;"
     
     
    'Extrait la somme totale des articles reçus pour cet article de cette commande
    Set RS_Synthèse_Quantitée_Recue = db.OpenRecordset(SQL_QLAU, dbOpenDynaset)
    'afin de vérifier qu'il n'y a pas plusieurs enregistrement pour cela il faut fire une boucle
    'pour vérifier à nouveau le nombre d'enregistrement suite à Movelast
    Do
        Compteur = Compteur + 1
        Select Case RS_Synthèse_Quantitée_Recue.RecordCount
            Case 0
                Extrait_Somme_Quantitee_Recue = 0
                GoTo fin_ESQR
            Case 1
                RS_Synthèse_Quantitée_Recue.MoveLast
                Extrait_Somme_Quantitee_Recue = RS_Synthèse_Quantitée_Recue.Fields("SommeDeQuantitée_Livrée").Value
     
            Case Else
                MsgBox "Une erreur c'est produite dans la source SQL : Trop d'enregistrement"
                Extrait_Somme_Quantitee_Recue = 0
        End Select
    Loop Until Compteur = 2
     
    fin_ESQR:
    Set db = Nothing
    Set RS_Synthèse_Quantitée_Recue = Nothing
    End Function

    Le problème se pose lors du chargement du formulaire, c'est très long.

    Qu'est ce que je pourrais faire pour améliorer la vitesse?

    Merci pour votre réponse.

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Pourquoi tu ne fais pas tout ton code sous VBA en incluant la fonction compléte et la requête ?
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,
    C’est manifestement la source du formulaire (pas piquée des vers !) qui doit causer le problème surtout si la table T_Produit_Référencé contient quelques items.
    Peut-être une piste pour rendre le phénomène moins perceptible.
    L’idée c’est de faire le calcul ‘quantité reçue’ au fur et à mesure que cela s’avère nécessaire (l’item affiché dans le formulaire) au lieu de le faire systématiquement a priori pour tous les enregistrements.
    Ma proposition :
    - enlever de la source tous les champs qui font appel à la fonction ‘Extrait_Somme_Quantitee_Recue()’ - - - > le chargement sera plus rapide
    - dans le formulaire, ‘sur activation’ aménager les contrôles qui utilisent ces champs - - - > à cet endroit le temps, consommé par Access pour le calcul, sera imperceptible par l’utilisateur.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Points : 61
    Points
    61
    Par défaut
    Merci, c'est plus rapide en effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Améliorer la vitesse de chargement des images
    Par danielhagnoul dans le forum jQuery
    Réponses: 2
    Dernier message: 05/03/2009, 09h07
  2. [AJAX] Barre de chargement pendant une requête mysql
    Par Gabzor dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/02/2009, 11h25
  3. Vitesse de chargement
    Par lextaz33 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 02/07/2008, 15h53
  4. [EDI][D2005]Vitesse de chargement d'assembly au debug
    Par sur_uix dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 12/12/2005, 17h49
  5. Vitesse de chargement d'une image jpg ?
    Par ybruant dans le forum Langage
    Réponses: 6
    Dernier message: 16/11/2004, 20h42

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