Vincular varias tablas de varias bases de datos

Encontré este ejemplo googleando porque necesito poder revincular las tablas de mi aplicación access con las distintas bases de datos, por años, ya que tengo las tablas ocultas para que no sean copiadas y no me sirve borrarlas y volverlas a vincular.

Este código lo hace pero por defecto solo se enlaza y revincula si las bases de datos y la aplicación estás en mis documentos, disco C:\ y necestito que se haga estando las bases y el .mde en D:\, si me pudieran ayudar

Private Sub Form_Load()
Dim strBaseDatos As String

Me.lstAños.RowSource = ""

' establezco el directorio activo
ChDir CurrentProject.Path & "\"
' recorro en un bucle las bases de datos "*Datos*" del directorio
strBaseDatos = Dir("*.mdb")
Do While Not strBaseDatos = ""
' selecciono los archivos que cumplan las condiciones necesarias
If InStr(strBaseDatos, "BD") <> 0 And InStr(strBaseDatos, "Datos") <> 0 Then
' inserto en el cuadro combinado los años y correspondientes bases de datos (en columna oculta)
Me.lstAños.AddItem "Año " & Mid(strBaseDatos, InStr(strBaseDatos, ".") - 4, 4) & ";" & strBaseDatos
End If
strBaseDatos = Dir
Loop

' selecciono el año actualmente vinculado, para ello lo extraigo de la actual ruta
strBaseDatos = CurrentDb.TableDefs(0).Connect
Me.lstAños = "Año " & Mid(strBaseDatos, InStr(strBaseDatos, ".") - 4, 4)

'AjustarTamaño Me

'DoCmd.OpenForm "frmINFO", , , , , acDialog
End Sub ' Form_Load

___________________________________________

Private Sub lstAños_AfterUpdate()
' al seleccionar el año, revinculo las tablas.
ReVinculaTablas Me.lstAños.Column(1)
End Sub ' lstAños_AfterUpdate

Tiene un módulo asociado peno es muy extenso el texto y no deja copiarlo

2 Respuestas

Respuesta
1

El módulo asociado

Option Compare Database
Option Explicit

'*******************************************************************************
'* ReVinculaTablas
'* recorro las distintas tablas de la base de datos revinculandolas a la ruta
'* indicada
'* Argumentos: strBDRemota => ruta de la base de datos remota
'* uso: ReVinculaTablas "48-DatosAño2005.mdb"
'* ESH 30/04/06 12:16
'*******************************************************************************

Public Function ReVinculaTablas(strBDRemota As String)
Dim i As Long, _
dbs As DAO.Database

On Error GoTo ReVinculaTablas_TratamientoErrores

Set dbs = CurrentDb

For i = 0 To dbs.TableDefs.Count - 1
' si dbs.TableDefs(i).connect no está vacio, es por que se trata de una tabla vinculada
If (dbs.TableDefs(i).Connect <> "") Then
' así pues asigno la "nueva" ruta a la tabla vinculada
dbs.TableDefs(i).Connect = ";DATABASE=" & strBDRemota & ";"
dbs.TableDefs(i).RefreshLink
End If
Next i

ReVinculaTablas_Salir:
Set dbs = Nothing
On Error GoTo 0
Exit Function

ReVinculaTablas_TratamientoErrores:
If Err.Number = 3024 Or Err.Number = 3078 Or Err.Number = 3011 Then
MsgBox "La base de datos " & strBDRemota & vbCrLf & CurrentProject.Path, vbCritical + vbOKOnly, "ATENCION"
Else
MsgBox "Error " & Err.Number & " en proc. ReVinculaTablas de Módulo Revincula (" & Err.Description & ")", vbOKOnly + vbCritical
End If

GoTo ReVinculaTablas_Salir

End Function ' ReVinculaTablas

Respuesta
1

Carlos le dejo algo más completo para entorno multiempresa, para que pueda manipular sus bases de datos desde la nube y con Access.

 https://youtu.be/uGTvP0PcBvA

De el paso un sistema más robusto y seguro, le recomiendo que no se quede en solo Access como back-end, seguro que vale la pena.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas