2014-07-22 2 views
0

Je travaille actuellement sur une requête dans Access 2010 et j'essaie de faire fonctionner la requête ci-dessous. J'ai la chaîne de connexion entre ma base de données locale et le serveur que je traverse pour travailler très bien.Comment utiliser la table DB locale dans une requête directe?

Select column1 , column2 from serverDB.dbo.table1 where column1 in (Select column1 from tbl_Name1)

Dans cette situation table1 est la table sur le serveur que je passe à travers pour obtenir, mais la table_name1 est la table qui est en fait dans mon DB d'accès que je suis en train d'utiliser pour créer des contraintes sur les données que je tire du serveur.

Lorsque j'essaie d'exécuter la requête, j'obtiens l'erreur qu'elle ne pense pas que tbl_Name1 existe.

Toute aide est appréciée!

Répondre

0

Je pense que le problème est qu'une requête de passage est exécutée sur le serveur. Comme l'une des tables se trouve dans le fichier Access local, elle ne trouvera pas la table. Solution de contournement possible si vous devez conserver l'authentification unique, vous pouvez créer une chaîne SQL avec les résultats de la requête imbriquée plutôt qu'avec la chaîne de requête elle-même (en fonction du nombre de résultats, cela peut être pratique ou non).

par exemple Au lieu de Select column1 from tbl_Name1 vous utilisez "c1result1","c1result2",....

+0

Existe-t-il un moyen de le faire fonctionner? – tarheel

+1

Si les tables sont liées, vous serez en mesure de traiter les tables car elles sont locales, mais il peut y avoir une perte de performance avec la requête – ashareef

+0

Discussion similaire http://stackoverflow.com/questions/23615708/sql-join- de-microsoft-access-table-à-autre-table-à travers-odbc-using-pass-th – ashareef

0

Je suis juste tombé sur une solution qui peut aider les autres dans une situation similaire.

Cette approche est simple car vous pouvez simplement exécuter une requête sur votre base de données Access locale et obtenir tout ce dont vous avez besoin en une fois. Cependant, un grand nombre de filtrages/résultats de barattage peuvent être effectués sur votre propre ordinateur local en coulisses, par opposition au serveur distant, il n'est donc pas forcément rapide.

étapes

  1. Créer une requête, en font une propriété « Pass Through » requête et configurer sa « connexion ODBC » pour se connecter à la base de données distante.
  2. Écrivez le passage à travers la requête, quelque chose comme SELECT RemoteId From RemoteTable et donnez votre passage à travers la requête un nom, peut-être PassThroughQuery
  3. Créer une nouvelle requête, faire une requête régulière « Sélectionner ». Ecrivez votre nouvelle requête, en utilisant la requête de passage que vous venez de créer en tant que table dans cette nouvelle requête (semble bizarre d'utiliser une requête en tant que table, mais cela fonctionne) et joignez cette PassThroughQuery "table" à votre locale table et filtrer en fonction des valeurs de la table locale, quelque chose comme SELECT R.RemoteId, L.LocalValue FROM PassThroughQuery R INNER JOIN LocalTable L ON L.LocalId = R.RemoteId where L.LocalValue = 'SomeText'

Cette approche vous permet de mélanger/joindre les résultats d'une passe par la requête et les données dans une table de base de données d'accès local proprement, bien que potentiellement lentement s'il y a beaucoup de données impliquées.

Questions connexes