Access Error de Auto Filtro en Formulario

Soy nuevo en la página. Realmente no soy de registrarme, me gusta estar de espectador jajaja, pero debido a que no puedo dar solución al problema no me quedo otra.

Bueno como dice el titulo, tengo armado una base con varios formularios, uno de estos tiene embebido un subformulario (lista de usuarios) y mediante un campo en el form contenedor (txt) realizo un filtrado del subformulario. El tema es que al escribir el texto en el campo, este llama por código al filtro, y a medida que voy tipiando me va filtrando el subformulario. El problema es cuando quiero agregar un ESPACIO, este no me deja. Ósea no puedo realizar un búsqueda exacta de un registro que posea segundo nombre (pepito armando). Dejo el code, tanto del campo txt de búsqueda y del filtro.

Lo que busco realmente es poder seguir autofiltrando a medida que tipeo en el campo y me deje agregar el espacio dichoso.

Private Sub txtlista1_Change()
Dim alfa As String          
Me.Refresh
    alfa = filtrando()
Me.Refresh
Me.txtlista1.SetFocus
Me.txtlista1.SelStart = Len(Me.txtlista1.Text)
End Sub

2 respuestas

Respuesta
1

Solo adicione +1 a esta línea:

Me.txtlista1.SelStart = Len(Me.txtlista1.Text)

Sería algo como:

Me.txtlista1.SelStart = Len(Me.txtlista1.Text)+1

Corrijo para permitir el espacio haga lo siguiente:

1. A nivel del módulo del formulario defina esta variable:

Private blnSpace As Boolean

2. Su código debe quedar así:

Private Sub txtlista1_Change()
Dim alfa As String          
Me.Refresh
If blnSpace = False Then
    alfa = filtrando()
    Me.Refresh
    Me.txtlista1.SetFocus
    Me.txtlista1.SelStart = Len(Me.txtlista1.Text)+1
End If
End Sub

Debe programar el evento Al presionar una  tecla para anular el espacio:

Private Sub ctlbusca_KeyPress(KeyAscii As Integer)
    If KeyAscii = 32 Then
      blnSpace = True
    Else
      blnSpace = False
    End If
End Sub

Para realizar búsquedas como le explican debe tener cuidado en eliminar los acentos, en caso contrario las palabras con acentos no se mostrarán, salvo que estos se digiten. Para esto utilice:

StrConv(Me. CtlBusca.Text, 2, 1042)

En donde Me. CtlBusca.Text es el campo donde va ingresando el texto a buscar.

A manera de ejemplo le muestro un formulario que utilizo para buscar y lo llamo desde varios formularios.

CODIGO DEL CAMPO "Buscar"

Private Sub ctlBusca_Change()
 On Error Resume Next
 Dim strSQl As String
 If blnSpace = False Then
 Select Case Me.OpenArgs
 Case 1 'Ventas
    strSQl = "SELECT tblreses.idres, tblreses.nombre,tblreses.fechanace,tblreses.numero_res,tblreses.sexo,tblreses.ides,tblreses.cargada,tblreses.escotera " & vbCrLf
    strSQl = strSQl & " FROM tblreses WHERE ides=1 AND  StrConv([nombre],2,1042) " & vbCrLf
    strSQl = strSQl & " Like '*" & StrConv(Me.ctlBusca.Text, 2, 1042) & "*'" & " ORDER BY tblreses.nombre;"
 Case 2 'Celos
    strSQl = "SELECT tblreses.idres, tblreses.nombre,tblreses.fechanace,tblreses.numero_res,tblreses.sexo,tblreses.ides,tblreses.cargada,tblreses.escotera,tblreses.idcl " & vbCrLf
    strSQl = strSQl & " FROM tblreses WHERE  ides=1 AND (idcl=2 OR idcl=3) AND cargada=1 AND  StrConv([nombre],2,1042) " & vbCrLf
    strSQl = strSQl & " Like '*" & StrConv(Me.ctlBusca.Text, 2, 1042) & "*'" & " ORDER BY tblreses.nombre;"
 Case 3 ' Partos
    strSQl = "SELECT tblreses.idres, tblreses.nombre,tblreses.fechanace,tblreses.numero_res,tblreses.sexo,tblreses.ides,tblreses.cargada,tblreses.escotera " & vbCrLf
    strSQl = strSQl & " FROM tblreses WHERE ides=1 AND cargada=2 AND  StrConv([nombre],2,1042) " & vbCrLf
    strSQl = strSQl & " Like '*" & StrConv(Me.ctlBusca.Text, 2, 1042) & "*'" & " ORDER BY tblreses.nombre;"
 Case 4 ' Destetes
    strSQl = "SELECT tblreses.idres, tblreses.nombre,tblreses.fechanace,tblreses.numero_res,tblreses.sexo,tblreses.ides,tblreses.cargada,tblreses.escotera " & vbCrLf
    strSQl = strSQl & " FROM tblreses WHERE (ides=1 AND escotera=2) AND  StrConv([nombre],2,1042) " & vbCrLf
    strSQl = strSQl & " Like '*" & StrConv(Me.ctlBusca.Text, 2, 1042) & "*'" & " ORDER BY tblreses.nombre;"
 End Select
 Me.RecordSource = strSQl
  ctlBusca.SetFocus
  ctlBusca.SelStart = Len(Me.ctlBusca.Text) + 1
 End If
End Sub

Por ejemplo si voy a buscar "COSITA PARTO 2" que tiene un espacio obtendría:

Ahora si voy a buscar las que tengan la palabra CANCIÓN o CANCION.

Obtengo:

Observe que digito las letras en minúsculas y sin acento. Siga el ejemplo y trate de adaptarlo, sino puede escríbame a [email protected] y si quiere envíeme su base de datos. Favor en el asunto anotar la pregunta.

.

Respuesta

Dices que tienes un formulario con un subformulario. Yo tengo el formulario 4que tiene un cuadro de texto Filtrar, con el subformulario Copia basado en la tabla del mismo nombre

Si escribo, por ejemplo, una o, me limita los registros del subformulario a aquellos registros en que el cliente tiene una o en su cadena de nombre

Si ahora pulso la tecla espaciadora y escribo una m

El código del evento Al cambiar del cuadro de texto Filtrar es simplemente

Private Sub Filtrar_Change()
Dim a
a = Me.Filtrar.Text
Me!Copia.Form.RecordSource = "SELECT * FROM copia WHERE cliente Like '*" & a & "*'"
Filtrar.SetFocus
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas