2010-06-16 5 views
0

Est-il possible de mettre en cache une requête ou un rapport la première fois qu'il est exécuté? Il semble que l'ouverture d'un rapport réexaminera la source de données. Pour certaines requêtes, la source de données ne change pas assez fréquemment pour m'inquiéter de la péremption d'un cache (les utilisateurs sont avertis lorsque la base de données change), et il serait beaucoup plus facile pour les utilisateurs d'ouvrir le signaler instantanément plutôt que d'avoir à attendre plusieurs minutes chaque fois qu'ils veulent voir les données (bien que je réalise que s'ils ferment le fichier les caches seront perdues - c'est OK).Mise en cache MS Access des rapports/résultats de la requête

Les données proviennent d'une connexion ODBC à Oracle, en utilisant Access 2003.

Répondre

0

Pourriez-vous garder peut-être le rapport ouvert tout le temps la base de données est ouverte? Ouvrez-le caché lorsque la base de données est ouverte.

DoCmd.OpenReport "YourReport", acViewPreview,,,acHidden 

Ne le fermez jamais lorsque la base de données est ouverte. En outre, comme vous pouvez gérer la persistance du cache, vous pouvez peut-être stocker les données du rapport dans une table locale pour un accès plus rapide. Comme les utilisateurs savent quand de nouvelles données sont disponibles, donnez-leur un bouton de commande qui vide la table locale et remet les dernières données Oracle.

+0

Le chargement de certaines données dans des tables locales lorsque le fichier est ouvert pourrait certainement aider. Access a-t-il une sorte d'événement OnStartup qui se déclenche lorsque l'utilisateur ouvre le fichier? – FrustratedWithFormsDesigner

+1

Il ya deux façons de faire cela: appeler une fonction à partir d'une macro autoexec; ou définissez un formulaire à ouvrir automatiquement lorsque la base de données est ouverte --- et appelez votre procédure de mise à jour de la table de cache à partir de l'événement open de formulaire. Je ne suis pas sûr que la table de cache soit une bonne pratique, mais si cela facilite la vie de vos utilisateurs ... – HansUp

+1

Si vous utilisez l'approche de la table de cache et que ce sont les données pour votre rapport de page 36K, vous voudrez peut-être mettre en cache la table dans une MDB distincte et lier à celle-ci à partir de votre application principale MDB. L'importation et la suppression de grandes quantités de données peuvent gonfler votre base de données; Gardez le ballonnement hors de votre base de données d'application. – HansUp

1

La plupart des bases de données du serveur mettent en cache des instructions SQL ad hoc. En d'autres termes, si vous exécutez le rapport, Oracle doit mettre en cache le résultat et, s'il voit à nouveau l'instruction SQL, transmettre le résultat à partir du cache au lieu de le récupérer entièrement. Je sais que SQL Server fait cela et je suppose que toute base de données au niveau de l'entreprise fera la même chose. Avec la mise en cache, bien sûr, il y a une forme de vérification pour s'assurer que les données mises en cache sont toujours à jour. Je ne sais pas quel niveau de contrôle le DBA a sur la façon dont cela fonctionne, mais vous pourriez envisager d'implémenter ce côté serveur. Une table temporaire peut également être une solution.

+0

Intéressant ... Je n'avais pas pensé à une solution sur le serveur. Je ne sais pas quel niveau de cache est activé sur le serveur. Je ne sais pas quelle est la lenteur des performances dans Oracle qui exécute la requête et dans Access qui gère les résultats ... – FrustratedWithFormsDesigner

+0

Les choses à éviter dans Access sont des jointures hétérogènes entre le serveur et les tables Access, les clauses WHERE avec des champs non indexés et ORDER PAR ou OERE utiliser des expressions. Certaines de ces choses peuvent fonctionner s'il y a des critères dans la clause WHERE qui limitent suffisamment le jeu de résultats pour qu'il ne soit pas nécessaire d'extraire beaucoup d'enregistrements. Le tri et le regroupement dans les rapports peuvent être un gros problème s'ils ne se trouvent pas dans les champs appropriés. –

Questions connexes