Quizás esta función de Emilio Sancha te pueda servir (esta que te pongo es una adaptación que hice para un proyecto en el que estoy metido, pero puedes visitar su web y ver la función original):
'* Código original sacado de http://www.mvp-access.es/emilio/ y adpatado
'* ReVinculaTablas
'* Revincula las tablas remotas a la base de datos pasada como parámetro
'* Argumentos: strBaseDatos => ruta de la base de datos
'* strPassword => (opcional) contraseña de la base de datos
'* uso: ReVinculaTablas (miRuta & "\NombreBD.accdb")
'* ESH 28/08/04 16:30
'* ESH 12/08/08 17:25 incluyo la posibilidad de usar contraseñas
Function ReVinculaTablas(strBaseDatos As String, Optional strPassword As String) As Boolean
Dim i As Long, _
dbs As DAO.Database, _
miRuta as string
On Error GoTo ReVinculaTablas_TratamientoErrores
' Verifico que la ruta de la base de datos remota es correcta
If Len(Dir(strBaseDatos)) = 0 Then
Call miMsg("No se encuentra la base de datos """ & strBaseDatos & """", 1)
GoTo ReVinculaTablas_Salir
End If
Set dbs = CurrentDb
For i = 0 To dbs.TableDefs.Count - 1
' Si dbs.TableDefs(i).connect no está vacío, es por que se trata de una tabla vinculada
If (dbs.TableDefs(i).Connect <> "") Then
' aplico la "nueva" ruta a la tabla vinculada
dbs.TableDefs(i).Connect = "MS Access;PWD=" & strPassword & ";DATABASE=" & strBaseDatos & ";"
' actualizo la conexión
dbs.TableDefs(i).RefreshLink
End If
Next i
' Confirmo la correcta ejecución
ReVinculaTablas = True
ReVinculaTablas_Salir:
Set dbs = Nothing
On Error GoTo 0
Exit Function
ReVinculaTablas_TratamientoErrores:
Select Case Err
Case 3024, 3055
Call miMsg("No se encuentra la base de datos """ & strBaseDatos & """", 1)
Case 3055, 3078, 3011 ' la tabla no pertenece a esta base de datos
Resume Next
Case Else
Call miMsg("Error " & Err.Number & " en proc. ReVinculaTablas de mdlConfiguracion (" & Err.Description & ")", 1)
End Select
Resume ReVinculaTablas_Salir
End Function
Pasos a seguir que haría yo:
1º/ Copiar esa función en un modulo
2º/ En la BD donde están las consultas, formularios..., crearía una tabla (la puede poner oculta cambiándole las propiedades, o anteponiéndole USys al nombre, para que access la interprete como "de sistema") con esta estructura: OrigenDatos(texto), y la dejaría vacía. Esta tabla la puedes llamar, por ejemplo TOrigenDatos o USysOrigenDatos
3º/ Al arrancar la aplicación (la BD front end), habría que hacer las siguientes comprobaciones:
1.- ¿Hay algún valor en el campo OrigenDatos de esta nueva tabla?
Si la respuesta es No, lanzas un mensaje (o abres un formulario) y obligas al usuario a buscar la ruta u nombre completo de la BD back end( la que tiene las tablas), y su ruta y nombre se guardará en esta tabla, y revinculas el origen por medio de la función;
Si la respuesta es si, hay que hacer una segunda comprobación: que la ruta y archivo que están almacenados sean los correctos. Si no lo son, actúas como en el punto anterior, y si lo son, revinculas para asegurarte o no haces nada, pues ya están bien vinculadas (en teoría)
En mi aplicación, tengo un formulario inicio, que al cargarlo realiza esta comprobación:
Private Sub Form_Load()
On Error Resume Next
Dim miRuta As String
'PASO 00: Si la carpeta CV_Datos no existe, lanzamos aviso y salimos de la aplicación
' Si existe, revinculamos las tablas con Gicova_datos, por si se movió la carpeta de la aplicación
miRuta = Application.CurrentProject.Path & "\CV_Datos"
If Dir(miRuta, vbDirectory) = "" Then
Call miMsg("No se puede iniciar la aplicación, pues no existe el archivo de datos", 1, , , , "ERROR DE APLICACIÓN")
DoCmd.Quit
Else
ReVinculaTablas (miRuta & "\Gicova_datos.accdb")
End If
...
En mi caso, la carpeta donde va el archivo con las tablas es una carpeta llamada CV_Datos en el mismo directorio del archivo donde están los formularios y demás...
El Call miMsg(...) es un procedimiento para mostrar MsgBox personalizados (puedes consultarlo en la web del experto Neckkito)
Bueno, espero que todo este rollo, te sirva de algo... XD