Actualizar vínculos SQL en Access masiva y simple

Ojalá puedan ayudarme, me he dado vueltas "googleando" sin éxito.
Tengo una Base de Datos en Access la cual contiene varias tablas vinculadas desde SQL. La versión de Access es "XP" (2002) por si es relevante el dato (es casi igual al Access 2003).
El tema es que necesito que esa aplicación sea utilizada por varios usuarios en diferentes servidores, cada uno de los cuales tiene un ODBC y un nombre de DSN y DATABASE diferente. Las Bases de Datos en que debe usarse son totalmente independientes. Sólo coinciden los nombres de las tablas y las estructuras de las mismas.
Necesito que los usuarios puedan actualizar los vínculos, es decir, cambiar el origen de datos a su propio SQL, sin necesidad de que utilicen el Administrador de Tablas vinculadas, sino que puedan poner los parámetros (nombre del ODBC, Usuario de la BD y Password de la BD en SQL) y se actualicen de una sola vez todas las tablas vinculadas.
Eso podría ser mediante un parámetro en el acceso directo de la Aplicación, o mediante
Código que presente al usuario un cuadro de dialogo donde escribir, o mediante un campo en un formulario, o mediante un archivo de conexión donde se escriban los datos; da lo mismo, la cosa es que pueda indicar fácilmente el nuevo origen de datos y se actualicen automáticamente todas las tablas vinculadas al SQL.
Como dato adicional que tal vez interese es que todas las tablas vinculadas pertenecen al mismo origen de datos ODBC y la idea es poder poner otro origen de datos, nuevamente el mismo para todos.
Ojalá puedan indicarme como hacerlo, realmente he ocupado muchísimo tiempo en esto y lo necesito con urgencia!

1 respuesta

Respuesta
1
Para revincular las tablas debes utilizar el TransferDatabase. Yo tengo algo como esto:
DoCmd. TransferDatabase acLink, "Bases de datos ODBC", strCadenaODBC, acTable, NombreTablaOrigen, NombreTablaDestino
Se trata de crear la cadena strCadenaODBC con los valores adecuados que seleccione el usuario.
Ojo, previamente deberás eliminar (si existe) la tabla actualmente vinculado.
http://www.mvp-access.com/foro
Xavi, muchas gracias por tu respuesta.
Ojalá me puedas ayudar un poco más, la verdad no soy demasiado experto en Visual Basic y no sé exactamente dónde escribir el código y esas cosas.
Te cuento cómo voy:
1.- Creé un botón en un formulario que al hacer clic en él se ejecuta la macro "ActivarVinculos"
2.- Hice la siguiente macro:
a) EstablecerAdvertencias en "NO"
b) AbrirConsulta que crea una tabla llamada "TABLA1". Esa tabla es una tabla local que tiene "cualquier cosa" (da lo mismo) simplemente para asegurarme que exista. Lo que logro en la práctica es eliminar la tabla vinculada reemplazándola por esta tabla local "puente"
c) EliminarObjeto elimina la "TABLA1" (el paso b impide que si la TABLA1 no existe por alguna razón la macro se detenga)
d) TransferirBaseDatos con los siguientes parámetros:
Tipo de transferencia: Vincular
Tipo de Base de Datos: Bases de datos ODBC
Nombre de la Base de Datos: ODBC;DSN=BASE;UID=BASE;PWD=BASE;DATABASE=BASE (Mi BD de ejemplo se llama BASE y el usuario y el PASSWORD es BASE)
e) Tipo de objeto: Tabla
f) Origen: dbo.TABLA1
d) Destino: dbo.TABLA1
Hasta aquí voy. Ejecuto la consulta y vincula perfecto, el tema está en la Cadena de Conexión:
ODBC;DSN=BASE;UID=BASE;PWD=BASE;DATABASE=BASE
¿Cómo hago para que el usuario escriba el nombre del ODBC, el Usuario de la BD y la Password?
Supongo que en vez de usar una macro puedo escribir todo esto en código, con un poco de esfuerzo y prueba y error creo que puedo hacerlo, si es necesario hacerlo por ese lado y no por una macro.
El tema básicamente es: en tu respuesta me dices: "Se trata de crear la cadena strCadenaODBC con los valores adecuados que seleccione el usuario" ¿Cómo hago eso? (Que el usuario pueda indicar los valores adecuados para la cadena)
Gracias de nuevo
1. Necesitas (creo) hacerlo por código
2. Enlugar de que el usuario tenga que escribir los datos, es posible que pudieras tener una tabla con distintos registros que contuvieran esos datos y el usuario simplemente señalara con que backend quiere trabajar. Tu construyes la cadena ODBC por código y listo.
Xavi
Finalmente lo que hice fue modificar mi macro para que:
1.- AbrirConsulta: crea una tabla llamada "TABLA1" (cualquiera)
2.- EliminarObjeto: elimina la "TABLA1" (con el paso anterior me aseguro de que exista)
3.- EjecutarCódigo: que llama a la Función Conectar()
Luego creé el siguiente módulo:
Function Conectar()
DoCmd.TransferDatabase acLink, "Bases de datos ODBC", "ODBC;DSN=" & [Forms]![Conectar]![DSN] & ";UID=" & [Forms]![Conectar]![UID] & ";PWD=" & [Forms]![Conectar]![PWD], acTable, "TABLA1", "TABLA1"
End Function
Finalmente me hice un formulario llamado "Conectar" donde el usuario escribe el DSN, el NO OBSTANTE (usuario) y la PWD, luego hace clic en un botón que llama a la Macro y "Voilá". Funciona!
Gracias por el empujón, me sirvió para saber por donde seguir investigando.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas