Question

Je suis en train de redéfinir une application pour un CMS ASP.NET que je n'aime pas vraiment. J'ai apporté quelques améliorations en termes de performances uniquement pour découvrir que non seulement ce CMS utilise MS SQL mais certains utilisateurs "simplement". utiliser la base de données MS Access.

Le problème, c’est que j’ai joint quelques tables avec la version MS Access qui se trouvent dans deux fichiers différents. Je ne suis pas autorisé à déplacer simplement les tables dans l'autre fichier mdb.

J'essaie maintenant de trouver un bon moyen de "joindre l'intérieur". sur plusieurs fichiers d'accès?

Il serait vraiment dommage que je récupère toutes les données et que je le fasse par programme!

Merci

Était-ce utile?

La solution

Si vous avez accès aux MDB et que vous pouvez les modifier, vous pouvez envisager d’utiliser des tables liées. Access offre la possibilité de créer des liens vers des données externes (dans d’autres bases de données, dans des fichiers Excel, même dans SQL Server ou Oracle), puis d’effectuer vos jointures par rapport aux liens.

J'encouragerais fortement les tests de performance comme une telle option. S'il est faisable de migrer les utilisateurs des bases de données Access vers un autre système (même SQL Express), cela serait également préférable. La dernière fois que j'ai vérifié, il n'existe plus de pilote JET 64 bits pour ODBC. Par conséquent, si l'application est hébergée dans Dans un environnement 64 bits, ces utilisateurs seront connectés.

Autres conseils

Vous n'avez pas du tout besoin de tables liées. Il existe deux approches pour utiliser les données de différentes bases de données de bibliothèque qui peuvent être utilisées sans table liée. La première consiste à utiliser "IN 'c: \ MyDBs \ Access.mdb" " dans la clause FROM de votre SQL. Une de vos requêtes sauvegardées serait comme:

SELECT MyTable.*
FROM MyTable IN 'c:\MyDBs\Access.mdb'

et l'autre requête sauvegardée serait:

SELECT OtherTable.*
FROM OtherTable IN 'c:\MyDBs\Other.mdb'

Vous pouvez ensuite enregistrer ces requêtes, puis utiliser les requêtes enregistrées pour joindre les deux tables.

Vous pouvez également gérer le tout dans une seule instruction SQL en spécifiant le chemin d'accès à la MDB source pour chaque table de la clause FROM, par exemple:

SELECT MyTable.ID, OtherTable.OtherField
FROM [c:\MyDBs\Access.mdb].MyTable 
  INNER JOIN [c:\MyDBs\Other.mdb].OtherTable ON MyTable.ID = OtherTable.ID

N'oubliez toutefois pas une chose:

L'optimiseur de requêtes Jet ne sera pas nécessairement en mesure d'utiliser les index de ces tables pour la jointure (le fait de les utiliser pour les critères de champs individuels est une autre question). Cela pourrait donc être extrêmement lent (dans mes tests, ce n'est pas, mais je n'utilise pas de grands ensembles de données pour tester). Mais ce problème de performances s’applique également aux tables liées.

Dans une base de données d'accès, vous pouvez créer des "tables liées". ce point à l'autre DB. Vous devriez (je pense) pouvoir interroger les tables comme si elles existaient toutes les deux dans le même DB.

Cela signifie que vous devez modifier l'une des bases de données pour créer la table virtuelle, mais au moins vous ne déplacez pas les données, vous ne faites que placer un pointeur dessus

Dans Access, vous pouvez ajouter des tables distantes via le "Gestionnaire de tables liées". Vous pouvez ajouter les liens à un fichier Access ou à un autre ou créer un nouveau fichier Access faisant référence aux tables des deux fichiers. Une fois cette opération effectuée, les requêtes de jointure interne ne sont pas différentes de leur traitement dans une base de données unique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top