Cómo convertir una tabla vinculada en una tabla local en su acceso

Comparte ahora:

Lo hemos dicho antes, pero vale la pena repetirlo: las tablas vinculadas pueden ser realmente útiles en sus bases de datos por varias razones. Pero un gran inconveniente de las tablas vinculadas es el rendimiento: ejecutar consultas en ellas, especialmente si no son tablas de Microsoft Access (es decir, si son Excel, CSV o DBF archivos). Puede ser dolorosamente lento trabajar con ellos. Hay algunas formas en que puede solucionarlo: trabajaremos con una forma aquí, y es convertir una tabla vinculada en una tabla local. Claro, puede hacer esto manualmente copiando / pegando tablas, pero si tiene mucho que manejar, hacerlo en código es mucho, mucho más fácil, así que veamos cómo ...

Por qué es importante describir sus necesidades

Acceder a tabla vinculadaEn primer lugar, describamos lo que realmente queremos que haga el código; hacer esto hace que sea mucho más fácil crear el código en primer lugar, por lo que le sugiero que lo haga cada vez que esté pensando en crear un código VBA , ayuda a aclarar tu objetivo:

"Dado el nombre de una tabla vinculada, importe esa tabla a la base de datos como una tabla local para mejorar el rendimiento; opcionalmente, elimine el vínculo de la base de datos al mismo tiempo"

Normalmente, cuando está convirtiendo una tabla vinculada en una tabla local, querrá eliminar el enlace, pero en el ejemplo de código a continuación le hemos dado la opción de mantener el archivo vinculado original también, pero al hacer esto, su La tabla recién importada no reemplazará su tabla vinculada en sus consultas, etc., por lo que no verá la ganancia de rendimiento que le proporcionaría una tabla local. Una vez que esté seguro de que el código funciona como necesita, le recomendamos que elimine siempre el original; después de todo, en realidad no está eliminando la tabla real, solo el enlace a ella.

Una palabra de precaución

Antes de llegar al código, solo una pequeña advertencia, no hay mucho que pueda hacer si está vinculando a un base de datos de acceso dañada - si Access no puede leer el archivo, es muy poco probable que pueda importarlo.

Entonces, vamos al código ...

Sub MakeTableLocal(tableName As String, optional deleteOriginal As Boolean = True)
    Dim DbPath As Variant, TblName As Variant

    'get path of linked table
    DbPath = DLookup("Database", "MSysObjects", "Name='" & tableName & "' And Type=6")
    'Get the real name of the linked table (in case it has been given an alias in the link)
    TblName = DLookup("ForeignName", "MSysObjects", "Name='" & tableName & "' And Type=6")
    If IsNull(DbPath) Then
        'Either a local table, or the wrong table name has been supplied, exit the sub
        Exit Sub
    End If

    'delete linked table
    If deleteOriginal Then
        DoCmd.DeleteObject acTable, tableName
    Else
        'If we're not deleting the existing table we'll have to rename the imported table to avoid
        'overwriting it etc
        tableName = tableName & " - local"
    End If
    
    'import the table as a local, unlinked table
    DoCmd.TransferDatabase acImport, "Microsoft Access", DbPath, acTable, TblName, tableName
End Sub

Que esta haciendo el codigo

Código VBALa mayor parte del código será bastante obvia, pero hay algunos puntos clave a tener en cuenta. En primer lugar, obtenemos los detalles del archivo vinculado consultando la tabla del sistema de Access "MSysObjects" (generalmente oculta). Como es perfectamente posible (y probable) que le hayas dado a la tabla vinculada un nuevo alias local, lo siguiente que debemos hacer es obtener el nombre de la tabla original, también de la tabla "MSysObjects".

Ahora que tenemos esos detalles, siempre y cuando sean válidos (es decir, no ha proporcionado un nombre de tabla mal escrito a la rutina), estamos listos para comenzar, así que es simplemente una cuestión de a) eliminar el enlace (si deleteOriginal está establecido en True) e importando la tabla.

Hacer esto a menudo le dará mejoras bastante dramáticas en el rendimiento, por lo que si está utilizando tablas vinculadas, le recomiendo que verifique qué beneficios le brindará mover esas tablas a versiones locales, ¡puede que se sorprenda!

Introducción del autor:

Mitchell Pond es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo reparación SQL Server listo para importar y productos de software de recuperación de Excel. Para más información visite www.datanumen.com

Comparte ahora:

Los comentarios están cerrados.