2014-07-12

Cambiar programáticamente la ruta de tablas vinculadas en Access

Title Al cambiar las bases de datos de carpeta o de unidad es posible que se rompa la ruta de las tablas vinculadas. Desafortunadamente Ms Access no permite establecer rutas con referencias relativas para las tablas vinculadas. En el caso de que tengamos que cambiar la ruta, lo podemos hacer manualmente o mediante código.

Manualmente

1. Clic con el botón secundario sobre la tabla vinculada, seleccionamos Administrador de tablas vinculadas.
2. Activamos la casilla de verificación Preguntar siempre por la nueva ubicación.
3. Marcamos la casilla de verificación de las tablas que deseamos cambiar y clic en Aceptar.
4. Seleccionamos en el cuadro de diálogo la nueva base de datos y clic en Abrir.

Programáticamente

En el primer ejemplo, tenemos solamente una tabla vinculada a una base de datos en la misma carpeta que el fichero de Access actual. Es necesario escribir tanto el nombre de la tabla vinculada como el de la base de datos origen de la misma.

Sub CambiarRutaTablaVinculada()
    Dim dbs As DAO.Database
    Set dbs = CurrentDb 
    dbs.TableDefs("Tabla vinculada").Connect = ";DATABASE=" _
        & CurrentProject.Path & "\BBDD de la tabla vinculada.mdb"
    dbs.TableDefs("Tabla Vinculada").RefreshLink 
End Sub
End Sub
En este segundo ejemplo, se actualizan todas las tablas vinculadas. Se asume que las bases de datos origen de las mismas están en la misma carpeta que el fichero de Access actual.

Sub CambiarTodasRutasTablaVinculadas()
    Dim fso As New FileSystemObject
    Dim fileName As String
    Dim dbs As DAO.Database
    Dim tdf As DAO.TableDef
    Set dbs = CurrentDb
    For Each tdf In dbs.TableDefs
    fileName = fso.GetFileName(tdf.Connect)
        If fileName <> "" Then
            dbs.TableDefs(tdf.Name).Connect = ";DATABASE=" _
                & CurrentProject.Path & "\" & fileName
            dbs.TableDefs(tdf.Name).RefreshLink
        Else
        End If
    Next tdf
End Sub

8 comentarios:

  1. Muchas gracias por este ejemplo, llevaba mucho tiempo buscado como hacer esto.

    ResponderEliminar
    Respuestas
    1. Me alegro de que te haya sido de utilidad. Gracias por el comentario. Saludos.

      Eliminar
  2. Buenas tardes,
    El codigo de tabla individual me funciona perfecto, pero en el de todas las tablas no, me sale un mensaje de error que dice
    "No se ha definido el tipo definido por el usuario"

    Gracias
    Ricardo

    ResponderEliminar
    Respuestas
    1. Buenos días, ¿qué es lo que has intentado hacer para averiguar el origen del error?
      Saludos

      Eliminar
    2. ve al editor VBA\Herramientas\Referencias y activa las casillas
      - Visual Basic for applications
      - Microsoft access 15.0 object library
      - Ole automation
      - Microsoft Visual Basci por Applications ext...
      - Microsoft office 15.0 Access database engine...
      - Miscrosoft Scripting Runtime

      Eliminar
  3. Y si no esta atado a una base de datos si no que esta vinculado a un excel

    ResponderEliminar

Nube de datos