** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Evento notinlist da dos respuestas diferentes
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoEvento notinlist da dos respuestas diferentes

 Responder Responder
Autor
Mensaje
Valenciajar Ver desplegable
Nuevo
Nuevo


Unido: 17/Agosto/2019
Localización: Soto
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Tema: Evento notinlist da dos respuestas diferentes
    Enviado: 17/Agosto/2019 a las 15:50
Hola. Tengo una consulta. En un formulario tengo un cuadro combinado con evento notinlist programado.
Si entro en el cuadro combinado y en la primera acción introduzco un elemento que no está en la lista, me responde conforme a lo programado.
Si por el contrario, consulto algún elemento que sí está en la lista y luego regreso al cuadro combinado e introduzco un elemento que no esté, Access me responde en este caso con la respuesta estándar (su elemento no está en la lista, introduzca un elemento de la lista...) en vez de conforme al código que yo he programado.
Uso un único formulario para todo (selección y edición), cuyos datos tienen origen en una tabla.
El código es el siguiente:
Private Sub SeleccionarDesignación_BeforeUpdate(Cancel As Integer)
    If IsNull([SeleccionarDesignación]) Then
        MsgBox "Debe seleccionar una designación."
        Cancel = True
    End If
End Sub
Private Sub SeleccionarDesignación_AfterUpdate()
    '  Buscar el registro de la designaci?n seleccionada en el cuadro combinado SeleccionarDesignación.
    '  Activar los controles de la sección Detalle.
    '  Ir al cuadro APELLIDO1.
    DoCmd.ApplyFilter , "NUMEROA = Forms!Designaciones!SeleccionarDesignación"
    OcultarControles Me, acDetail, True
    Me.SeleccionarDesignación.Undo
    Me!APELLIDO1.SetFocus
    Me.NUMEROA.Visible = False
    Me.NUMEROL.Visible = False
    Me.ACTIVADO.Visible = False
    Me.PERSONADO.Visible = False
    Me.F_PERSONADO.Visible = False
    Me.DatosLetrado.Enabled = True
    If Me.ACTIVADO = True Then
       Me.GenerarFicha.Enabled = False
       Me.AbrirFicha.Enabled = True
    End If
    If Me.PERSONADO = True Then
       Me.Personación.Enabled = False
    End If
    Me!APELLIDO1.SetFocus
   
End Sub
Private Sub SeleccionarDesignación_NotInList(DatosNuevos As String, Respuesta As Integer)
' Permitir al usuario agregar una designación nueva, escribiendo el nombre del cliente
' en el cuadro combinado SeleccionarDesignación.
    Dim miDb As Database, miTabla As Recordset
    Dim entDesignaNuevo As Integer, cadTítulo As String
    Dim entMensajeDiálogo As Integer, cadMensaje As String
    Const conColorBlanco = 16777215
    Const conNormal = 1
   
    ' Comprobar que el usuario ya ha seleccionado una desinación.
    If IsNull(SeleccionarDesignación) Then
        ' Mostrar un cuadro de mensaje preguntando al usuario si desea agregar una designación nueva.
        cadT?tulo = "La designación no está en la lista"
        cadMensaje = "?Desea agregar una designación nueva?"
        entMensajeDi?logo = vbYesNo + vbExclamation
        entDesignaNuevo = MsgBox(cadMensaje, entMensajeDiálogo, cadTítulo)
        If entDesignaNuevo = vbYes Then
            ' Si el usuario desea dar de alta una designación quitar el texto que introdujo el usuario
            ' en el cuadro combinado y asignarlo al control Apellido1.
            ' Continuar sin mostrar el mensaje de error predeterminado
            Me!SeleccionarDesignación.Undo
            APELLIDO1.Enabled = True
            APELLIDO1 = DatosNuevos
           
            ' Generar el número de Asunto (Designación) desde el Contador y asignarlo
            Set miDb = CurrentDb
            Set miTabla = miDb.OpenRecordset("CONTADOR", dbOpenDynaset)
            miTabla.Edit
            miTabla!NUMEROA = miTabla!NUMEROA + 1
            miTabla.Update
            Me!NUMEROA = miTabla!NUMEROA
            miTabla.Close
           
            ' Generar un registro en la tabla CLIENTE para recoger los datos de dirección y teléfono
            Set miTabla = miDb.OpenRecordset("CLIENTE", dbOpenDynaset)
            miTabla.AddNew
            miTabla!NUMEROA = Me!NUMEROA
            miTabla.Update
            miTabla.Close
           
            ' Activar controles para la edición
            OcultarControles Me, acDetail, True
            Me.APELLIDO1.SetFocus
            Me.NUMEROA.Visible = False
            Me.NUMEROL.Visible = False
            Me.ACTIVADO.Visible = False
            Me.PERSONADO.Visible = False
            Me.F_PERSONADO.Visible = False
            Me.DatosLetrado.Enabled = True
            Me.GenerarFicha.Enabled = True
            Me.Personación.Enabled = True
            Me.SeleccionarDesignaciónEtiqueta_.Visible = False
            Me.SeleccionarDesignación.Visible = False
            Respuesta = acDataErrAdded
            MsgBox "Introduzca los datos de la nueva designación"
        Else
            ' En caso contrario continuar sin mostrar el error predeterminado
            Me!SeleccionarDesignación.Undo
            Respuesta = acDataErrContinue
        End If
    End If
End Sub

Gracias por cualquier opinión. Un saludo
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 17/Agosto/2019 a las 19:53
Hola!

En su día contesté a un usuario con algo muy parecido.

Te dejo el enlace:

https://1drv.ms/u/s!AuMSWvAoJzBwiEjUxZwr7Trjuxm7?e=NNZ66j

El formulario se llama "Muestras"

Espero que te sirva.

Editado por mounir - 17/Agosto/2019 a las 19:54
Un Saludo.
Arriba
Valenciajar Ver desplegable
Nuevo
Nuevo


Unido: 17/Agosto/2019
Localización: Soto
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 18/Agosto/2019 a las 23:05
Gracias mounir.

He intentado replicar tu código pero no me ha funcionado. Seguramente algo he escrito mal. Lo volveré a intentar.
No obstante me gustaría que me comentaras de mi código, dónde ves que puede surgir el problema.
Básicamente lo que me pasa es que si consulto directamente un registro que NO está en la lista, el programa actúa con mi evento NotInList sin problema.
Pero si previamente consulto otro registro que sí está y a continuación uno que no está, el programa responde con la respuesta estándar de Access para el evento NotInList y ya no hace caso a mi código.
No sé si depende del refresco del formulario o de la consulta o al uso de filtros en vez de marcadores...

Agradeceré tu opinión.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 18/Agosto/2019 a las 23:26
Hola!

La verdad no encuentro el motivo en tu código.

Yo lo que haría es lo siguiente:

Primero aseguro que funcione correctamente el evento "Al no estar en la lista".
Segundo añado el evento "Antes de actualizar". Cuando funcionan los dos correctamente añado el evento "Después de Actualizar"
Un Saludo.
Arriba
Valenciajar Ver desplegable
Nuevo
Nuevo


Unido: 17/Agosto/2019
Localización: Soto
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 19/Agosto/2019 a las 00:09
Gracias de nuevo.
Voy a probar lo que me propones y te cuento.
Arriba
Valenciajar Ver desplegable
Nuevo
Nuevo


Unido: 17/Agosto/2019
Localización: Soto
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 29/Agosto/2019 a las 14:55
Hola Mounir, no he dado señales de vida, porgue estoy peleando con la "gracieta" de Microsoft y su actualización de Windows que ha dejado secas la mayoría de mis líneas de código.
No consigo una solución y Microsoft sólo me ha recomendado paciencia y esperar.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 29/Agosto/2019 a las 16:56
Hola!

Cuelga una copia de tu base de datos sin registros sensibles para echarla una vistazo.
Un Saludo.
Arriba
Valenciajar Ver desplegable
Nuevo
Nuevo


Unido: 17/Agosto/2019
Localización: Soto
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 29/Agosto/2019 a las 21:56
Hola Mounir
https://1drv.ms/u/s!AsD_WfNmDyJqhxRDrhu5-LpeGwCn?e=Ptor8P
Aquí la encuentras.
Ahora tengo dos problemas. El planteado del evento y que el VBA ha dejado de funcionar en determinadas compilaciones de Windows 10 desde la última actualización. Curiosamente unas funciones parecen funcionar y otras simplemente no reaccionan. Pero lo dicho, esto último según Microsoft se resolverá con una nueva actualización.

Gracias

Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 30/Agosto/2019 a las 00:59
Hola!

Simplemente quita estas dos líneas

If IsNull(SeleccionarDesignación) Then

End If
Un Saludo.
Arriba
Valenciajar Ver desplegable
Nuevo
Nuevo


Unido: 17/Agosto/2019
Localización: Soto
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 30/Agosto/2019 a las 12:28
Hola Mounir. He probado tu propuesta.
Sin embargo no me ha funcionado.
Observa:
Opción 1: Busco directamente un registro que no está en la BD. Me responde correctamente con la respuesta NotinList programada:



En cambio,
Opción 2: Busco registros que sí están en la BD. A continuación, sin cerrar el formulario, busco un registro que NO está en la BD. La respuesta pasa a ser:



Además, una vez entro en este bucle y si no selecciono un elemento de la lista, no me deja cerrar o, en todo caso me salta este otro error:



Gracias.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 30/Agosto/2019 a las 18:52
Hola!

la solución es como te comenté antes:

>>>> Formulario Designación

Deberías controlar la introducción de datos con Add.New en vez de actualizar ya que lo que hace es actualizar y no añadir Nombres.

Editado por mounir - 17/Septiembre/2019 a las 15:43
Un Saludo.
Arriba
Valenciajar Ver desplegable
Nuevo
Nuevo


Unido: 17/Agosto/2019
Localización: Soto
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 17/Septiembre/2019 a las 14:08
Gracias Mounir.
Efectivamente la solución estaba en retirar el if.
Al final tuve que reescribir esa parte del código para que generara correctamente y permitiera editar de inmediato los nuevos registros con addnew.
Muchas gracias por tu soporte.
Podemos cerrar el hilo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable