MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Função Filtrar lisbox

    Assis
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4414
    Registrado : 06/11/2009

    [Resolvido]Função Filtrar lisbox Empty Função Filtrar lisbox

    Mensagem  Assis 31/7/2013, 23:47

    Boa noite

    Nesta função da autoria do Mestre Avelino, eu queria por mais 2 filtros na parte da imagem que tem uns quadrados amarelos:

    A função filtra por
    Data =fncFiltrar([Tx0].[Nome])

    e por

    Histórico =fncFiltrar([Tx1].[Nome])

    Precisava de mais duas

    Rubrica = fncFiltrar([Tx3].[Nome])
    e
    Entidade =fncFiltrar([Tx4].[Nome])



    Dim X As String, strSplit As String
    Dim f(4) As String, cp(4) As Variant
    Dim k As Variant, p As Byte
    Dim booPos As Boolean
    '------------------------------------------------------------------
    ' Variável x recebe o valor digitado na caixa de texto de filtragem
    '-------------------------------------------------------------------
    X = Me(NomeCampoFoco).Text: p = 0
    '--------------------------------------------------------------------------------------
    'Passa para a matrix Cp() todos os valores digitados nas caixas de texto de filtragens
    '--------------------------------------------------------------------------------------
    For p = 0 To 1
    cp(p) = IIf(InStr(NomeCampoFoco, "tx" & p + 1) > 0, X, Me("tx" & p + 1))
    Next
    '----------------------------------------------------------------------------------------------------------------------------
    ' Passa para a matrix f() os campos a serem filtrados, com os respectivos valores digitados nas caixas de texto de filtragens
    '-----------------------------------------------------------------------------------------------------------------------------
    f(0) = IIf(cp(o) = Chr(32), "historico=''", "Historico Like '*" & cp(0) & "*'")
    f(1) = "Datamovimento Like '*" & cp(1) & "*'"
    '------------------------------------------------------------------------------------------
    'Passa para variável strSplit o comprimento de texto da cada caixa de texto de filtragens
    'Comprimento zero(0) significa que a caixa de texto de filtragem se encontra vazia
    'Exemplo: strSplit = 2|0|1|0
    'Significa que os campos 2 e 4 não receberam valores para serem filtrados
    '------------------------------------------------------------------------------------------
    strSplit = Len(cp(0) & "") & "|" & Len(cp(1) & "")
    k = Split(strSplit, "|")
    '----------------------------------------------------------------------------------------------
    'Filtro assume todos os valores de registros caso todos os campos de filtragens estejam limpos
    '----------------------------------------------------------------------------------------------
    filtro = "idcaixa > 0": p = 0
    '------------------------------------------------------------------------------------------
    'Monta a variável filtro com todos os campos de filtragens que possuirem valores digitados
    '------------------------------------------------------------------------------------------
    For p = 0 To UBound(k)
    If Val(k(p)) > 0 Then
        If booPos = False Then
            filtro = f(p): booPos = True
        Else
            filtro = filtro & " AND " & f(p)
        End If
    End If
    Next p
    '--------------------------------------------
    'Carrga a listbox com os registros filtrados
    '--------------------------------------------
    Call fncCarregalista(filtro)
    End Function


    .................................................................................
    *** Só sei que nada sei ***
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3711
    Registrado : 04/04/2010

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Avelino Sampaio 1/8/2013, 08:00

    Olá!

    Altere esta linha para :

    For p = 0 To 3


    Aqui vc tem que acrescentar suas condições:

    f(0) = IIf(cp(o) = Chr(32), "historico=''", "Historico Like '*" & cp(0) & "*'")
    f(1) = "Datamovimento Like '*" & cp(1) & "*'"
    f(2) = "NomeDocampo Like '*" & cp(2) & "*'"
    f(3) = "NomeDocampo Like '*" & cp(3) & "*'"


    Troque este "o" do cp(o) por zero(0), nesta linha:

    f(0) = IIf(cp(0) = Chr(32), "historico=''", "Historico Like '*" & cp(0) & "*'")

    Nota1: Lembrando que o nome dos campos de pesquisa ficam numerados. Assim: tx1,tx2,tx3,tx4

    Nota2:  Nos comentários escrevi matrix ao invés de matriz  ( tomei todas nesse dia - kkkkk )

    No aguardo


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso irrestrito ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Assis
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4414
    Registrado : 06/11/2009

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Assis 1/8/2013, 11:13

    Obrigado Avelino Sampaio

    Aa suas alterações não resultaram.

    Acabei por aplicar esta função que num campo só filtra os outros 4

    Private Sub Tx3_Change()
    Dim C As String, X As String
    X = Me.Tx3.Text
    C = " where Datamovimento like '*" & X & "*' or historico like '*" & X & "*' or Rubrica like '*" & X & "*'or entidade like '*" & X & "*'"
    Me.Lista.RowSource = " select * from qrysaldo " & C
    Me.txtC = "Foram encontrados " & Me.Lista.ListCount - 1 & " Registos."
    End Sub


    .................................................................................
    *** Só sei que nada sei ***
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3711
    Registrado : 04/04/2010

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Avelino Sampaio 1/8/2013, 12:19

    Ok

    A questão é que assim não conseguirá combinar os campos para obter o resultado. Vc optou por consultas individualizadas, por campo.

    Sucesso!



    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso irrestrito ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Assis
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4414
    Registrado : 06/11/2009

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Assis 1/8/2013, 12:45

    Certo Avelino

    Mas a sua dica não funcionou

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    Assis
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4414
    Registrado : 06/11/2009

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Assis 1/8/2013, 16:11

    Avelino
    Realmente eu não me tinha apercebido da combinação dos filtros, e esá otimo.


    Eu fiz assim e não resulta

    For p = 0 To 3
    cp(p) = IIf(InStr(NomeCampoFoco, "tx" & p + 1) > 0, X, Me("tx" & p + 1))
    Next
    '----------------------------------------------------------------------------------------------------------------------------
    ' Passa para a matrix f() os campos a serem filtrados, com os respectivos valores digitados nas caixas de texto de filtragens
    '-----------------------------------------------------------------------------------------------------------------------------
    f(0) = IIf(cp(0) = Chr(32), "historico=''", "Historico Like '*" & cp(0) & "*'")
    f(1) = "Datamovimento Like '*" & cp(1) & "*'"
    f(2) = "Rubrica Like '*" & cp(2) & "*'"
    f(3) = "Entidade Like '*" & cp(3) & "*'"

    Porque?


    .................................................................................
    *** Só sei que nada sei ***
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3711
    Registrado : 04/04/2010

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Avelino Sampaio 1/8/2013, 17:14

    Apresenta erro ou simplesmente não filtra ?

    use uma caixa de mensagem na seguinte posição e obverse como está sendo montado o filtro a medida que digita

    '--------------------------------------------
    'Carrga a listbox com os registros filtrados
    '--------------------------------------------
    msgbox filtro
    Call fncCarregalista(filtro)


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso irrestrito ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Assis
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4414
    Registrado : 06/11/2009

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Assis 1/8/2013, 17:16

    Simplesmente não filtra


    .................................................................................
    *** Só sei que nada sei ***
    Assis
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4414
    Registrado : 06/11/2009

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Assis 1/8/2013, 17:55

    Avelino


    Com a msgbox filtro

    dá uma mensagem .... idcaixa > 0

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    Assis
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4414
    Registrado : 06/11/2009

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Assis 1/8/2013, 22:24

    Avelino Consegui

    Estava assim
    'strSplit = Len(cp(0) & "") & "|" & Len(cp(1) & "")

    Passou para
    strSplit = Len(cp(0) & "") & "|" & Len(cp(1) & "") & "|" & Len(cp(2) & "") & "|" & Len(cp(3) & "")


    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3711
    Registrado : 04/04/2010

    [Resolvido]Função Filtrar lisbox Empty Re: [Resolvido]Função Filtrar lisbox

    Mensagem  Avelino Sampaio 2/8/2013, 00:37

    Opa! Que bom !

    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso irrestrito ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.

      Data/hora atual: 12/4/2021, 23:19