redistribuible origen nombre motor microsoft mdb español engine encuentra datos controladores controlador componente administrador accdb ms-access odbc

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 .