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

VBA Access Discussion :

dbOpenForwardOnly + dbAppendOnly vs dbOpenDynaset, qui est le plus rapide ? [AC-2013]


Sujet :

VBA Access

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 407
    Par défaut dbOpenForwardOnly + dbAppendOnly vs dbOpenDynaset, qui est le plus rapide ?
    Bonjour à vous.

    J'ai une appli où je ne fais qu'ajouter des données dans une table existante. Copiant des données de Excel (compliqué) à Access (plutôt simple).

    Mon appli se met à ralentir considérablement au milieu du traitement, même si les tests unitaires ont des temps d'exécution acceptables.
    J'ai mis en place du code pour lutter contre le gonflement de la dorsale et de la frontale car je pensais que c'était son poids qui la ralentissait.
    Mais je constate qu'entre ces points de compactage, ce n'est pas super-super.

    Je me demandais si quelqu'un avait fait un test comparatif entre dbOpenForwardOnly + dbAppendOnly vs dbOpenDynaset pour ce qui est de la vitesse d'exécution ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 407
    Par défaut
    Bonjour.

    J'ai trouvé ceci : https://sourcedaddy.com/ms-access/object-methods.html

    et finalement je ne pense pas que cela fasse un vrai différence.

    D'abord dbOpenForwardOnly est de type Snapshot donc non modifiable donc non adapté à mon cas.
    Ensuite dbAppenOnly s'applique à des recordsets dbOnpenDynaset pour ce qui m'intéresse et donc ses performances doivent être proche.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je dirais bien qu'il faudrait essayer, mais a priori, je pense que les différences résident principalement dans la sécurité. A mon idée, mais je ne suis pas spécialiste, dbAppendOnly a été prévu pour permettre de soulager le moteur qui doit mettre moins de verrous que lorsque tu es dans un mode qui permet la modification. Ca pourrait donc être un peu plus rapide.

    Question: Pourquoi utilises-tu DAO? Par quelle méthode injectes-tu les données dans ta table? Recordset.AddNew? Une requête action? Une requête sql construite en VBA?

    Perso, je serais tenté de dire que le plus rapide et le moins gourmand est une requête Insert Into soit en texte soit en "procédure stockée" en ADODB...

    A tester, mais sans voir ton code, je ne sais pas dire grand chose de plus.

    dbOpenForwardOnly n'est qu'en lecture, je pense.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 407
    Par défaut
    Bonjour.

    dbOpenForwardOnly n'est qu'en lecture, je pense.
    Oui c'est ce que j'ai trouvé aussi.

    Pour les tests je suis d'accord mais comme mon traitement est TRÈS long et qu'il tourne actuellement … donc pas maintenant. J'avais espéré capitaliser sur l'expérience d'un autre :-).

    Pour les ajouts j'utilise un Addnew de DAO avec plein de code conditionnel sur les champs que je modifie ou pas donc transformer cela en SQL me tente moyennement. Je suis de Access à Access (en fait de Access à Access à Access mais c'est juste une astuce pour éviter de frapper le 2Go dans la frontale). De plus j'ai lu que les requêtes "ad-hoc" non enregistrées n'étaient pas les plus rapides car Access doit les interpréter à chaque fois sans pouvoir les optimiser.

    Pour info, MA table principale (env 300000 enr) a aussi une vingtaine de tables en relation (modèle en étoile) et ces tables sont "petites" (env 100 enrs par tables).

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Avec Adodb, j'injecte dans Access via des requêtes action Insert Into paramétrées. Même sur des grosses tables, ça n'a jamais posé de problèmes particuliers de lenteur. Mais tout cela est très relatif... Ce qui me semblera +/- rapide pourra te sembler très long.

    Cela dit, si ta structure en étoile est bourrée d'intégrité référentielle, ça va ralentir. Peut-être pourrais-tu essayer d'optimiser tes index en supprimant ceux qui sont inutiles. Ca, pour de l'append sur de grandes tables, ça me semblerait pouvoir être un levier, car Access doit mettre ses index à jour au moment de l'append, et plus la table est grosse, plus sa table d'index va être lourde à manipuler.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 407
    Par défaut
    Oui j'ai autant de relations d'intégrité que de branches à mon "étoile" et j'en ai besoin.

    J'ai seulement une clef primaire (Autonum) et un index unique (autonum + une clef étrangère dont j'ai besoin pour une relation en particulier) sur ma table principale.

    Quand je vais avoir le temps je ferai un test en changeant le mode d'ouverture.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. qui est le plus rapide ?
    Par komat dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 11/02/2012, 17h09
  2. Qu'est ce qui est le plus rapide
    Par Haku64 dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 13/02/2010, 12h08
  3. Réponses: 5
    Dernier message: 05/06/2007, 13h40
  4. [Listeners] Qu'est ce qui est le plus propre?
    Par michaeljeru dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/05/2007, 12h21
  5. int vs double: qui est le plus rapide?
    Par Chewbi dans le forum C++
    Réponses: 23
    Dernier message: 25/03/2006, 02h58

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