Para Sveinbjorn El Rojo sobe acentuación

Sveinbjorn El Rojo: Después de estar varios días probando casi todo lo que hay sobre como hacer una búsqueda sin tener en cuenta los acentos y después de sentirme fracasado, te escribo porque otras veces me sacaste del atolladero.

Tengo una tabla (T RECETAS) con dos campos principales de búsqueda, el principal es Ingrediente (memo) y el otro NombreRecetas (Texto), he creado una consulta de búsqueda

 Private Sub INGREDIENTES_Click()

On Error GoTo Err_INGREDIENTES_Click

‘Elimina la anterior búsqueda que este en la tabla T BUSCAR

DoCmd. OpenQuery "C ELIMINACION T BUSCAR"

'Busca las recetas que contengan ese ingrediente

DoCmd. OpenQuery "C BUSQUEDA INGREDIENTES"

    DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

Exit_INGREDIENTES_Click:

    Exit Sub

Err_INGREDIENTES_Click:

    MsgBox Err.Description

    Resume Exit_INGREDIENTES_Click

Con esto me sale el nombre de las recetas que tienen este ingrediente, pero diferencia si esta acentuado o no que podría hacer para evitar esto.

2 Respuestas

Respuesta
1

Hace tiempo que no respondo en este foro, pero ya que me preguntas directamente, te comento cómo lo haría yo:

1º/ En un módulo pondría esta función (u otra de las muchas que hay por internet, incluso en esta misma web):

'--------------------------------------------------------------------------------------------
'Función para quitar acentos de una cadena de texto
'--------------------------------------------------------------------------------------------
Public Function fncQuitarAcentos(ByVal strTexto As String) As String
Const conAcentos = "ÁÀÂÄÃáàâäãÉÈÊËéèêëÍÌÎÏíìîïÓÒÔÖÕóòôöõÚÙÛÜúùûüÝýÿ"
Const sinAcentos = "AAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUUuuuuYyy"
Dim i As Long
Dim lngPos As Long
Dim strCaracter As String * 1
If Len(strTexto) = 0 Then
fncQuitarAcentos = ""
Exit Function
End If
For i = 1 To Len(strTexto)
strCaracter = Mid(strTexto, i, 1)
'comparamos el caracter con la cadena con acentos
lngPos = InStr(1, conAcentos, 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(sinAcentos, lngPos, 1)
End If
'... y si no, pues seguimos como si nada
fncQuitarAcentos = fncQuitarAcentos & strCaracter
Next i
End Function

2º/ Modificaría tu consulta "C BUSQUEDA INGREDIENTES" (supongo que será la de la imagen), quitando el criterio del campo Ingredientes, y añadiendo un nuevo campo al final de esa misma consulta, tal que así (revisa que los nombres sean los correctos):

Fíjate que ese "nuevo" campo de la consulta no se anexa a tu tabla, sirve solo para filtrar los resultados. Al aplicar la función para quitar acentos en el campo de la tabla y en el valor buscado (en "campo" y "Criterios"), da igual que escribas con o sin acento, porque te los quitará de ambos y la búsqueda siempre será sin acentos. Pero como solo es un campo que sirve para filtrar, lo que verás en tu tabla, y por ende en tu formulario, será lo que hayas escrito originalmente.

Por otro lado, no acabo de ver ese "tinglado" que has montado con una tabla, una consulta de eliminación y otra de datos anexados, cunado con una simple consulta de selección puedes hacer exactamente lo mismo...

Siento haberte hecho perder el tiempo, pero soy incapaz de hacer que funcione, siempre me da algún fallo no veo el motivo. Cuento lo que he puesto.

Creo un módulo que lo he llamado ---fncQuitarAcentos--- con la función que me adjuntas, seguidamente en la consulta la he modificado así:

Pero cundo pulso en la búsqueda me sale el mensaje que mando:

La verdad es que no se prácticamente nada sobre Access, pues esta base la hice hace más de diez años, si pudieras decirme algo más te lo agradecería, pues llevo casi tres horas con ello y no lo logro arrancar.

No puedes llamar al módulo igual que a la función, porque si no, Access no sabe a qué te estás refiriendo. Cambia el nombre del módulo, por ejemplo a "mdlCodigos" y se te debería resolver el problema

¡Gracias! Buenos días Sveinbjorn: Siempre eres mi salvación, lo acabo de hacer y sale perfectamente, te estoy eternamente agradecido por que nunca me has fallado, si no estas últimamente por este foro me gustaría saber por donde andas. Saludos Manuel.

En este otro me puedes encontrar, y si no soy yo, cualquiera de los usuarios te ayudará:

https://nksvaccessolutions.com/Foro/index.php 

Respuesta

Créame no hay más alternativa que lo explicado en Base de datos Access (terminar una consulta) o hacerlo por SQL, no obstante, si quiere envíeme la base de datos con datos ficticios a [email protected] y miro que puedo hacer. De lo contrario espere la respuesta de quien ha dirigido la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas