Búsqueda con/sin acentos y resultados

Dudas sobre código
pitxiku
VIP
Reto01
Mensajes: 165
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 2
Mensajes: 25
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: 946
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 2
Mensajes: 25
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: 946
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 2
Mensajes: 25
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

MSdP
Nivel 2
Mensajes: 25
Registrado: Vie Nov 17, 2017 9:26 am

Re: Búsqueda con/sin acentos y resultados

Mensajepor MSdP » Jue Feb 01, 2018 2:06 pm

Hola de nuevo,
Estoy intentando reutilizar esta función de acentos con la diferencia de que el resultado en vez de mostrarlo en un subformulario, tiene que mostrarlo en un cuadro de lista en el cual tengo un "case"...
Voy a explicarlo con fotos:
-Tengo esto: http://www.filebig.net/files/MnGX5RaVdQ
En el campo donde tengo que indicar el idioma quiero que tanto si pongo ingles como inglés me muestre los resultados solicitados:
- Ahora si pongo inglés me muestra correcto todo: http://www.filebig.net/files/EeWdftX8hA
- Pero si quito el acento al buscar, no me muestra nada: http://www.filebig.net/files/9TrmfdR3Fz
-Después tengo un case en el que en la parte a la que afecta esta búsqueda tengo esto:

Código: Seleccionar todo

Case Is = "3"
    Select Case Me.Lista1
    Case Is = "Idioma"
    Me.Lista0.RowSource = "SELECT Idiomas.dni, Idiomas.IdNivel, Datos_personales.Nombre FROM Datos_personales INNER JOIN Idiomas ON Datos_personales.DNI = Idiomas.dni WHERE  [Idiomas].[IdIdiomas] like '*" & Busca & "*'  AND (([Idiomas].[dni]=[Datos_personales].[DNI]))ORDER BY Idiomas.dni;"
    Me.Totales.Visible = True
    total = Me.Lista0.ListCount
    Me.Totales = total
    End Select
End Select


Quiero que tanto si pongo inglés como si pongo ingles me muestre lo mismo que en la imagen de correcto (la imagen 2.busqueda)
No sé cómo añadir esto en un case en el que muestro los datos a través de un select...
¿Podéis ayudarme?

pitxiku
VIP
Reto01
Mensajes: 165
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Búsqueda con/sin acentos y resultados

Mensajepor pitxiku » Vie Feb 02, 2018 8:13 pm

A ese Busca tendrás que aplicarle la función que se vio anteriormente, para que cambie las vocales por la estructura de letras con/sin acentos, creo.

MSdP
Nivel 2
Mensajes: 25
Registrado: Vie Nov 17, 2017 9:26 am

Re: Búsqueda con/sin acentos y resultados

Mensajepor MSdP » Lun Feb 05, 2018 10:18 am

Después de actualizar el campo Busca esto es lo que me hace:

Código: Seleccionar todo

Private Sub Busca_AfterUpdate()
Dim total As String
Select Case Me.Busqueda
'DATOS PERSONALES
Case Is = "1"
    Select Case Lista1
    Case Is = "Sexo"
    Me.Lista0.RowSource = "SELECT Datos_personales.DNI, Datos_personales.Nombre FROM Datos_personales Where [Datos_personales].[sexo]like '*" & Busca.Text & "*' AND (((Datos_personales.ex)=False)) order by [Nombre]ASC;"
    Me.Totales.Visible = True
    total = Me.Lista0.ListCount
    Me.Totales = total
    Case Is = "Fecha Nacimiento"
    Me.Lista0.RowSource = "SELECT Datos_personales.DNI, Datos_personales.Nombre FROM Datos_personales Where [Datos_personales].[FNac]like '*" & Busca.Text & "*' order by [Nombre]ASC;"
    Me.Totales.Visible = False
    Case Is = "NºSeguridad Social"
    Me.Lista0.RowSource = "SELECT Datos_personales.DNI, Datos_personales.Nombre FROM Datos_personales Where [Datos_personales].[SS] like '*" & Busca.Text & "*' order by [Nombre]ASC;"
    Me.Totales.Visible = False
    End Select
   
'DATOS CONTRATO
Case Is = "2"
    Select Case Me.Lista1
    Case Is = "Tipo Contrato"
    Me.Lista0.RowSource = "SELECT DatosContrato.dni,DatosContrato.tipocontra  FROM DatosContrato WHERE [DatosContrato].[tipocontra] like '*" & Busca.Text & "*' ORDER BY DatosContrato.tipocontra DESC;"
    Me.Totales.Visible = True
    total = Me.Lista0.ListCount
    Me.Totales = total
    Case Is = "Fecha incorporacion"
    Me.Lista0.RowSource = "SELECT DatosContrato.dni, DatosContrato.fechaanti  FROM DatosContrato WHERE [DatosContrato].[fechaanti] like '*" & Busca.Text & "*' ORDER BY Escritos.fechaanti DESC;"
    End Select
   
'IDIOMAS
Case Is = "3"
    Select Case Me.Lista1
    Case Is = "Idioma"
    Me.Lista0.RowSource = "SELECT Idiomas.dni, Idiomas.IdNivel, Datos_personales.Nombre FROM Datos_personales INNER JOIN Idiomas ON Datos_personales.DNI = Idiomas.dni WHERE  [Idiomas].[IdIdiomas] like '*" & Busca & "*'  AND (([Idiomas].[dni]=[Datos_personales].[DNI]))ORDER BY Idiomas.dni;"
    Me.Totales.Visible = True
    total = Me.Lista0.ListCount
    Me.Totales = total
    End Select
End Select
End Sub


Lo que no sé es como introducir aquí la llamada a la función que tengo de Buscaacent...
No se trata de mostrar los resultados en un subformulario sino en un cuadro de lista (Lista0)
Un saludo!

MSdP
Nivel 2
Mensajes: 25
Registrado: Vie Nov 17, 2017 9:26 am

Re: Búsqueda con/sin acentos y resultados

Mensajepor MSdP » Lun Feb 05, 2018 12:53 pm

Hola,
Ya está, tan sencillo como donde ponía WHERE [Idiomas].[IdIdiomas] like '*" & Busca & "*' decirle que pase la función...
Vamos que esta parte del código me queda asÍ:
WHERE [Idiomas].[IdIdiomas] like '*" & Buscaacent(Busca) & "*'

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