Regla de validación para evitar que se introduzcan ciertas palabras en un campo de texto de access

Como puedo colocar una regla de validación en un campo de texto de access, que no permita que acepte palabras tales, como : modificación, incremento, liberar, etc. Ya que estas deberían de escogerse desde otro campo con menu desplegable. Encontré un ejemplo pero solamente me funciona para una palabra, ya no me permite poner más : NoEs "modificacion"

2 respuestas

Respuesta
1

Lo puedes hacer de muchas formas. Por ejemplo, vamos a suponer que tengo una tabla Prohibidas, con las palabras que no se pueden usar

También tengo una tabla Clientes con, entre otros, un campo llamado Opinión donde voy a escribir.

Con ellas dos hago una consulta como

También tengo un formulario Clientes donde voy a escribir algo en el control Opinión

Puedes ver que contiene la palabra prohibida Ahora. Y puedes ver también que el cursor aún está en el control Opinión. Si pulso Enter

Me sale un mensaje de que esa frase contiene una palabra prohibida y cuando pulso Aceptar, el cursor se vuelve a Opinión para que la cambies.

El código del evento Después de actualizar del cuadro de texto Opinión es

Private Sub Opinion_AfterUpdate()
Me.Requery
If DCount("*", "consulta2") >= 1 Then
MsgBox "Imposible, en esa frase hay una palabra prohibida", vbOKOnly + vbExclamation, "Tendrás que cambiar la frase"
Opinion.SetFocus
End If

En esencia, cuando lo escribo y pulso Enter, el formulario "reconsulta" su origen de registros, en este caso la tabla Clientes, con lo que se "rellena" o no( si no hay palabras prohibidas) la consulta2. Por eso después cuenta si hay registros en la consulta. Si hay quiere decir que eso que he escrito tiene una palabra prohibida y por eso sale el mensaje y el cursor se "vuelve" a Opinión para que la cambies.

Respuesta
1

Le dejo otra opción utilizando colecciones-

Formulario

Ingreso el texto y presiono Enter, obtengo:

Código del evento Antes de actualizar del cuadro de texto "Frase"

Private Sub ctlFrase_BeforeUpdate(Cancel As Integer)
  If busca_cadena(Me.ctlFrase) Then
     Cancel = True
  End If
End Sub

Código de la función busca_cadena:

Public Function busca_cadena(strCadena As String) As Boolean
' Función para buscar una cadena de texto en una frase
' Parámetros:
' strCadena ---> Cadena a buscar
' Ejemplo de llamada:
 '   busca_cadena("honda")  --> Retorna True
' Elaborada por:
' Eduardo Pérez Fernández
 ' Fecha 298/09/2022
 Dim strColeccion As New Collection
 Dim mivar As Variant
'Aquí se colocan las palabras a restringir
 'puede adicionar las que necesite
 strColeccion. Add "honda"
 strColeccion.Add "cali"
 strColeccion.Add "medellin"
 strColeccion.Add "bogotá"
 For Each mivar In strColeccion
    If strCadena Like "*" & mivar & "*" Then
      MsgBox "No esta permitida la palabra " & vbCrLf & vbCrLf & mivar, vbInformation, "Le informo"
      busca_cadena = True
      Exit For
   End If
 Next
End Function

Copie la función en un módulo y modifique las palabras de la colección de acuerdo con sus necesidades, es decir, reemplace, honda, cali, medellin, bogotá. Si necesita adicionar ingrese por cada palabra algo como: 

StrColeccion. Add "palabra"

Estuve revisando y NO se puede utilizar LIKE porque no permitiría el contenido del campo si una palabra contiene en alguna parte el texto, por ejemplo, tengo excluida la palabra "honda", si valido con LIKE "Soy hondano" no lo va a permitir. Esto aplica para el otro ejemplo que le suministran.

En consecuencia, reemplace la función por estas 2 funciones:

Función Principal

Public Function busca_cadena(strFrase As String, Optional intForma As Byte) As Boolean
' Función para buscar una cadena de texto en una frase
' Parámetros:
' strFrase ---> Cadena a buscar
 '          intFroma ---> 1= Palabra completa 2= Operador LIKE
' Si omite la forma se asigna por defecto 1(palabra completa)
' Requiere de la función:
 '                          compara_palabra()
' Ejemplos de llamada:
'
 '      busca_cadena("mi cali es lingo",1)  --> Retorna True
 '      busca_cadena("mi calisto es lingo",2)  --> Retorna True porque está cali
 '      busca_cadena("mi calisto es lingo",1)  --> Retorna False. Sin LIKE
'
' Elaborada por:
' Eduardo Pérez Fernández
 ' Fecha 29/09/2022
 Dim strColeccion As New Collection
 Dim mivar As Variant
 If intForma = 0 Then
   intForma = 1
 End If
'Aquí se colocan las palabras a restringir
 'puede adicionar las que necesite
 strColeccion. Add "honda"
 strColeccion.Add "cali"
 strColeccion.Add "medellin"
 strColeccion.Add "bogotá"
 For Each mivar In strColeccion
   If intForma = 1 Then ' palabra completa
     If compara_palabra(strFrase, mivar) Then
      MsgBox "No esta permitida la palabra " & vbCrLf & vbCrLf & mivar, vbInformation, "Le informo"
      busca_cadena = True
      Exit For
     End If
   Else
      If strFrase Like "*" & mivar & "*" Then
         MsgBox "No esta permitida la palabra " & vbCrLf & vbCrLf & mivar, vbInformation, "Le informo"
         busca_cadena = True
        Exit For
      End If
   End If
 Next
End Function

Función llamada por la función principal

Public Function compara_palabra(ByVal strPalabras As String, strCadena As Variant) As Boolean
' Función para comparar palabras de una frase
' Sintaxis:
'               compara_palabra(<<texto>>,[palabra a buscar])
' Ejemplo de llamada:
'                      compara_palabra("soy de honda","honda") ---> Retorna True
'                      compara_palabra("soy hondano","honda")  ---> Retorna False
' Elaborada por:
'
'   Eduardo Pérez Fernández
'   Fecha: 29/09/2022
Dim palabras As Variant
Dim contador As Integer
palabras = Split(strPalabras, " ")
For contador = LBound(palabras) To UBound(palabras)
    strPalabras = palabras(contador)
    If strPalabras = strCadena Then
       compara_palabra = True
    End If
Next contador
End Function

Si quiere el ejemplo lo puede solicitar a [email protected] 

Y en el evento Antes de Actualizar del campo cuadro de texto. Cambie por este código.

Private Sub ctlFrase_BeforeUpdate(Cancel As Integer)
  If busca_cadena(Me.ctlFrase, 1) Then
     Cancel = True
  End If
End Sub

Observe que puse como segundo parámetro 1 porque quiero validar la palabra completa, es decir, sin LIKE.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas