ms access - origen - Cómo actualizar las tablas vinculadas en un mdb de Access cuando cambia ODBC
odbc access 2016 (2)
¿Qué versión de Access estás usando? En 2000, puede ir a Herramientas> Utilidades de la base de datos> Administrador de tablas vinculadas para cambiar su configuración.
Puedo crear un acceso mdb y agregar una tabla vinculada a una base de datos del servidor Sql a través de ODBC. Si cambio el servidor Sql al que ODBC se conecta con el applet del panel de control ODBC, el mdb aún se conecta al servidor Sql original hasta que se reinicie Access.
¿Hay alguna manera de volver a vincular estas tablas de servidor vinculadas sin reiniciar Access?
EDITAR: me gustaría hacer esto en código
Puede usar el código siguiente para actualizar todas las tablas ODBC en su proyecto de Access a un DSN determinado.
Cómo usarlo
Simplemente copie el código en un módulo VBA nuevo o existente y, cuando desee actualizar los enlaces, llámelo con el DSN adecuado para la nueva conexión ODBC:
RefreshODBCLinks "ODBC;DRIVER=SQL Server Native Client 10.0;" & _"
"SERVER=SQLSERVER;UID=Administrator;" & _
"Trusted_Connection=Yes;" & _
"APP=2007 Microsoft Office system;DATABASE=OrderSystem;"
Además, eche un vistazo a la ayuda de Access para el método TableDef.RefreshLink
.
Código versión 1
RefreshODBCLinks
pero Access puede mantener la información de conexión en la memoria si las tablas se han utilizado antes de RefreshODBCLinks
.
Public Sub RefreshODBCLinks(newConnectionString As String)
Dim db As DAO.Database
Dim tb As DAO.TableDef
Set db = CurrentDb
For Each tb In db.TableDefs
If Left(tb.Connect, 4) = "ODBC" Then
tb.Connect = newConnectionString
tb.RefreshLink
Debug.Print "Refreshed ODBC table " & tb.Name
End If
Next tb
Set db = Nothing
End Sub
Código versión 2
Esto volverá a crear completamente las tablas vinculadas de ODBC: se cambiarán los nombres de las antiguas, luego se crearán nuevas tablas utilizando el DSN dado antes de eliminar la versión enlazada anterior.
Por favor, asegúrese de probar esto y tal vez agregar algún código para manejar mejor los errores según sea necesario.
Tenga en cuenta también que el parámetro dbAttachSavePWD
pasado durante la creación de la tabla ODBC guardará la contraseña ODBC (si existe) en Access. Solo elimínalo si eso no es lo que necesitas.
Public Sub RefreshODBCLinks(newConnectionString As String)
Dim db As DAO.Database
Dim tb As DAO.TableDef
Dim originalname As String
Dim tempname As String
Dim sourcename As String
Dim i As Integer
Set db = CurrentDb
'' Get a list of all ODBC tables ''
Dim tables As New Collection
For Each tb In db.TableDefs
If (Left(tb.Connect, 4) = "ODBC") Then
tables.Add Item:=tb.Name, key:=tb.Name
End If
Next tb
'' Create new tables using the given DSN after moving the old ones ''
For i = tables.count To 1 Step -1
originalname = tables(i)
tempname = "~" & originalname & "~"
sourcename = db.TableDefs(originalname).SourceTableName
'' Create the replacement table ''
db.TableDefs(originalname).Name = tempname
Set tb = db.CreateTableDef(originalname, dbAttachSavePWD, _
sourcename, newConnectionString)
db.TableDefs.Append tb
db.TableDefs.Refresh
'' delete the old table ''
DoCmd.DeleteObject acTable, tempname
db.TableDefs.Refresh
tables.Remove originalname
Debug.Print "Refreshed ODBC table " & originalname
Next i
Set db = Nothing
End Sub
Una última cosa: si todavía tiene problemas que requieren que reinicie Access para que los cambios sean visibles, eche un vistazo a mi código en Reiniciar y compactar la base de datos mediante programación en mi sitio.
Nota: Code Version 2 se inspiró en parte en este artículo de Access Web .