Pour ma part j'utilise des requêtes temporaires comme toi, créées par le code
C'est une pratique que j'utilise aussi fréquement. Elle n'est malheureusement pas recommandée et ce pour plusieurs raisons
Le fait de stocker une requete dans le code VBA impose une modification du code à chaque modification du résultat souhaité. Ce qui arrive fréquement lors des quelques jours suivant le recette. En outre cela évite donc la maintenance évolutive et corrective de l'application et je vous passe les contraintes de déployement dans le cadre de mde.
De plus les objets querydef de la base de données sont optimisées pour traiter les index des tables. On note ainsi une différence notoire entre
Db.OpenRecordset("SELECT * FROM Matable")
Et
Db.Querydefs("R01").OpenRecordset
Où R01 est évidemment la même requête qu'au dessus.
Enfin, dans le cadre d'insertion multiples, une requête INSERT est bien plus rapide qu'une accumulation de AddNew et Edit de recordset.
, je suis en revanche beaucoup plus mitigé sur les formulaires créés dynamiquement, même si je suis l'auteur d'un tutoriel qui en parle.
Tout le monde connait mon point de vue sur ces formulaires
Même si ton tuto est génial cafeine pour l'affichage pseudo continu, on peut pas faire autrement
Je pense que tes calculs VBA pourraient peut être gagner en vitesse en utilisant un peu plus les ressources SQL du moteur JET, j'ai noté de nets gains de performance dans la pratique.
Un réel problème lorsque l'on utilise VBA est justement la déclaration et la libération des objets. En outre les méthodes CurrentDb et CodeDB sont de véritables pièges. En effet à chaque appel, elle instancie un nouvel objet database correspondant au lieu de retourner celui utilisé. Et oui ce sont des fonctions et non des propriétés Set.
Ainsi, il ne faut pas tomber dans le piege du
1 2 3
| While i<1200
CurrentDb.Execute ...
Wend |
Mais bien :
1 2 3 4 5 6
|
Dim Db as dao.database
set Db=CurrentDb
While i<1200
Db.Execute ...
Wend |
Dans le premier cas, à chaque passage dans le while un nouvel objet sera instancié et donc de la mémoire allouée ... et donc du ralentissement.
Enfin pour ce qui est des performances, je reste fidèle au bon vieux DAO qui a certes 3 versions de VB de retard mais qui est bien plus rapide que ADO dans le cadre d'une manipulation Jet
Partager