Cómo hacer que un campo de tabla sea obligatorio en función de que otro de la misma tabla

Tabla "DESARROLLO"

Campos: [tipo_desarrollo], [práctica]

Los valores en [tipo_desarrollo] los selecciono mediante cuadro combinado que los toma de la tabla "TIPOS".  La cuestión es: si el valor seleccionado en [tipo_desarrollo] es "práctica", el campo [práctica] es obligatorio. 

El valor en [práctica] se seleccionará de la tabla "PRÁCTICAS" mediante cuadro combinado.

1 respuesta

Respuesta
2

Para hacer eso debes hacer dos cosas:

1.- Forzar la entrada en el campo [práctica] si has seleccionado "práctica" como tipo de desarrollo

2.- No dejar salir u obligar a que el usuario tome una decisión sobre su elección.

Te lo explico con la situación más complicada por si el usuario se equivoca y elige "práctica" por error, porque de la otra manera quedaría bloqueado.

En el evento "Después de actualizar" del campo [tipo_desarrollo] generas este código:

...

Private sub

If me.tipo_desarrollo.value="práctica" then

me.práctica.setfocus

End if

End sub

...

Y en el evento "Al perder el enfoque" o "Al salir" del campo [práctica] generas este código:

...

Dim resp as integer

If me.tipo_desarrollo.value="práctica" then

If isnull(me.práctica.value) then

Resp=msgbox("Debe indicar un valor. Si se trata de un error en la elección del tipo de desarrollo pulse <Cancelar>", vbExclamation+vbOKCancel,"CONFIRMACIÓN")

If resp=vbOK then

me.tipo_desarrollo.setfocus

me.práctica.setfocus

Else

me.tipo_desarrollo.value=null

me.tipo_desarrollo.setfocus

End if

End if

End if

End sub

...

Como no sé tu orden de tabulación quizá pueda producirse algún error por tema de tabulaciones, pero espero que todo funcione correctamente.

A ver si te sale.

Estupendo, al final lo he conseguido!! Muchas gracias!!

Hola neckkito,

Al final no me ha salido, al volver a abrir la base el código había desaparecido. Te repito el planteamiento con los nombres de los campos reales que tengo en la base, a ver si es que me lío con alguno.: Campos: [TIPO_DESARR], [PRÁCT_REPRES]

Cuándo en [TIPO_DESARR] elijamos el valor "práctica", el campo [PRÁCT_REPRES] no se puede dejar en blanco, se elije un valor mediante combo...; y Cuándo en [TIPO_DESARR] elijamos el valor distinto de  "práctica" ,el campo [PRÁCT_REPRES] se bloquea y no se puede escribir nada.

Te copio el código que he insertado siguiendo tus instrucciones...

Private Sub PRÁCT_REPRES_LostFocus()
Dim resp As Integer
If Me.TIPO_DESARR.Value = "práctica" Then
If IsNull(Me.PRÁCT_REPRES.Value) Then
resp = MsgBox("Debe indicar un valor. Si se trata de un error en la elección del tipo de desarrollo pulse <Cancelar>", vbExclamation + vbOKCancel, "CONFIRMACIÓN")
If resp = vbOK Then
Me.TIPO_DESARR.SetFocus
Me.PRÁCT_REPRES.SetFocus
Else
Me.TIPO_DESARR.Value = Null
Me.TIPO_DESARR.SetFocus
End If
End If
End If
End Sub

_______________________________________________

Private Sub TIPO_DESARR_AfterUpdate()
If Me.TIPO_DESARR.Value = "práctica" Then
Me.PRÁCT_REPRES.SetFocus
End If
End Sub

...

Gracias por tu paciencia.

Ahí tienes un ejemplo. Compáralo con el tuyo a ver si encuentras dónde está la diferencia: https://www.mediafire.com/?1vzeyqs07lz13e0

Hola,

La diferencia está en que los dos campos TIPO_DESARR y PRÁCT_REPRES, en mi caso  están en la misma tabla. y en tu caso están en dos tablas distintas relacionadas.

Los campos están en la misma tabla. La otra es solo auxiliar y no interviene en la resolución a tu consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas