Ignorar los acentos

¿Puedo hacer una búsqueda en mi base de datos y que no me tenga en cuenta los acentos?

1 respuesta

Respuesta
1
Perdona el retraso pero tengo una semanita de aúpa en el trabajo...
Te cuento cómo lo tengo hecho en algún formulario. Normalmente para este tipo de campos de búsqueda lo que hago es activar el encabezado/pie de formulario (opción que tienes en el menú Ver) y le pongo en el encabezado un campo de texto donde introducir el valor a buscar un botón justo al lado, que típicamente tendrá el icono de la lupa. En todo caso, te tienes que fijar en el nombre del campo de texto, o ponerle el que te guste, y ahora, en las propiedades del botón (Ver/Propiedades) buscas el Evento 'Al hacer click' te sitúas en su campo, y le das a los puntos suspensivos para generar código.
Ahora estarás en el editor de visual basic con el cursor dentro de un esuqeleto de función que se ejecutará al hacer click en el botón.
Antes que nada, comprueba que en Herramientas/Referencias tengas activa la Microsoft DAO 3.6 Object Library (la versiíon puede cambiar). Si no la tienes, pues la pones.
Vuelta al código. Justo antes del 'Private sub' donde estabas le pones la siguiente función:
Function sinAcentos(str$) As String
Dim chr1$, chr2$, t$, i%, j%
chr1 = "áéíóúÁÉÍÓÚ"
chr2 = "aeiouAEIOU"
t = str
For i = 1 To Len(chr1)
Do
j = InStr(t, Mid(chr1, i, 1))
If j > 0 Then Mid(t, j, 1) = Mid(chr2, i, 1)
Loop While j > 0
Next
sinAcentos = t
End Function
Que lo que hace es, dada una cadena, la devuelve con los acentos sustituidos por sus vocales.
Ahora te vuelves a donde estabas inicialmente, entre el 'private sub' y el 'end sub' y le pones
Dim r As Recordset, t$, busca$
If IsNull(Me.Texto2) Then
MsgBox "introduzca algo para buscar"
Exit Sub
End If
busca = sinAcentos(Me.Texto2)
Set r = Me.RecordsetClone
r.MoveFirst
While Not r.EOF
t = sinAcentos(Nz(r("nombre")))
If t = busca Then
Me.Bookmark = r.Bookmark
Exit Sub
End If
r.MoveNext
Wend
MsgBox "No se encontró"
Tendrás que sustituir el 'Texto2' por como se llame tu campo donde se introduce la cadena a buscar, y cambiar el "nombre" por como se llame el campo de la tabla que contiene el nombre que estás buscando.
Poco más. Guarda, y prueba. Si hay problemas, me avisas...
Directamente no. Tienes dos opciones para hacerlo:
a) Cuando buscas un nombre quitarle los acentos y meterte en un bucle que recorra todos los registros de la tabla cargando cada uno, quitando los acentos, y entonces comparando. Más fácil, pero muuuuuy lento si hay muchas entradas.
b) Cada vez que introduces un nombre en la tabla, tienes otro campo donde se introduce automáticamente el nombre ya sin acentos. Entonces, cuando tienes que buscar a alguien, lo buscas directamente sobre este campo. Inconvenientes: Necesitas otro campo, duplicas los datos del nombre, y necesitas hacer un procedimiento de evento en el formulario de altas para que meta el nombre sin acentos.
Tú dirás...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas