Pregunta

Estoy rediseñando una aplicación para un CMS ASP.NET que realmente no me gusta.He realizado algunas mejoras en el rendimiento sólo para descubrir que este CMS no sólo utiliza MS SQL sino que algunos usuarios "simplemente" utilizan la base de datos MS Access.

El problema es que tengo algunas tablas que uno internamente, que con la versión de MS Access están en dos archivos diferentes.No se me permite simplemente mover las tablas al otro archivo mdb.

Ahora estoy tratando de encontrar una buena manera de realizar una "unión interna" entre archivos de base de datos de acceso múltiple.

¡Realmente sería una lástima si hubiera obtenido todos los datos y lo hiciera mediante programación!

Gracias

¿Fue útil?

Solución

Si tiene acceso a los MDB y puede cambiarlos, podría considerar utilizar tablas vinculadas.Access brinda la posibilidad de vincular datos externos (en otros MDB, en archivos de Excel, incluso en SQL Server u Oracle) y luego puede realizar sus uniones con los vínculos.

Recomiendo encarecidamente probar el rendimiento de esta opción.Si es factible migrar usuarios de las bases de datos de Access a otro sistema (incluso SQL Express), eso también sería preferible; la última vez que verifiqué, ya no hay controladores JET de 64 bits para ODBC, por lo que si la aplicación alguna vez está alojada en En un entorno de 64 bits, estos usuarios serán expulsados.

Otros consejos

No necesitas tablas vinculadas en absoluto.Hay dos enfoques para utilizar datos de diferentes BMD que se pueden utilizar sin una tabla vinculada.La primera es utilizar "IN 'c:\MyDBs\Access.mdb'" en la cláusula FROM de su SQL.Una de sus consultas guardadas sería como:

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

y la otra consulta guardada sería:

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

Luego podría guardar esas consultas y luego usarlas para unir las dos tablas.

Alternativamente, puede administrarlo todo en una única instrucción SQL especificando la ruta al MDB de origen para cada tabla en la cláusula FROM de la siguiente manera:

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

Sin embargo, tenga en cuenta una cosa:

El optimizador de consultas Jet no necesariamente podrá usar los índices de estas tablas para la unión (si los usará para criterios en campos individuales es otra cuestión), por lo que esto podría ser extremadamente lento (en mis pruebas, no lo es). pero no estoy usando grandes conjuntos de datos para realizar pruebas).Pero ese problema de rendimiento también se aplica a las tablas vinculadas.

Dentro de una base de datos de acceso puede crear "tablas vinculadas" que apunten a la otra base de datos.Debería (creo) poder consultar las tablas como si ambas existieran en la misma base de datos.

Significa que tienes que cambiar una de las bases de datos para crear la tabla virtual, pero al menos no estás moviendo los datos, solo haciendo un puntero hacia ellos.

Dentro de Access, puede agregar tablas remotas a través del "Administrador de tablas vinculadas".Puede agregar los vínculos a un archivo de Access u otro, o puede crear un nuevo archivo de Access que haga referencia a las tablas de ambos archivos.Una vez hecho esto, las consultas de unión interna no son diferentes a realizarlas en una única base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top