Búsqueda con/sin acentos y resultados

Dudas sobre código
pitxiku
VIP
Mensajes: 57
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Búsqueda con/sin acentos y resultados

Mensajepor pitxiku » Jue Dic 07, 2017 1:30 pm

Te he hecho un pequeño ejemplo, se llama SinAcentos y está colgado aquí:

- https://c.gmx.es/pitxiku@gmx.es/Mzpg6i5xSzey0vz3qIjG0Q

Tiene 1 tabla, 1 consulta y 1 módulo. La consulta busca los registros que tengan *maría* o *maria*. A ver si te sirve.

MSdP
Nivel 1
Mensajes: 12
Registrado: Vie Nov 17, 2017 9:26 am

Re: Búsqueda con/sin acentos y resultados

Mensajepor MSdP » Jue Dic 07, 2017 2:03 pm

Gracias por tu ejemplo, pero creo que pongo mal la llamada a la función. Verás la cosa es que en vez de pasarle el nombre entre comillas como pones en el ejemplo
WHERE (((tblRegistros.nombreRegistro) Like buscaacent("*maria*")))
Para mi "maria" tiene que ser como el campo inombre
WHERE ((Datos_personales.Nombre) Like "*" & [inombre] & "*").
inombre es el campo donde escribo el nombre a buscar que me lo compara/busca con el campo Nombre de la tabla Datos_personales.
¿Cómo puedo incluir aquí la función?
Si pongo
WHERE ((Datos_personales.Nombre) Like Buscaacent(*" & [inombre] & "*")) me da error de compilación.
He añadido la función en un nuevo módulo como me indicas.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 842
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Búsqueda con/sin acentos y resultados

Mensajepor Sveinbjorn » Jue Dic 07, 2017 2:22 pm

A ver, que me parece que no acabas de ver claro lo que hace la función:

1º/ Abre el ejemplo de pitxiku, vete al módulo donde está la función y pulsa Ctrl+F5 para mostrar la ventana Inmediato (si ya la tienes a la vista, no lo hagas)
2º/ Escribe, en la ventana inmediato:

Código: Seleccionar todo

?Buscaacent("maria")

y pulsa Intro. Verás que te devuelve:

Código: Seleccionar todo

m[AÁÀÂÄ]r[IÍÌÎÏ][AÁÀÂÄ]

Es decir, te sustituye cada vocal del texto que le pasas, por un conjunto de la misma vocal con todos los acentos gráficos posibles.

Para aplicarlo en una SQL, simplemente has de poner la el campo en el que vas a buscar, el LIKE, y la función y el cuadro de texto que contiene la cadena, algo así:

Código: Seleccionar todo

.... WHERE Nombre LIKE Buscaacent([inombre])....


No hay necesidad de meter asteriscos ni cosas raras por el medio...

Ahora bien, depende de dónde escribas la SQL, lo tendrás que poner de una forma u otra.

Si lo haces en el editor de SQL:

Código: Seleccionar todo

.... WHERE Nombre LIKE Buscaacent([Formularios]![NombreFormulario]![inombre])...


Si lo haces desde VBA:

Código: Seleccionar todo

.... WHERE Nombre LIKE Buscaacent(" & [inombre] & ")....
Sveinbjorn El Rojo

MSdP
Nivel 1
Mensajes: 12
Registrado: Vie Nov 17, 2017 9:26 am

Re: Búsqueda con/sin acentos y resultados

Mensajepor MSdP » Jue Dic 07, 2017 3:18 pm

Creo que no me he expresado bien, ya entiendo que la función sustituye todas las vocales, mi duda está en que no sólo quiero el nombre de maria sino cualquier nombre que introduzco en el campo inombre.
En el origen del registro del subformulario Datos_personales tengo la siguiente consulta:

Código: Seleccionar todo

SELECT Datos_personales.DNI, Datos_personales.Nombre, Datos_personales.Fnac, Datos_personales.ex
FROM Datos_personales
WHERE (((Datos_personales.DNI) Like "*" & [idni] & "*") AND ((Datos_personales.Nombre) Like Buscaacent([inombre])) AND ((Datos_personales.ex) Like "*" & [ext] & "*"))
ORDER BY Datos_personales.Nombre;

Al ejecutar me da un error 94: uno no válido de null
Al finalizar la deppuración me dice que la expresión l= Len (X) no está escrita correctamente o es muy compleja para evaluarse. Tengo la función exactamente igual que pitxiku.
¿Alguna idea? ¿Es como si no me estuviese cogiendo la longitud del campo inombre?

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 842
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Búsqueda con/sin acentos y resultados

Mensajepor Sveinbjorn » Jue Dic 07, 2017 4:16 pm

Ya te dije antes la sintaxis que debes utilizar:

Sveinbjorn escribió:Si lo haces en el editor de SQL:

Código: Seleccionar todo

.... WHERE Nombre LIKE Buscaacent([Formularios]![NombreFormulario]![inombre])...



y no es lo que tu estás poniendo...

Por otro lado, el error ese que te da es porque a la función le estás pasando un valor Nulo, o sea, que no hay un valor en inombre, lo que tiene sentido si usas ya la función en el origen de registros del subformulario desde un primer momento..., porque al cargarlos, aún no has tenido tiempo de escribir nada en el cuadro de texto :roll:

Mira una forma de hacerlo, partiendo del ejemplo de pitxiku: http://filebig.net/files/PsYuuMfjbZ
Sveinbjorn El Rojo

MSdP
Nivel 1
Mensajes: 12
Registrado: Vie Nov 17, 2017 9:26 am

Re: Búsqueda con/sin acentos y resultados

Mensajepor MSdP » Lun Dic 11, 2017 1:51 pm

Hola,
ya me funciona pero para ello he tenido que sacar la función del subformulario. Es decir, en el subformulario de Datos_personales he dejado la siguiente consulta:

Código: Seleccionar todo

SELECT Datos_personales.DNI, Datos_personales.Nombre, Datos_personales.Fnac, Datos_personales.ex
FROM Datos_personales
WHERE (((Datos_personales.DNI) Like "*" & [idni] & "*") AND ((Datos_personales.ex) Like "*" & [ext] & "*"))
ORDER BY Datos_personales.Nombre;

Y después de actualizar el campo inombre he puesto el siguiente código:

Código: Seleccionar todo

Private Sub iNombre_AfterUpdate()
Dim miFiltro As String
miFiltro = "Nombre LIKE '*" & Buscaacent(inombre) & "*'"
Me.Subformulario_Datos_personales.Form.Filter = miFiltro
Me.Subformulario_Datos_personales.Form.FilterOn = True
Me.Subformulario_Datos_personales.Form.TimerInterval = 50000
End Sub

Gracias a todos por vuestra ayuda.
Un saludo


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado