Autor Tema: Revinculación de tablas (indolora)  (Leído 150 veces)

Desconectado xavi

  • Administrador
  • Habitual
  • *****
  • Mensajes: 181
Revinculación de tablas (indolora)
« en: Abril 21, 2020, 03:25:47 pm »
Palabras clave: vinculación, tablas
Autor: KALKALIN
Extraído de: MVP-ACCESS.com

Cita de: KALKALIN preguntó
Necesito poder revincular las tablas de una base de datos externa.

Y el mismo se respondió con algo parecido a esto (que yo he estandarizado a mi conveniencia)

Copiar en un módulo independiente. Antes de llamar, asignar los valores a la estructura uLinkTable

Código: [Seleccionar]
Option Compare Database
Option Explicit

Public Type udtLinkTable
    RemoteDatabase      As String
    RemoteTableName     As String
    LocalTableName      As String
End Type
Public uLinkTable       As udtLinkTable

Public Sub CrearTablaVinculada()
    Dim dbsActual       As DAO.Database
    Dim tdfTableLink    As DAO.TableDef
 
    Dim rstRemoto   As DAO.Recordset    ' para las pruebas (en producción borrar y eliminar las últimas líneas)
   
   'Ubicacion de la base de datos remota se toma de uLinkTable.RemoteDatabase
   'Ubicacion de la base de datos local se toma de CurrentProject.FullName

   ' Abre la base de datos a la que se le va a agregar la tabla vinculada.
   Set dbsActual = OpenDatabase(CurrentProject.FullName)
 
   ' Crea una tabla vinculada que se conecta a una base de datos Access
   ' uLinkTable.LocalTableName será el nombre de la nueva tabla vinculada (en la base local)
   Set tdfTableLink = dbsActual.CreateTableDef(uLinkTable.LocalTableName)

   'creamos la conexion
   tdfTableLink.Connect = ";DATABASE=" & uLinkTable.RemoteDatabase & ";"

   'Aqui uLinkTable.LocalTableName es el nombre de la tabla de origen (si no existe da error)
   tdfTableLink.SourceTableName = uLinkTable.RemoteTableName
   dbsActual.TableDefs.Append tdfTableLink
 
   Set rstRemoto = dbsActual.OpenRecordset(uLinkTable.LocalTableName)
 
   'muestro la cantidad de registros de la tabla vinculada (Algo sencillo para ver si todo ha salido bien)
   rstRemoto.MoveLast
   MsgBox rstRemoto.RecordCount
 
   rstRemoto.Close
 
End Sub


La ventaja de este método es que no "levanta" la ventana de objetos de la base de datos (interesante opción en clientes quisquillosos)