Como usar "AlNoEnLaLista (OnNotInList)" 2003

Necesito que se pueda agregar un registro a través de un cuadro combinado.
Tengo un formulario de entrada de datos, en el un cuadro combinado que tira de la tabla "Tipos de acabados" y me gustaría que al añadir un nuevo tipo de acabado se incluyera en la lista patra poder selaccionarlo posteriormente sion tener que escribirlo de nuevo.
Pero no se como hacerlo.
¿Alguna sugerencia?
(He leído algunas de las preguntas y respuestas que ya hay sobre el tema pero no consigo que funcione, seguro que estoy haciemdo algo más, pero no se que es)

1 respuesta

Respuesta
1
Supongamos que el cuadro combinado se llama selTipo, en las propiedades de este cuadro en el apartado Al no estar en la lista ---> Procedimiento de evento ---> picas en el cuadrado de la derecha, el de los ... y pones:
Private Sub selTipo_NotInList(NewData As String, Response As Integer)
If MsgBox("No está en la lista ¿Quiere darlo de alta?", vbYesNo) = vbYes Then
Response = acDataErrContinue
Me.selTipo = NewData
DoCmd.RunSQL "Insert Into [Tipos de acabados] (Tipoacabado) values ('" & NewData & "')"
Me.selTipo.Requery
Else
Response = acDataErrContinue
Me.selTipo = ""
End If
End Sub
Esto si quieres dar de alta en la tabla Tipos de Acabados en el campo Tipoacabado que eliges en el cuadro combinado selTipo.
Si tienes que rellenar más campos además del Tipoacabado en la tabla Tipos de Acabados, tendrás que hacer un formulario basado en la tabla Tipos de Acabado para que se abra y puedas rellenar el resto de campos, a este formulario lo llamaremos AltasAcabados, el código sería:
Private Sub selTipo_NotInList(NewData As String, Response As Integer)
If MsgBox("No está en la lista ¿Quiere darlo de alta?", vbYesNo) = vbYes Then
Response = acDataErrContinue
Me.selTipo = NewData
DoCmd.RunSQL "Insert Into [Tipos de acabados] (Tipoacabado) values ('" & NewData & "')"
Me.selTipo.Requery
DoCmd.OpenForm "AltasAcabados", acNormal, , "TipoAcabado='" & NewData & "'"
Else
Response = acDataErrContinue
Me.selTipo = ""
End If
End Sub
Buenos días:
Soy bastante torpe (al menos me siento muy torpe), no consigo que funcione, no me da ni error ni nada, es como si no hubiera hecho nada. Me siguen saliendo las opciones que ya tengo metidas en la lista y me permite escribir cosas que no están en la lista pero no los guarda.
El formulario se llama "FormularioFotografias", hecho en base a la tabla "fotografias" en esta tabla ha muchos campos y uno de ellos se llama "TipoAcabado".
Este campo es con el que he hecho un cuadro combinado que tira de otra tabla llamada "TipoAcabados" que solo tiene una columna llamada "Tipos", es en esta Tabla donde quiero que se añadan los registros o nuevos tipos de acabados.
Según me has dicho, tengo que poner esto en el código (lo pongo con mis nombres por si está ahí el problema):
Private Sub selTipo_NotInList(NewData As String, Response As Integer)
If MsgBox("No está en la lista ¿Quiere darlo de alta?", vbYesNo) = vbYes Then
Response = acDataErrContinue
Me.selTipo = NewData
DoCmd.RunSQL "Insert Into [TipoAcabados] (Tipos) values ('" & NewData & "')"
Me.selTipo.Requery
Else
Response = acDataErrContinue
Me.selTipo = ""
End If
End Sub
Pero como te he dicho antes, no ocurre nada.
Gracias otra vez
Al escribir en el cuadro combinado y dar intro ¿sale el mensaje preguntando si lo quieres dar de alta?
Me cuentas.
Hola de nuevo:
NO, no sale nada. Lo que hace es simplemente pasar al siguiente campo, si me guarda el dato en el campo, pero no lo guarda en la lista ni me pregunta nada.
No se que estoy haciendo mal.
Un saludo
No se lo que puede pasar, si te parece me mandas la BD (en access 2003 y si puede ser comprimida en zip o rar) y la echo un vistazo. Lo que me intriga es que guarde el dato sin preguntar, ya que si no le das al botón aceptar del mensaje no tendría que ejecutar la sentencia Insert Into...
Me cuentas.
Me da un poco de vergüenza porque verás muchos fallos...
Pero te la mando, ¿a dónde?
Gracias!
Lo siento... tengo una cabeza... (como decía mi abuela: para peinarte... y mal)
[email protected]
No te preocupes por los fallos, TODOS los tenemos y TODOS hemos empezado.
1º. Como al cuadro combinado le has llamado Tipo en vez de selTipo como te puse, cuando te refieras a él tendrás que utilizar su nombre:
Private Sub Tipo_NotInList(NewData As String, Response As Integer)
If MsgBox("No está en la lista ¿Quiere darlo de alta?", vbYesNo) = vbYes Then
Response = acDataErrContinue
Me.Tipo = NewData
DoCmd.RunSQL "Insert Into [TipoAcabados] (Tipos) values ('" & NewData & "')"
Me.Tipo.Requery
Else
Response = acDataErrContinue
Me.Tipo = ""
End If
End Sub
2º. En las propiedades del cuadro combinado, en la linea Limitar a la lista tienes que poner Sí.
Si pones No digamos que no te limitas a lo que hay en la lista... le da igual lo que pongas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas