Existen 2 formas
1. Con SQL
Public Sub AgregarColumna()
Dim db As DAO.Database
Dim strSQL As String
Dim NombreColumna As String
' Obtener el nombre de la columna desde el formulario
NombreColumna = Me.NombreColumna.Text ' Asegurar que este control tiene el nombre deseado
' Validar que el nombre de la columna no esté vacío
If Trim(NombreColumna) = "" Then
MsgBox "Debe ingresar un nombre para la nueva columna.", vbExclamation, "Error"
Exit Sub
End If
' Asegurar que el nombre de la columna es válido (sin espacios ni caracteres especiales)
NombreColumna = Replace(NombreColumna, " ", "_") ' Reemplazar espacios con guiones bajos
' Abrir la base de datos actual
Set db = CurrentDb
' Crear la instrucción SQL para agregar la columna
strSQL = "ALTER TABLE ZonaSur ADD COLUMN [" & NombreColumna & "] DOUBLE;"
' Ejecutar la consulta
On Error Resume Next
db.Execute strSQL, dbFailOnError
If Err.Number <> 0 Then
MsgBox "Error al agregar la columna: " & Err.Description, vbCritical, "Error"
Err.Clear
Set db = Nothing
Exit Sub
End If
On Error GoTo 0
' Insertar un nuevo registro con el mismo nombre de la columna como ciudad de origen
strSQL = "INSERT INTO ZonaSur (Ciudad) VALUES ('" & NombreColumna & "');"
db.Execute strSQL, dbFailOnError
' Liberar recursos
Set db = Nothing
' Confirmar que se completó el proceso
MsgBox "Columna y registro agregados exitosamente.", vbInformation, "Éxito"
End Sub
Explicación del código:
Validaciones: Se verifica que el campo de texto del formulario no esté vacío y que el nombre de la columna sea válido.
Corrección en el nombre de la columna: Se reemplazan espacios con guiones bajos para evitar errores.
Manejo de errores: Se captura cualquier error al ejecutar ALTER TABLE.
Inserción de un registro: Se agrega un nuevo registro con el mismo nombre de la columna en el campo Ciudad.
Nota :
Access no permite agregar columnas con ALTER TABLE si la tabla tiene registros bloqueados. Asegúesee de cerrar cualquier formulario que esté usando ZonaSur antes de ejecutar el código.
2. Con DAO
Public Sub AgregarColumnaDAO()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim rst As DAO.Recordset
Dim NombreColumna As String
' Obtener el nombre de la nueva columna desde el formulario
NombreColumna = Trim(Me.NombreColumna.Text)
' Validar que el nombre de la columna no esté vacío
If NombreColumna = "" Then
MsgBox "Debe ingresar un nombre para la nueva columna.", vbExclamation, "Error"
Exit Sub
End If
' Asegurar que el nombre de la columna no tenga espacios ni caracteres especiales
NombreColumna = Replace(NombreColumna, " ", "_")
' Abrir la base de datos actual
Set db = CurrentDb
' Obtener la estructura de la tabla ZonaSur
Set tdf = db.TableDefs("ZonaSur")
' Verificar si la columna ya existe para evitar duplicados
On Error Resume Next
Set fld = tdf.Fields(NombreColumna)
If Not fld Is Nothing Then
MsgBox "La columna '" & NombreColumna & "' ya existe.", vbExclamation, "Aviso"
Set db = Nothing
Exit Sub
End If
On Error GoTo 0
' Agregar la nueva columna como tipo DOUBLE (para almacenar kilómetros)
Set fld = tdf.CreateField(NombreColumna, dbDouble)
tdf.Fields.Append fld
db.TableDefs.Refresh
' Insertar un nuevo registro con el mismo nombre de la columna en el campo 'Ciudad'
Set rst = db.OpenRecordset("ZonaSur", dbOpenDynaset)
rst.AddNew
rst!Ciudad = NombreColumna ' Suponiendo que la tabla tiene un campo llamado 'Ciudad'
rst.Update
rst.Close
' Liberar memoria
Set rst = Nothing
Set fld = Nothing
Set tdf = Nothing
Set db = Nothing
' Mensaje de éxito
MsgBox "Columna y registro agregados correctamente.", vbInformation, "Éxito"
End Sub
Explicación del código
Obtiene el nombre de la nueva columna desde un TextBox en el formulario.
Valida el nombre:
Elimina espacios en blanco al inicio y al final.
Reemplaza espacios en el medio con guiones bajos (_) para evitar errores.
Accede a la estructura de la tabla (TableDefs):
Verifica si la columna ya existe antes de agregarla.
Usa CreateField para crear una nueva columna de tipo DOUBLE (puedes cambiarlo a dbText si es necesario).
Inserta un nuevo registro en la tabla con el mismo nombre de la columna como ciudad de origen.
Libera los objetos DAO (Recordset, TableDef, Database) para evitar problemas de memoria.
Muestra mensajes de éxito o error según el resultado.