
revincular tablas desde bases de datos
Publicado por carlos (70 intervenciones) el 15/07/2023 23:04:10
Hola, soy aprendiz de programación en Access, estoy haciendo un programa y por seguridad oculto las bases de datos. Preví la posibilidad de que el Font-end se conecte a varias back-end según se necesite datos de otros años pero al borrar tablas y vincular nuevamente se pierde el ocultado de las mismas. Buscando en internet encontré un ejemplo que lo hace pero solo si está ubicada en C:\ y este ejemplo se adapta a lo que necesito solo que al tratar de hacerlo e estando ubicadas en D:\ me da error y necesito ayuda para resolverlo
El código
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 modulo también
'*******************************************************************************
'* 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 mdlGeneral (" & Err.Description & ")", vbOKOnly + vbCritical
End If
GoTo ReVinculaTablas_Salir
End Function ' ReVinculaTablas
En el formulario ve las bases de datos pero no las revincula

El código
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 modulo también
'*******************************************************************************
'* 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 mdlGeneral (" & Err.Description & ")", vbOKOnly + vbCritical
End If
GoTo ReVinculaTablas_Salir
End Function ' ReVinculaTablas
En el formulario ve las bases de datos pero no las revincula

Valora esta pregunta


0