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.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    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 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    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.

  4. #4
    Membre confirmé
    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
    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