Je me connecte à un Jet 4 DB via ODBC. La base de données Jet utilise des requêtes directes vers une base de données Oracle. Cela fonctionne jusqu'à présent (impossible d'accéder directement aux requêtes p-t, mais créer une vue sur la requête fait l'affaire).Base de données Jet et requêtes directes, paramètres
J'ai besoin d'un sous-ensemble des données renvoyées par les p-ts. Les paramètres seraient les meilleurs, mais ne sont pas supportés.
Deux questions:
1) Jet ne semble pas être en mesure de pousser certaines clauses where à Oracle. Par exemple, j'ai une requête passthrough qui renvoie 100k lignes. Une vue sur le p-t avec une seule clause flitering (par exemple "district = '1010'") est très rapide, de sorte que le traitement semble se produire sur Oracle. L'ajout de plusieurs clauses peut ralentir la requête jusqu'à une analyse, en faisant une boucle pendant quelques minutes avec une utilisation élevée du processeur. Y a-t-il de la documentation sur ce qui est transmis et ce qui est fait dans le côté Jet?
2) Il y a beaucoup de tutoriels sur la façon de créer des requêtes passthrough dynamiques avec VBA/Access. Est-il possible de faire cela (ou quoi que ce soit à cet effet) avec Jet accessible via ODBC?
Merci Martin
Edit: Désolé d'être si peu claire.
J'ai un outil de reporting qui accède à un Jet db via ODBC. Le Jet db contient des données et plusieurs requêtes passthrough à une base de données Oracle. Un cas d'utilisation typique serait un rapport de génération pour un département donné et une date donnée, en utilisant les données de Jet et d'Oracle. Cela fonctionne très bien en principe.
Le problème est que les requêtes passthrough ne peuvent contenir aucun paramètre. Une requête passthrough fonctionne comme une vue, donc je peux simplement exécuter "select * from pt_query où dep = 'a' et date = somedate". Jet, cependant, charge toutes les lignes du pt et effectue un scan complet du côté client. Ceci est inutilement lent pour une vue de 100k-rangs et je dois trouver un moyen d'éviter cela.
Pour quelques simples sélectionne, Jet ne semble laisser Oracle faire le travail dur et ne se charge pas toutes les lignes, d'où ma question 1.
Si cela ne fonctionne pas, je dois trouver un moyen pour forcer Jet à charger uniquement les données dont j'ai besoin d'Oracle pour une requête donnée. Je sais que je peux modifier pts via Access VBA, mais je ne me connecte que par ODBC, donc je ne peux que passer SQL to Jet, pas appeler le vb api (sauf s'il est possible d'aligner VB dans l'instruction SQL).
Pourquoi est-Jet nécessaire si vous interrogez Oracle? Pourquoi ne pas utiliser ODBC & ADO http://www.connectionstrings.com/oracle? – Fionnuala
Comme toujours, la stratégie métier ... Je ne peux pas créer de tables ou télécharger des données d'arbitrage sur l'entrepôt de données Oracle. Je rejoins certaines données personnalisées actuellement stockées dans Access/Jet avec des données de la base de données Oracle. – Martin
Ce que Jet transmet à une base de données de serveur dépend de la base de données du serveur concerné et de l'écriture du pilote ODBC. Jet demandera autant de métadonnées que possible pour optimiser la requête et en envoyer autant que possible au serveur pour traitement. Je regarderais votre trace SQL pour voir ce qui cause le ralentissement avec plus de critères. Je noterai que lorsque je regarde les traces dans SQL Server, de simples requêtes de Jet avec des critères sont exécutées avec un sproc paramétré générique. Je m'attendrais à quelque chose de similaire dans Oracle. –