Bonjour,
Je viens de développer une base destinée à tourner en réseau. Tout fonctionnait bien en version 1 fichier, depuis mon poste ou depuis d'autres postes réseau, mais de façon un tout petit peu plus lente depuis le réseau.
J'ai éclaté la base en deux fichiers (données et programme). Les performances se sont ecroulées depuis un poste réseau.
A l'analyse du problème, il s'agit de recours très fréquents à la fonction Dlookup, que je ne savais pas aussi gourmande en temps de traitement (accès disque ?)
J'ai revu mon code et j'ai supprimé la totalité des Dlookup dans les traitements internes aux formulaires en utilisant des recordset. Le résultat est excellent.
Il me reste à améliorer le temps de chargement des formulaires.
Au chargement, le formulaire va lire de nombreuses valeurs dans différentes tables pour se configurer en fonction de l'utilisateur et de l'environnement.
J'aurais surement du programmer différement (ce que j'aurais fait si j'avais été un pro).
J'en arrive à ma question :
j'ai mis le code suivant dans un module
Les tables que j'interroge de cette façon ne sont pas nombreuses et pas très grosses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Function LireTable(nomtable, ValeurClé, NomChamp) Quoi = "[" & NomChamp & "]" où = nomtable & "s" quand = "[" & nomtable & "]='" & ValeurClé & "'" LireTable = DLookup(Quoi, où, quand) End Function
Je pense qu'il doit être possible de remplacer mon code par:
- l'ouverture d'un recordset par table importante dès l'ouverture de l'application, ces recordset resteraient actifs pendant toute la cession
- une fonction par recordset faisant la même chose que le code précédent.
Mais je tourne en rond dans toutes les erreurs possibles depuis plusieurs heures.
Merci de vos lumières
Jean
Partager