Lenteur sur Access 2007 ???

Le
Ear Plugs
Bonjour le ng,

J'ai exporté une base de A97 vers A2007 depuis un vieux coucou vers une bête
de course.

Et ben le traitement est beaucoup plus lent sur la nouvelle version !

J'ai résolu le problème en passant une référence sur un recordset plutôt que
de l'ouvrir à chaque appel de la fonction.
Sous A97, ça ne posait pas de problème majeur de performances tout en ayant
des fonctions assez autonomes (un minimum d'arguments).

Là il s'agit d'analyser un fichier texte de 30000 lignes avec des anomalies
et des caractères non standard puis de le convertir vers une table. On passe
d'environ 1 minute sur A97 à plus de 10mn sur A2007 (j'ai arrêté le
traitement avant la fin, pfffffff ! )

Avec ma modif, on revient à un temps de traitement plus raisonnable de
l'ordre de la minute.
Note : la table cible est attachée et non pas incluse dans le frontal.

D'où ma question :

Comment se fait-il qu'une transaction du type
set dbbd = currentdb
set rcMyrecordset = dbbd.openrecordest("toto")
soit plus lente dans la nouvelle version de A2007 ?

Qu'est-ce que ça donnerait, à votre avis, si je générais une requête SQL à
chaque ajout de ligne plutot que d'attaquer le recordset ?

Au plaisir de vous lire.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
3stone
Le #18128241
Salut,

"Ear Plugs"
| J'ai exporté une base de A97 vers A2007 depuis un vieux coucou vers une bête
| de course.


Mauvaise pioche ;-)

Un P3 tourne au moins aussi bien un Access97 qu'une "bête" actuelle
que l'on émascule avec des softs bling bling - a commencer par l'OS ;-)
De plus, A97 était totalement "optimisé" DAO.


| Et ben le traitement est beaucoup plus lent sur la nouvelle version !
|
| J'ai résolu le problème en passant une référence sur un recordset plutôt que
| de l'ouvrir à chaque appel de la fonction.
| Sous A97, ça ne posait pas de problème majeur de performances tout en ayant
| des fonctions assez autonomes (un minimum d'arguments).
|
| Là il s'agit d'analyser un fichier texte de 30000 lignes avec des anomalies
| et des caractères non standard puis de le convertir vers une table. On passe
| d'environ 1 minute sur A97 à plus de 10mn sur A2007 (j'ai arrêté le
| traitement avant la fin, pfffffff ! )


A2007 à subit de grosse modification, même internes...
Malgré que l'on a gardé une série de fonctions pour "raison de compatibilité",
les changements et fonctionnements par défaut on pas mal changés.
Il est également primodial de s'assurer être totalement au top questions
mises à jour.


| Avec ma modif, on revient à un temps de traitement plus raisonnable de
| l'ordre de la minute.
| Note : la table cible est attachée et non pas incluse dans le frontal.
|
| D'où ma question :
|
| Comment se fait-il qu'une transaction du type
| set dbbd = currentdb
| set rcMyrecordset = dbbd.openrecordest("toto")
| soit plus lente dans la nouvelle version de A2007 ?
|
| Qu'est-ce que ça donnerait, à votre avis, si je générais une requête SQL à
| chaque ajout de ligne plutot que d'attaquer le recordset ?

Si possible, baser le formulaire directement sur la table ou requête source...
De plus, l'ouverture d'un recordset par le VBA, juste pour ajouter un
enregistrement n'a jamais été un méthode conseillée.
Lorsque le traitement le permet, SQL est toujours à préférer et seul les traitements
multiples sur une série d'enregistrement sont alors réalisés par VBA et recordset,
principalement par simplification et rarement pour les performances.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Publicité
Poster une réponse
Anonyme