Bonjour à tous,
Je poste ici car peu de réponses dans la section Access.
J'ai des interrogations concernant un projet de migration Access vers SQLServer portant sur l’exécution des requêtes, La documentation Microsoft restant vague à ce sujet.
En bref l'existant : j'ai une solution Access développée classiquement avec d'un côté un fichier contenant les données, exploité via tables liées par une autre base contenant formulaires, macros, code vba,...
Je souhaite migrer dans un premier temps les données vers SQLServer en gardant les formulaires access tels quels (moyennant ajustements), en faisant pointer les tables attachées vers SQLServer.
Outre le fait de bénéficier des avantages d'un vrai sgbd, l’intérêt est aussi de limiter le trafic réseau puisque théoriquement, les requêtes sont exécutées par le serveur de base de données.
Néanmoins, j'ai vraiment quelques interrogations concernant le site d'exécution des requêtes, les voici :
1. Les requêtes sql sur des tables liées sqlserver d'un formulaire access démarré sur un poste local sont-elle réellement toutes exécutées par le serveur base de données ?
2. Si non, quelles types de requêtes sont exécutées sur le serveur ? sont exécutées en local ? hybrides ? je pense aux requêtes en sql spécifique Access ou embarquant des fonctions, requête paramétrée, ...etc...
3. Si non, comment savoir qui exécute réellement la requête (poste local ou serveur ou les deux) ? Y a-t-il un outil pour monitorer ça ?
4. Où/comment sont exécutées les commandes VBA type DLookup,... ?
5. Le choix du site d’exécution est-il implicite, c'est à dire automatiquement décidé par le système selon la syntaxe de la requête ?
J'espère qu'un spécialiste ou autre pourra me faire un retour d'expérience pouvant répondre à mes interrogations.
Toutes autres remarques ou conseils seront bien sûr appréciés.
D'avance merci
**** edit ********
J'ai importé mes données telles quelles dans une base sqlserver sur serveur et fait un simple test.
J'ai créé volontairement une requête que je sais longue car non optimisée (pas d'index,...) du type [select * from matable order by monchamp desc].
Cette requête, exécutée sur mon poste local dans Access, sur une la base access (fichier hébergé sur un serveur de fichiers, donc transit des données via le réseau), prend... un certain temps.
La même requête, exécutée sur mon poste local, Dans Access, mais sur la table liée équivalente dans SQLServer (SQLServer hébergé sur un serveur, donc transit des données via le réseau), est immédiate.
Dans le monitoring SQLServer, je vois bien la requête s'exécuter.
Un fetch vers le dernier enreg dans Access est immédiat.
De la même façon, une requête du type [select * from matable where monchamp = 'abcde'] apparait bien dans le moniteur de requête de SQLServer, ce qui me fait penser que la requête est bien exécutée par le serveur et que seul l'enregistrement résultat transite via le réseau vers mon mon poste local. (et non pas un mécanisme du style rapatriement de toute la table en local, puis application du filtre.
Mais entre mon ressenti et la réalité, une confirmation d'un spécialiste serait la bienvenue
***********
Partager