Evento notinlist da dos respuestas diferentes |
Responder |
Autor | |
Valenciajar
Nuevo Unido: 17/Agosto/2019 Localización: Soto Estado: Sin conexión Puntos: 13 |
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
|
|
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
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.
|
|
Valenciajar
Nuevo Unido: 17/Agosto/2019 Localización: Soto Estado: Sin conexión Puntos: 13 |
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. |
|
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
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.
|
|
Valenciajar
Nuevo Unido: 17/Agosto/2019 Localización: Soto Estado: Sin conexión Puntos: 13 |
Enviado: 19/Agosto/2019 a las 00:09 |
Gracias de nuevo.
Voy a probar lo que me propones y te cuento. |
|
Valenciajar
Nuevo Unido: 17/Agosto/2019 Localización: Soto Estado: Sin conexión Puntos: 13 |
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. |
|
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
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.
|
|
Valenciajar
Nuevo Unido: 17/Agosto/2019 Localización: Soto Estado: Sin conexión Puntos: 13 |
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 |
|
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
Enviado: 30/Agosto/2019 a las 00:59 |
Hola!
Simplemente quita estas dos líneas If IsNull(SeleccionarDesignación) Then End If |
|
Un Saludo.
|
|
Valenciajar
Nuevo Unido: 17/Agosto/2019 Localización: Soto Estado: Sin conexión Puntos: 13 |
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. |
|
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
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.
|
|
Valenciajar
Nuevo Unido: 17/Agosto/2019 Localización: Soto Estado: Sin conexión Puntos: 13 |
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. |
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |