Access

Cómo copiar la estructura de una tabla solo sin los datos

Aquí hay una pregunta interesante que me hicieron hoy:

¿Quiero copiar solo la estructura, tabla vacía sin datos?

Inmediatamente pensamos en el método CopyObject, pero lamentablemente Microsoft nunca incluyó la opción de incluir/omitir los datos. Por lo que siempre incluye los datos. Sí, puede usarlo de todos modos y luego borrar la tabla de datos. Sería una opción, pero hay mejores enfoques, así que exploremos brevemente algunos de ellos.

Método incorporado

Probablemente la solución más sencilla sería utilizar el método TransferDatabase para importar la tabla a la propia base de datos.

Entonces el código quedaría así:

Docmd.TransferDatabase acImport, "Microsoft Access", CurrentDb.Name, acTable, "ExistingTableName", "NewTableName", True

Procedimiento VBA personalizado

Si queremos, también podríamos crear fácilmente un código simple para realizar una operación similar, diablos, el SQL podría ejecutarse como una consulta simple si lo desea, ni siquiera es necesario VBA, ¡pero resume todo muy bien en una rutina reutilizable!

Entonces podríamos crear algo como:

'---------------------------------------------------------------------------------------
' Procedure : DuplicateTableStructure
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : 
' Purpose   : Duplicate a table's structure only, no data
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - 
' Req'd Refs: None required
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' sSrcTableName     : Existing table name to be duplicated
' sDestTableName    : Name to give the new table
'
' Usage:
' ~~~~~~
' Call DuplicateTableStructure("ExistingTableName", "NewTableName")
'
' Revision History:
' Rev       Date(yyyy-mm-dd)        Description
' **************************************************************************************
' 1         2007-03-03              Initial Release
' 2         2024-10-09              Updated Header
'                                   Updated Error Handler
'---------------------------------------------------------------------------------------
Function DuplicateTableStructure(sSrcTableName As String, _
                                 sDestTableName As String)
On Error GoTo Error_Handler
    Dim oDb                   As DAO.Database
    Dim sSQL                  As String

    Set oDb = CurrentDb
    sSQL = "SELECT (" & sSrcTableName & ").* INTO (" & sDestTableName & ")"
    sSQL = sSQL & " FROM (" & sSrcTableName & ") WHERE 1=0;"
    oDb.Execute sSQL, dbFailOnError

    oDb.TableDefs.Refresh
    Application.RefreshDatabaseWindow    'Update the Nav Pane
    
Error_Handler_Exit:
    On Error Resume Next
    Set oDb = Nothing
    Exit Function
 
Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Source: DuplicateTableStructure" & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl  0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occurred!"
    Resume Error_Handler_Exit
End Function

y luego simplemente lo llamas estar haciendo:

Call DuplicateTableStructure("ExistingTableName", "NewTableName")

Como se mencionó anteriormente, simplemente podríamos crear una consulta de Access con una declaración SQL como:

SELECT (sSrcTableName).* INTO (sDestTableName)
FROM (sSrcTableName) 
WHERE 1=0;

Obviamente, reemplazando los términos sSrcTableName, sDestTableName con los nombres de sus tablas.

Tabla vinculada que dices

Por supuesto que podemos duplicar una tabla vinculada. Para hacerlo, podemos recurrir una vez más al SQL simple.

Para un back-end no cifrado

SELECT * INTO (sDestTableName)
FROM (MS Access;DATABASE=C:\...\...\YourDatabase.accdb).(sSrcTableName)
WHERE 1=0;

Para un back-end cifrado

SELECT * INTO (sDestTableName)
FROM (MS Access;PWD=YourBEPassword;DATABASE=C:\...\...\YourDatabase.accdb).(sSrcTableName)
WHERE 1=0;

Tenga en cuenta que esto creará la tabla en la base de datos que ejecuta el comando.

Estos comandos también se pueden convertir fácilmente en procedimientos VBA reutilizables para que tenga más herramientas en su arsenal. Guiño, guiño.

Ahí lo tiene, algunos enfoques diferentes que puede emplear para duplicar únicamente la estructura de una tabla.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba