Restringir símbolos, acentos y caracteres campo texto

Gusto en saludarte nuevamente.
Espero que el nuevo año este de maravilla.
En esta ocasión quisiera restringir la entrada de caracteres a un campo tipo texto en un formulario. Manejo Access 2007.
Actualmente el campo "nombre" acepta símbolos "$#%$&" y acentos "José, María" ademas de qué nunca falta quien utiliza el "-" o "/" para separar en vez de un espacio.
¿Existe manera de restringir el uso de símbolos, acentos y guiones?
Respuesta
2

Tu "inocente" pregunta daría para escribir un libro... je, je...

Vamos a ver... te explico cómo lo solucionaría yo. Pero para ello debemos dividir el problema en dos partes:

- Primera parte: uso de guiones (y otros símbolos)

La manera más sencilla y efectiva para evitar la introducción de guiones u otros símbolos "extraños" es utilizar una máscara de entrada. La máscara de entrada la puedes definir directamente sobre las propiedades del campo, en la tabla en vista diseño.

¿En tu caso parece que la máscara de entrada más efectiva es utilizando?

Es decir, ¿si suponemos que la longitud del campo es de diez caracteres tu máscara de entrada sería? diez veces; esto es:?

Esta máscara te permite escribir letras y espacios, pero no te deja escribir guiones.

Si me dices que el campo también puede contener números, además de letras, la máscara de entrada debería utilizar el carácter a

Es decir, si seguimos con el ejemplo de los diez caracteres, tu máscara debería ser:

Aaaaaaaaaa

Simple y efectivo.

- Segunda parte: acentos

Para solventar este "problema" debemos recurrir a código VB. Lo que se debería hacer sería:

1.- Con el formulario en vista diseño, seleccionar el campo [nombre] y sacar sus propiedades.

2.- Nos vamos a pestaña Eventos -> Después de actualizar, y le generamos el siguiente código:

...

Private Sub Nombre_AfterUpdate()
'Declaramos las variables
Const carConAc As String = "áéíóú"
Const carSinAc As String = "aeiou"
Dim vTexto As String
Dim i As Integer, largoTexto As Integer
Dim mtzConAc(Len(carConAc))
Dim mtzSinAc(Len(carSinAc))
'Rellenamos la primera matriz con acentos
For i = 1 To Len(carConAc)
mtzConAc(i) = Mid(carConAc, i, 1)
Next
'Rellenamos la segunda matriz sin acentos
For i = 1 To Len(carConAc)
mtzSinAc(i) = Mid(carSinAc, i, 1)
Next
'Asignamos valor a las variables
vTexto = Nz(Me.Nombre.Value, "")
'Si no se ha escrito nada no se ejecuta nada
If vTexto = "" Then Exit Sub
'Cogemos la longitud del texto
largoTexto = Len(vTexto)
'Iniciamos el proceso de reemplazo
For i = 1 To Len(carConAc)
vTexto = Replace(vTexto, mtzConAc(i), mtzSinAc(i))
Next i
'Reescribimos el texto sin acentos
Me.Nombre.Value = vTexto
End Sub

...

Fíjate en las dos constantes del principio: carConAc y carSinAc. Verás rápidamente que hay una correspondencia entre carácter acentuado y no acentuado en función de su posición (es decir, la posición 1 es la a; la posición 2 es la e, etc.).

Si te interesara incluir mayúsculas acentuadas deberías respetar la correlación entre letras y posición. ¿Hablo raro? (Je, je...). Te pongo un ejemplo:

- Esta modificación estaría bien:

Const carConAc As String = "áéíóúÁÉ"
Const carSinAc As String = "aeiouAE"

- Esta modificación estaría mal

Const carConAc As String = "áéíóúÁÉ"
Const carSinAc As String = "aeiouEA"

Porque lo que haría sería cambiarte Á por E, y É por A.

Y eso es todo. Ya me dirás qué tal te ha ido.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas