Buscar nombres en un Forms a medida que se va escribiendo en un campo de búsqueda.

Necesito realizar búsquedas de nombres a medida que se va escribiendo en un campo de búsquedas.

Lo que pretendo es que a medida que se va escribiendo queden solamente aquellos que coincidan con lo escrito.

También necesito que se reconozcan los espacios o caracteres especiales que se van intercalando entre las palabras con el fin de encontrar nombres compuestos.

Ejemplo de búsqueda: Juan Pedro & María Luisa

1 Respuesta

Respuesta
2

En el evento "al cambiar" del cuadro de texto donde escribas:

Me.Filter="NombreCampo LIKE '" & Me.NombreCuadroTexto & "*'"

Me.FilterOn=True

O si prefieres no filtrar y modificar el origen del formulario:

Me.Recordsource= "SELECT * FROM Tabla WHERE NombreCampo LIKE '" & Me.NombreCuadroTexto & "*'"

Me.Recordsource.Requery

En cualquiera de los dos casos, te buscará registros que EMPIECEN por lo que vas escribiendo. Si quieres que te busque lo que escribes en CUALQUIER parte del campo, las primeras líneas de los códigos serían:

Me.Filter="NombreCampo LIKE '*" & Me.NombreCuadroTexto & "*'"

o

Me.Recordsource= "SELECT * FROM Tabla WHERE NombreCampo LIKE '*" & Me.NombreCuadroTexto & "*'"

He utilizado esto

Private Sub NombreCuadroTexto_Change()
Me.Filter = "[Nombre] LIKE '*" & Me.NombreCuadroTexto & "*'"
Me.FilterOn = True
End Sub

pero no me permite escribir los espacios en Blanco: Juan Luis no me deja buscarlo

Disculpa, porque al responderte desde el móvil me quedó incompleta la respuesta. Con el evento hay que usar la propiedad Text del cuadro de texto:

Private Sub NombreCuadroTexto_Change()
Me.Filter = "[Nombre] LIKE '*" & Me.NombreCuadroTexto.Text & "*'"
Me.FilterOn = True
End Sub

El "problema" es que los espacios no los lleva bien (al menos con access 2007).

Mira si así te funciona. Si no, en breve te doy otra alternativa

Me sigue igual, no me acepta los espacios en blanco.

Trabajo con Access 2007

A mi así en Access 2007 me funciona (mira que me costó...)

Private Sub NombreCuadroTexto_Change()
TempVars!elFiltro = Me.NombreCuadroTexto.Text
Me.Filter = "[Nombre] LIKE '*" & TempVars!elFiltro & "*'"
Me.FilterOn = True
Me.NombreCuadroTexto.SetFocus
Me.NombreCuadroTexto= TempVars!elFiltro
Me.NombreCuadroTexto.SelStart = Len(TempVars!elFiltro) + 1
End Sub

El archivo de prueba: http://www.filebig.net/files/teWTz5AUnV 

No he podido contestarte antes y ahora lo he probado adaptándolo a lo mio:

Private Sub txtBUSCAR_Change()

TempVars!elFiltro = Me.txtBUSCAR.Text
Debug.Print TempVars!elFiltro & "*"
Me.Filter = "[Nombre] LIKE '*" & TempVars!elFiltro & "*'"
Me.FilterOn = True
Me.txtBUSCAR.SetFocus
Me.txtBUSCAR = TempVars!elFiltro
Me.txtBUSCAR.SelStart = Len(TempVars!elFiltro) + 1

end sub

y me esta dando este error:

Este error me ocurre en el momento que no encuentra ningún nombre coincidente con: txtBUSCAR, mientras esta filtrando nombres funciona bien pero en el momento de no encontrar ninguno me da el error.

Primero: la línea del Debug. Print la puedes eliminar, en el ejemplo está solo para comprobar si la variable temporal recogía los espacios o no.

Segundo: no indicas en qué línea te da el error y además, el problema que dices tener no me tiene ningún sentido. Si los nombres son correctos, no te tendría que dar ningún error, como puedes comprobar en el adjunto que te envié (acabo de probar a poner un nombre que no existe, y no da ningún problema)

Me da el error en esta línea:

  Me.txtBUSCAR.SelStart = Len(TempVars!elFiltro) + 1

Y se produce cuando estoy escribiendo y no encuentra un carácter que no esta en los nombres

Te repito que ese error no tienen ningún sentido, por dos motivos:

1º/ El cuadro de texto SI tiene el enfoque, porque se lo pasas dos lineas antes (Me.txtBUSCAR.SetFocus)

2º/ En el archivo de ejemplo funciona perfectamente (de nuevo, lo acabo de probar poniendo solo números y signos "raros" que no están en los nombres de los clientes y filtra perfectamente [no devuelve registros]). ¿Probaste en mi archivo a ver si te pasa lo mismo?

Algo debes de tener en tu BD que te provoca ese error, pero no imagino el qué.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas