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

Access Discussion :

Optimisation Requête Access sur base Foxpro


Sujet :

Access

  1. #1
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut Optimisation Requête Access sur base Foxpro
    Bonjour a tous,

    Je cherche a optimiser le temps de traitement d'une requête:

    J'ai créé une requête sur Access pour interroger une base FoxPro, plus particulierement un fichier table de 100'000 lignes.

    - la table contient 60 colonnes de champs texte ou numerique. Le fichier table pese 145Mo.
    - la table est situé sur serveur (réseau LAN).
    - J'ai lié cette table Foxpro sur mon appli cliente Access, par le biais d'ODBC (driver Foxpro installé sur le poste client)
    - Lorsque j'affiche simplement le contenu de la table liée, le temps d'affichage est inférieur a 2 secondes.
    - Ma requete no.1 ressemble a :
    "SELECT table.champ1, ..., table.champ17
    FROM table
    WHERE table.champ1='LIQ';"

    => Le temps d'exécution de cette requête est de 32 secondes...

    Pour accélérer le traitement, j'ai créé une requête SQL directe toujours sur mon appli cliente, car je pensais que l'exécuter depuis le serveur accélererait le temps de traitement.
    Résultat: => 32 secondes également.
    ...apparemment, le SQL direct ici ne change rien...

    Et pour comparer:
    la base Foxpro est exploité par une autre application installée sur chaque poste client, probablement une interface réalisée sous Foxpro (je connais tres peu Foxpro). Lorsque cette application effectue la même requête, le temps d'exécution parait être de 2 secondes...

    Donc, je ne peux me satisfaire d'obtenir les mêmes données que l'autre application en un temps quasi 20 fois plus long.

    Quelqu'un pourrait m'éclairer ? Comment réduire ce temps ?

    Merci d'avance !! Egalement merci a vous qui avez eu le courage de lire jusqu'au bout !

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 052
    Points : 24 645
    Points
    24 645
    Par défaut
    Bonjour,

    Je pense qu'il s'agit plutot d'un problème dans la manière d'écrire la requête.

    Essaye avec un Like au lieu du =.

    Cordialement,

  3. #3
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    Merci Loufab pour le conseil,

    je viens de tester avec like au lieu du =, et sur les premiers tests, je passe a 28 secondes de temps de traitement au lieu de 32 secondes.

    Y'a de l'avancement, mais je persiste a croire qu'Access peut mieux faire...

    Ca, c'est pour dépanner ceux qui feront face au même probleme que le mien:
    Pour biaiser ce temps de traitement, je me suis mis en place une solution secondaire :

    j'ai mis en place une table de données (TableEnTete) ou j'ai importé trois champs de ma table de 100'000 lignes :
    TableDetail - champs NoCommande, NoProjet, Statut
    Car plusieurs lignes de TableDetail peuvent correspondre a un NoCommande (ou a l'envers: un NoCommande correspond a 1-n lignes de TableDetail).

    Pour un affichage en mode feuilles de données, j'ai un sous-formulaire lié a TableEnTete, lui-même comportant un sous-formulaire lié a TableDetail.

    Et j'utilise les propriétés Filter et filterOn de mon sous-formulaire principal pour mes requetes.

    Et bien cette simple modif (qui était possible, dans le cas des données que j'ai) me permet d'afficher mes données en 2 a 3 secondes.

    Conclusion: c'est cool pour l'affichage "par groupe", qui est rapide.

    Malheureusement, ca ne m'avance pas pour ce qui est des requêtes de synthese sur le champ MontantTotal, par exemple pour obtenir le montant de la commande, ou le montant des couts de commandes relatifs a un NoProjet.

Discussions similaires

  1. requête SQL sur base access
    Par pppa1 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/04/2011, 18h21
  2. requête SQL sur base access
    Par pppa1 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/03/2011, 08h19
  3. Problème de requête Access sur une table Oracle
    Par Poulki dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 31/01/2008, 16h57
  4. requêtes SQL sur base MySQL
    Par khaled_dev dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/01/2008, 21h27
  5. application access sur base sql server
    Par souma dans le forum Access
    Réponses: 1
    Dernier message: 05/05/2006, 09h11

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