2009-05-12 20 views
7

Mi escenario: el equipo A tiene una base de datos de Access que contiene tablas vinculadas. Esas tablas vinculadas en realidad residen en otra base de datos de Access en la Computadora B. Nada inusual aún.¿Cómo puedo "encadenar" tablas vinculadas en Access?

Ahora creamos una base de datos de SQL Server y establecemos enlaces a esas tablas en la base de datos de Access en la Computadora B; configuramos un DSN de máquina para definir la conexión ODBC necesaria en el equipo B. Ahora, la base de datos de acceso B contiene tablas locales y tablas SQL vinculadas.

Base de datos de acceso A ahora quiere vincular a las nuevas tablas de la base de datos de Access B, pero solo aparecen sus tablas locales en el cuadro de diálogo para agregar una tabla vinculada. Parece que no se puede "vincular a una tabla vinculada" en Access ...

¿Pero esto es cierto? Lo que queremos hacer es presentar los enlaces de la tabla SQL de la base de datos B a la base de datos A como si fueran tablas locales; es decir, la base de datos A no tiene conocimiento de que las nuevas tablas en la base de datos B no son realmente locales.

Por supuesto, podríamos vincular las tablas de SQL directamente en la base de datos A configurando un DSN en esa computadora, pero no queremos hacer esto. Nos gustaría utilizar la computadora/base de datos B como un nexo o "puerta de enlace" que presenta tablas locales y SQL a la perfección a otras aplicaciones cliente de Access en la red. Esta es solo una configuración temporal que nos permitiría migrar gradualmente todas las aplicaciones de Access Access a tablas basadas en SQL Server, sin tener que modificar una gran cantidad de código.

¿Se puede hacer esto? ¿Hay alguna otra solución o escenario viable en el que no hayamos pensado?

+1

No necesita un DSN en ninguna máquina; utilice una cadena de conexión sin DSN en su lugar. –

Respuesta

5

Nop - sólo se puede vincular a las tablas reales - que tiene que volver a crear los enlaces de servidor SQL que hizo en la base de datos B para la base de datos Una

Si los datos del servidor SQL no cambia mucho y sólo lo está utilizando para búsquedas podría importar los datos en tablas de acceso reales a las que podría vincular.

EDITAR

Otra solución es vincular las tablas dinámicamente - de esa manera usted no tiene que añadir el DSN manualmente para cada equipo.Utilizar una cadena de conexión o menos así:

ODBC;Driver={SQL Server};Server=<server name/IP>;Database=<database>;UID=<user>;PWD=<password> 

Esto vincula una tabla

Dim db As Database 
Dim TD As TableDef 
Dim sTableName As String ''MS Access name (can be same as SQL Server name) 
Dim sServerTableName As String ''SQL Server Name 

sTable = "Table1" 
sServerTableName = "dbo.Table1" 
sServerConnect = "ODBC;Driver={SQL Server};Server=Localhost;Database=DB1;" 

Set TD = db.CreateTableDef(sTableName) 
TD.Connect = sServerConnect 
TD.SourceTableName = sServerTableName 

db.TableDefs.Append TD 
db.TableDefs.Refresh 
0

¿Podría crear una consulta/vista en B que sea solo una vista de la tabla vinculada en C, para que A pueda acceder a la consulta/vista en B (que en realidad es la tabla en C)?

como:

 

Linked Query on A  ->  Query on B 
           : 
         Linked table on B  -> Real table on C 

edición después comentario: OK, al parecer, no se puede vincular a las consultas, por lo que no va a funcionar entonces.

Otra idea: ¿Puede configurar la replicación entre B y C para que todas las tablas de C se repliquen en B, donde A puede acceder a ellas?

+0

No se puede vincular a las consultas ... –

+0

¿Qué quiere decir con "replicación"? Si se refiere a la replicación de Jet, no, no funciona de esa manera, y las tablas vinculadas de ODBC presentan varios problemas en un MDB replicado. –

+0

Sí, me refiero a la replicación de Jet. OK parece que esa idea tampoco ayudará. – codeulike

0

En cuanto a la sugerencia de consulta, es posible utilizar una cláusula IN 'C:\OtherDatabase.mdb' en una cláusula FROM:

SELECT qryMyTable.* 
FROM qryMyTable IN 'c:\OtherDatabase.mdb'; 

Esto mostrará en la base de datos donde se almacena la consulta el contenido de la consulta en la otra base de datos. Si esa ruta a la otra base de datos no cambia, puede usar este método para vincularse con las tablas vinculadas de esa otra base de datos.

+0

Esto supone que las dos bases de datos comparten el mismo archivo de grupo de trabajo. – onedaywhen

+0

Si no lo hacen, puede proporcionar una cadena de conexión completa con la información de autenticación adecuada y la ubicación adecuada del archivo de grupo de trabajo. –

+0

¿Cómo se especifica la ruta al archivo de grupo de trabajo (mdw)? Me rendí hace años después de que Access MVP finalmente me convenció de que no sería posible debido a la arquitectura de Jet. Pero si sabes cómo hacerlo, estaría encantado de aprender. Te diré algo: Comenzaré una nueva pregunta sobre SO y podrás ganar algún representante respondiéndola :) Mira este espacio ... – onedaywhen

Cuestiones relacionadas