Agregar un nuevo campo con código vba

¿Cuál es el código para desde un formulario agregar un campo a una tabla cada vez que se necesite?

1 respuesta

Respuesta
2

Tendrías que ejecutar una instrucción SQL para añadir el nuevo campo.

El código sería algo así:

Docmd. Runsql "alter table <nombreDeLaTabla> add <nombreDeCampo> <tipoDatos>"

Gracias por tu tiempo y ayuda

Cree el código de la siguiente manera, pero aun tengo un problema...

Dim base As DAO.Database
Dim tabla As DAO.TableDef
Dim campo As New DAO.Field
Set base = CurrentDb()
Set tabla = base.TableDefs("Personal") 'agrega el campo en la tabla "Personal"
campo.Name = Me!fecha
campo.Type = dbDate 'el campo que crea es de tipo fecha
tabla.Fields.Append campo
Set tabla = Nothing
Set base = Nothing
Set campo = Nothing

Mi duda radica en lo siguiente

Una vez creado el campo como hago para que si intenta crear otro campo con el mismo nombre (en mi caso la misma fecha), me genere un mensaje informando que este campo ya ha sido creado y no genere un error.

De nuevo muchas gracias

Tendrías 2 formas:

1) Comprobando antes que no exista

2) Controlando tú el mensaje de error

La primera opción podrías hacerla de la siguiente forma:

dim aux as string

on error resume next

aux = currentdb().tabledefs("personal").fields("fecha").name

if err<>0 then aux=""

on error goto 0

if aux<>"" then msgbox "El campo ya existe": exit sub

La segunda opción sería controlando el error en la línea que te falla. Supongo que será en "tabla.Fields.Append campo". Sería

on error resume next

tabla.Fields.Append campo

if err<>0 then

msgbox "El campo no se puede crear. El error es: " & error$

on error goto 0

exit sub

end if

on error goto 0

Entre las lineas "On error resume next" y "On error goto 0" es el programador quien controla los errores en lugar de VB. Hay que tener en cuenta que siempre debe ejecutarse la segunda línea para devolver el control de errores al sistema, por eso lo incluyo dentro y fuera del IF err<>0...

Gracias por tu tiempo y dedicación

Todo salio perfecto

Una última pregunta

Con el formulario1 "Fecha" me crea un campo (de tipo fecha) en la tabla "Personal" y me abre automáticamente otro formulario2 "Asistencia" donde tengo un cuadro de texto1 de nombre "Fechas" que recibe el campo (trae la fecha recién creada) que se creo del formulario1

Mi pregunta es:

Cual es el código para que desde el formulario2 "Asistencia" busque el dato que coincida del cuadro de texto1 con el campo recién creado en la tabla "Personal" y coloque "Participo", y llene otros datos, es esto es para corroborar que en esa fecha recién creada las personas asistieron.

Cabe recordar que cada vez que se abra el formulario1 "Fecha" se creará un nuevo campo en la tabla "Personal y el formulario2 permitirá tomar una especie de lista de participación.

Espero haber sido claro y conciso

Por tu ayuda altruista muchas bendiciones

La verdad es que me he perdido un poco.

Dime cual es la estructura (qué campos tiene) de las tablas Fecha y Personal. Quizás con eso entienda un poco mejor el problema.

Cordial saludo

La base de datos consta de la siguiente manera

- Una tabla llamada "Personal" el cual tiene inicialmente tres campos ("ID", "Nombre", "Apellido"), pero estos van a ir aumentando gradualmente

Consta de dos formularios;Formulario1 llamado "Fecha" y Formulario2 llamado "Asistencia" estructurado así

- Formulario 1 llamado "Fecha" consta de un cuadro de texto de tipo fecha llamado "Date"el cual me permite crear cada vez que se de aceptar un nuevo campo en la tabla "Personal" y ademas me abre un segundo formulario llamado "Asistencia"

- El Formulario2 que te menciono llamado "Asistencia" consta de 4 cuadros de texto ("ID", "Nombre", "Apellido", "Fecha") y este formulario permite actualizar la tabla "Personal" y tiene la característica de traer del formulario1 el dato que se digitó en "Date" y mostrarlo en el cuadro de texto "Fecha" en este formulario (formulario2)

La idea es que el formulario2 tiene que actualizar los datos en la tabla, entonces actualiza o crea "ID", "Nombre" y "Apellido" hasta aquí tengo echo, lo que no he podido hacer es que desde este formulario2 busque el dato que coincide en cuadro de texto "Fecha" con el nuevo campo creado que como sabemos es la misma fecha y coloque en ese registro 'Asistió'

Entonces la base de datos tiene el fin de llamar a lista cuando se convoque a reuniones, esto es dos veces a la semana, crea nuevos registros y mensualmente revisa quienes asistieron y en que fechas

Espero haber trasmitido mi idea bien clara

Lo que yo haría es crear una consulta que buscase en la tabla de asistencia los registros cuya fecha sea forms("fecha")![date]

Podrías abrir esa consulta desde un formulario asignando a un botón una instrucción del tipo docmd. Openquery "nombreDeLaConsulta".

No sé si es eso lo que buscas.

No precisamente lo que necesito es el código para que desde el formulario2, busque en la tabla "Personal" el campo recién creado así

Private Sub Asistencia_Click()
Dim Rec As DAO.Recordset
Dim Sw As Boolean
Dim Dbs As DAO.Database, Fac As DAO.Recordset
Set Dbs = CurrentDb
Dim strMensaje As String
Dim intOpciones As Integer
Dim BytOpcion As Byte
Dim Sfiltro As String
strMensaje = " Esta seguro de actualizar?"
intOpciones = vbQuestion + vbOKCancel
BytOpcion = MsgBox(strMensaje, intOpciones)
If BytOpcion <> vbCancel Then
Set Rec = Dbs.OpenRecordset("SELECT * FROM Personal WHERE ([Documento] = '" + CStr(Me![documento]) + "');")
If Rec.EOF Then
Me!documento = ""
Me!nombre = ""
Me.sede = ""
Me!teléfono = ""
Me.mensualidad = ""
Me.recibo = ""
Me.Ritual = ""
Me.fecha = ""
documento.SetFocus
Else
Rec.Edit
Rec!documento = Me.documento
Rec!nombre = Me.nombre
Rec!sede = Me.sede
Rec!teléfono = Me.teléfono
Rec!mensualidad = Me.mensualidad
Rec!recibo = Me.recibo
Rec!Ritual = Me.Ritual
'necesito que ahora me busque el campo recién creado en la tabla "personal" por un formulario llamado "fechas" y que que coincida_con Me.fecha y una vez encontrado coloque hay "Participó"
Rec.Update
Me.documento = ""
Me.nombre = ""
Me.sede = ""
Me.teléfono = ""
Me.mensualidad = ""
Me.recibo = ""
documento.SetFocus
End If
End If
End Sub

Gracias de nuevo

Uno de los motivos por los que a veces fallan los formularios cuando pulsamos un botón en Access es que los datos recién tecleados no se han actualizado en las tablas correspondientes.

No sé si será este el caso o no, pero la forma de asegurarse es poniendo, al principio del código del botón, la instrucción:

Me. Repaint

A parte de esto, si quieres sube la base de datos a un disco virtual (por ejemplo dropbox) y mándame el enlace. Va a ser la única forma de que me entere (parece que estoy un poco espesito).

Te envío el archivo donde explico que intento hacer

Gracias por tu tiempo

https://www.dropbox.com/s/83emwhujeld7o9p/SedeOccidente1.accdb

Creo que ya he visto por dónde va tu idea.

Tengo que cambiarte el diseño de la tabla de "personal" porque no se puede hacer como tú quieres. Hacerlo añadiendo un campo por cada encargo/rito te daría problemas dentro de un año o poco más porque el número de campos dentro de una tabla es limitado.

Además, se da de frente con toda la teoría de diseño de bases de datos.

Espero preparártelo para mediados de la semana que viene. No tengo demasiado tiempo para atenderos a todos y el fin de semana desconecto totalmente (me voy de viaje).

Cordial saludo

Tengo que cerrar la pregunta para poder hacer otra consulta......te vuelvo a consultar a mediados de semana como quedamos

Por tu tiempo muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas