Está en la página 1de 4

CAMPOS OBLIGATORIOS1

Bueno... En este ejemplo mi único trabajo es dar las gracias


a Sveinbjorn por habérnoslo preparado y
permitirme compartirlo con todos
vosotros. El resto de lo que podáis leer
es un “currete que se ha pegado” él. Así,
que... ¡a disfrutarlo!

INTRODUCCIÓN
Como todos sabemos, Access tiene una forma nativa de obligarnos a introducir datos en un
determinado campo, por medio de la propiedad Requerido, de tal modo que si a la hora de
diseñar una tabla, le ponemos esa propiedad en sí, y no rellenamos ese campo, nos saldrá un
mensaje avisándonos para que lo rellenemos y no nos dejará continuar hasta que lo hagamos.
Hoy os voy a enseñar otra forma de requerir el relleno de uno o más campos, personalizando
el mensaje que queráis mostrar y además, coloreando los campos “obligatorios” que estén
vacíos.

PREPARANDO LA TABLA
En primer lugar, crearemos una tabla muy simple, para llevar una agenda de contactos, en la
que vamos a requerir 3 campos como obligatorios: Nombre, Teléfono y e-mail. A mi me ha
quedado una cosa así:

En segundo lugar, creamos el Formulario a nuestro gusto, y cuando ya lo tengamos, vamos a


“configurar” los campos obligatorios. Para ello, sacamos las propiedades del campo Nombre,
vamos a la pestaña Otras y añadimos al final del Nombre, las letras “Ob” (Ob de obligatorio).
Hacemos lo mismo con los campos Telefono_1 y e-mail_1
Se podrían usar otras, o colocarlas al principio del nombre, pero lo importante es que sean
siempre las mismas, y pilléis la idea del ejemplo.
1 La BD de ejemplo os la podéis bajar aquí

1
Visítame en http://bit.ly/NckAccess
Os dejo una imagen clarificadora:

PROGRAMANDO
El siguiente paso, es insertar un módulo nuevo en nuestra BD (mdlCodigos), y añadir la
siguiente función y el siguiente procedimiento:
'------------------------------------------------------------------------------------------
' Esta función comprueba que los controles cuyos valores son requeridos obligatoriamente

' no estén vacíos y nos colorea los controles vacíos.

'------------------------------------------------------------------------------------------

Public Function fncControlaVacios(miForm As String) As Boolean

Dim ctl As Control

fncControlaVacios = True 'Por defecto, suponemos que todo está bien

For Each ctl In Forms(miForm).Controls ' Para cada control del formulario

If ctl.Name Like "*Ob" Then ' Si es obligatorio (acaba en "Ob")...

If IsNull(ctl) Or ctl.Value = "" Then ' ...y si está vacío

ctl.BackColor = RGB(246, 110, 96) ' ...marcamos el campo

2
Visítame en http://bit.ly/NckAccess
fncControlaVacios = False ' Dice que hay fallos

Else

ctl.BackColor = vbWhite 'Volvemos el campo a su color original

End If

End If

Next ctl

End Function

'------------------------------------------------------------------------------------------------

' Este procedimiento restaura todos los bordes al color por defecto

'------------------------------------------------------------------------------------------------

Public Sub subRestauraCajasVacias(miForm As String)

On Error Resume Next

Dim ctl As Control

For Each ctl In Forms(miForm).Controls

If Not ctl.ControlType = acCommandButton Then ctl.BackColor = vbWhite

Next ctl

End Sub

La función revisa los controles que acaban en Ob del formulario que se le pasa como
parámetro, y devuelve False y colorea el control correspondiente si está vacío.
El procedimiento pone todos los controles en blanco de nuevo, menos los botones.
En ambos casos, lo hace recorriendo la colección Controls (For Each ctl In Forms(miForm).Controls)

Volvemos a nuestro formulario, y le programamos los siguientes eventos:


1º/ En Al activar el registro (Private Sub Form_Current), le ponemos: Call
subRestauraCajasVacias(Me.Name)

2º/ En Antes de actualizar(Private Sub Form_BeforeUpdate(Cancel As Integer), le ponemos:


If fncControlaVacios(Me.Name) = False Then

MsgBox "Los campos resaltados son obligatorios y debe introducir algún " _

& "valor para continuar.", vbExclamation + vbOKOnly, "ERROR: Campos vacíos"

Cancel = True

End If

Es decir, que si la función nos devuelve False (porque hay algún campo requerido vacío), nos
avisa y cancela el registro.
Y para acabar, en el los códigos de los botones Anterior, Siguiente y nuevo, en el control de
errores iría este código (pongo sólo el de cmdAnterior, pues el resto sería igual):
Salida:

Exit Sub

sol_err:

If fncControlaVacios(Me.Name) = False Then

'no hacemos nada

3
Visítame en http://bit.ly/NckAccess
Else

MsgBox Err.Description

End If

Resume Salida

Y en el código del botón cerrar,


ponemos Me.Undo antes de cerrar el
formulario, para deshacer los cambios y permitir la salida.

Y esto es todo. Espero que os resulte de provecho!

PARA FINALIZAR EL EJEMPLO


¡Vuelvo a ser yo ! Simplemente reafirmar la última frase de Sveinbjorn, pues poco más creo
que hay que añadir.

Un saludo, y...

¡suerte!

4
Visítame en http://bit.ly/NckAccess

También podría gustarte