Hola,
Neceisto que alguien me confirme si es posible hacer una consulta por
criterio introduciendo el texto sin acentos y que me muestre el resultado
tal y como están introducidos en la tabla, osea, acentuado allí dónde
corresponde.
El problema es que si no introduzco el texto con su acento (según criterio
o filtro), Access no es capáz de resolverlo y no me da ningún resultado.
En la ayuda del Access no encuentro nada relacionado con el tema de
acentos.
Muchas gracias por adelantado
RESPONDE CHEA
=============
Esa es la solución que yo aplico, y para que no sea un coñazo hacer eso con
todas las vocales, hace tiempo que hice una función para que lo calculara.
Copiándola en un módulo, luego, en en el criterio de la consulta basta con
poner:
like buscaacent([introduzca texto a buscar])
La función en cuestión es la siguiente:
Function Buscaacent(X)
Dim i As Variant, A As Integer, l As Integer, busc As Variant
Static letras(5) As Variant
l = Len(X)
busc = X
A = 1
letras(1) = "AÁÀÂÄ"
letras(2) = "EÉÈÊË"
letras(3) = "IÍÌÎÏ"
letras(4) = "OÓÒÔÖ0"
letras(5) = "UÚÙÛÜ"
While A <= l
letra = Mid(busc, A, 1)
For Each i In letras
vocal = InStr(1, i, letra, 1)
If vocal > 0 Then
nuevaletra = "[" & i & "]"
busc = Left(busc, A - 1) & nuevaletra & Right(busc, l - A)
A = A + 1 + Len(i)
l = l + 1 + Len(i)
Exit For
End If
Next
A = A + 1
Wend
If busc = "" Then
Buscaacent = X
Else
Buscaacent = busc
End If
'(c) J.Bengoechea
End Function
RESPONDE eduardo olaz
=====================
Si también necesitas tratar las minúsculas y las "Yy" puedes usar el
siguiente código
Lo que hace es ir recorriendo uno a uno los caracteres del texto y los va
añadiendo por la derecha a otra subcadena, que al final será la que se
devuelva.
Caso de que el caracter tenga acento lo sustituye por la vocal, sin acento.
Toma en cuenta también las ÃãÕõ del portugués.
______________________________________
Public Function TextoSinAcentos(ByVal Texto As String) As String
' Esta función devuelve el texto sin acentos
' eduardo@olaz.net
Dim lngTexto As Long
Dim i As Long
Dim strCaracter As String * 1
Dim strNormalizado As String
lngTexto = Len(Texto)
If lngTexto = 0 Then
TextoSinAcentos = ""
Exit Function
End If
For i = 1 To lngTexto
strCaracter = Mid(Texto, i, 1)
Select Case strCaracter
Case "Á", "À", "Â", "Ä", "Ã"
strCaracter = "A"
Case "á", "à", "â", "ä", "ã"
strCaracter = "a"
Case "É", "È", "Ê", "Ë"
strCaracter = "E"
Case "é", "è", "ê", "ë"
strCaracter = "e"
Case "Í", "Ì", "Î", "Ï"
strCaracter = "I"
Case "í", "ì", "î", "ï"
strCaracter = "i"
Case "Ó", "Ò", "Ô", "Ö", "Õ"
strCaracter = "O"
Case "ó", "ò", "ô", "ö", "õ"
strCaracter = "o"
Case "Ú", "Ù", "Û", "Ü"
strCaracter = "U"
Case "ú", "ù", "û", "ü"
strCaracter = "u"
Case "Ý"
strCaracter = "Y"
Case "ý", "ÿ"
strCaracter = "y"
End Select
TextoSinAcentos = TextoSinAcentos & strCaracter
Next i
End Function
______________________________________
RESPONDE JUAN M AFAN DE RIBERA
===============================
Hola Eduardo,
si me permites, yo también quiero decir algo. Es sólo para sustituir ese
laaaargo Select Case. Por si te sirviera, lo he cambiado un poco, a ver qué
te parece. Ojo que lo tuyo ya me parece perfecto y lo de Chea (que es la
madre del cordero en este asunto) pues también... pero en fin, es por meter
baza, ya sabes, jejeje
Public Function TextoSinAcentos(ByVal Texto As String) As String
' Esta función devuelve el texto sin acentos
' eduardo@olaz.net
Dim lngTexto As Long
Dim i As Long
Dim lngPos As Long
Dim strCaracter As String * 1
Dim strNormalizado As String
Dim strConAcentos As String
Dim strSinAcentos As String
lngTexto = Len(Texto)
If lngTexto = 0 Then
TextoSinAcentos = ""
Exit Function
End If
strConAcentos = "ÁÀÂÄÃáàâäãÉÈÊËéèêëÍÌÎÏíìîïÓÒÔÖÕóòôöõÚÙÛÜúùûüÝýÿ"
strSinAcentos = "AAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUUuuuuYyy"
For i = 1 To lngTexto
strCaracter = Mid(Texto, i, 1)
'comparamos el caracter con la cadena con acentos
lngPos = InStr(1, strConAcentos, strCaracter, vbBinaryCompare)
'si se ha encontrado coincidencia ...
If lngPos <> 0 Then
'sustituímos el caracter con el que tiene la misma
'posición en la cadena sin acentos (o sea la letra sin acentos)
strCaracter = Mid(strSinAcentos, lngPos, 1)
End If
'... y si no, pues seguimos como si nada
TextoSinAcentos = TextoSinAcentos & strCaracter
Next i
End Function
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)