Filtrar registros por dos o más datos

Quiero filtrar en un formulario dando varios datos para encontrar al cliente que busco dependiendo del dato o los únicos datos que tenga.
Como ejemplo:
Los que se llamen Angel, con nombre de empresa ABC y con fecha del 19-01-10
Pero en mi formulario se desplieguen los resultados en una hoja de datos.
Tengo ya algo pero funciona solo tomando en cuenta un dato a la vez.
Private Sub txtFiltro_AfterUpdate()
Me.Filter = "folio like  '*" & Me.txtFiltro & "*'"
Me.FilterOn = True
End Sub
¿Cómo le hago para que me tome en cuenta todos los datos dados a la vez?
1

1 respuesta

Respuesta
1
En el filtro tendrás que ponerle varias condiciones a la vez.
Lo primero que debes tener en cuenta es 'cómo' quieres unir esas condiciones: que se cumpla una condición Y otra, o bien que se cumpla una condición O otra (operadores and y or respectivamente).
Si quieres que filtre por folio Y empresa Y fecha tendrás que poner algo así:
Me.Filter = "folio like  '*" & Me.txtFiltro & "*'  AND empresa like '*" & me.txtEmpresa & "*' AND fecha=dateserial(" & format$(me.fecha,"yyyy,mm,dd") & ")"
OJO: La fecha no está puesta en formato like porque no lo admitiría sino que está puesto para una fecha concreta.
Lo que sí podrías poner es una fecha en formato americano en texto (formato AAAAMMDD), en cuyo caso pondrías:
..... AND format$(fecha,'yyyymmdd') like '*" & me.txtFechaFormatoAAAAMMDD & "*'"
Muchas gracias por atenderme, ahora tengo otras dudas porque no te dije que tengo diez datos posibles de los cuales el usuario pondrá solo los datos que tenga para encontrar al cliente que busca utilicé tu sugerencia pero no me funciona con tantos o tal vez no lo estoy utilizando correctamente, mira tengo diez cuadros de texto independientes en donde en el evento después de actualizar esta el filtro.
Abajo de cada cuadro de texto va la columna correspondiente al campo como esta en la tabla, y lo despliego como hoja de texto en mi formulario.
¿Tal vez deba utilizar otra forma de filtro?
Te agradezco tu ayuda.
Que Dios te Bendiga.
Habría que ver el tipo de datos de cada campo que vas a filtrar. Si son texto, numero, fecha, Si/No... etc.
Dime la lista de campos y el tipo de cada uno
Solo tengo 3 campos numéricos :Folio, Factura Taller, Factura Refacción
Y 7 tipo texto.:Ajustador, Compañía, Marca, Linea, Siniestro, Placas Póliza
El campo de fecha lo eliminé.
Espero que me puedas ayudar,
Que Dios te Bendiga.
No te tengo en el olvido, lo que pasa es que llevo unos días demasiado complicados y no tengo tiempo de atenderos.
Muchas Gracias !
Yo espero .
Que Dios Te bendiga!
Lo primero es pedirte disculpas por tanto retraso. Llevo un par de semanas malísimas y no tengo tiempo de nada.
Supongamos que el campo para filtrar el folio se llama 'txtFolio', el de filtrar la empresa es 'txtEmpresa', el de filtrar la fecha es 'txtFecha' (la fecha con formato dd-mm-aaaa) y el de filtrar un número es 'txtNumero'.
En el evento 'al cambiar' de cada uno de ello pondrás:
    ActualizarFiltroFormulario
Y al final del formulario añades este procedimiento (tendrás que añadir los campos que quieras):
sub actualizarFiltroFormulario()
    Dim miFiltro as string
    miFiltro = ""
    if me.txtFolio<>"" then ' Añadimos un filtro por el folio
        if miFiltro<>"" then miFiltro = miFiltro & " and "
        miFiltro = miFiltro & "folio like '*" & me.txtFolio & "*'"
    end if
    if me.txtEmpresa<>"" then ' Añadimos el filtro por la empresa
        if miFiltro<>"" then miFiltro = miFiltro & " and "
        miFiltro = miFiltro & "empresa like '*" & me.txtEmpresa & "*'"
    end if
    if me.txtFecha<>"" then ' Añadimos el filtro por la fecha
        if miFiltro<>"" then miFiltro = miFiltro & " and "
        miFiltro = miFiltro & "format$(fecha,"dd-mm-yyyy") like '*" & me.txtFecha & "*'"
    end if
    if me.txtImporte<>"" then ' Añadimos el filtro por el importe
        if miFiltro<>"" then miFiltro = miFiltro & " and "
        miFiltro = miFiltro & "format$(importe) like '*" & me.txtImporte & "*'"
    end if
End Sub
El campo importe también lo podrías filtrar usando el carácter coma como separador de decimales, en cuyo caso la línea sería esta:
        miFiltro = miFiltro & "str$(importe) like '*" & me.txtImporte & "*'"
O también podrías poner que sea el importe exacto del campo 'txtImporte' poniendo:
        miFiltro = miFiltro & "importe =" & me.txtImporte
Oye, muchas gracias por tu tiempo, sabes me marca un error de compilación,
¿Tengo duda en el procedimiento en donde lo debo poner?
Gracias y que Dios te Bendiga.
Una cosilla que se me pasó: delante del "End sub" tienes que poner:
    If miFiltro <> "" Then
        Me.Filter = miFiltro
        Me.FilterOn = True
      Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
Ese código lo tienes que poner en el editor del Visual Basic. Desde el diseño del formulario tienes que pulsar <Alt><F11> y grabar ese "Sub... End Sub" al final del todo.
Después, en la propiedad 'al cambiar' de cada uno de los campos usados en el filtro, pones 'procedimiento de evento' y pulsas en el botón de los tres puntitos (...). Eso te lleva también al editor de Visual Basic y le pones que llame al procedimiento anterior. Por ejemplo:
    Private Sub txtFolio_Change()
        actualizaFiltro
    End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas