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]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 17/1/2012, 23:20

    Olá pessoal!
    Estou começando a aprender access agora e tenho uma dúvida:

    Estive olhando todos os tópicos em relação ao assunto e não encontrei nada parecido com o que eu preciso! a maioria dos exemplos quando ponho seleção múltipla simples, ele fica nulo!

    Tenho uma tabela e um formulário
    neste formulário tenho meus campos em caixa de listagem (uns 6 campos), cada campo em uma caixa de listagem de seleção múltipla (simples)

    Meu objetivo é apenas filtrar esses dados podendo escolher mais de uma opção e não havendo um sequencia exata da seleção

    Gente quem souber de algum exemplo ou poder me ajudar em alguma coisa ficarei grato!

    abraços!
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 18/1/2012, 00:07

    Olá

    Qual é a finalidade da filtragem?
    Se usa seleção simples, porque não usar combos?
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 18/1/2012, 01:17

    Olá! obrigado pela atenção!

    Então deixa eu explicar tenho uma tabela e tenho 6 campos (campo1,Campo2,Campo3...)

    sendo que preciso, as vezes, fazer a seleção de mais de um registro naquele mesmo campo, que irá filtrar todos os outros campos e assim sucessivamente!

    Só conheço a opção de fazer seleções múltiplas através da caixa de listagem! Escolho em propriedades -> seleção múltiplas -> simples

    entendeu? vc sabe alguma coisa sobre o assunto? ou outro tipo de alternativa?

    abraços
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 18/1/2012, 02:30

    Não havia entendido bem o tipo de seleção que vc pretendia.
    Para selecionar mais de uma opção num campo você está correto ao usar caixas de listagem.
    Se deseja aplicar filtros no próprio form para restringir a exibição dos registros conforme as seleções feitas nas caixas de listagem, pode usar o método ApplyFilter.

    Exemplo do uso:

    DoCmd.ApplyFilter , "EMail Is Not Null"
    retorna todos os registros onde o campo EMail não está vazio.

    Para retornar os vários itens selecionados numa cxListagem, precisa de uma função como esta:

    Public Function ObterSelecionados(CxList As Control, Numerico As Boolean) As String
    Dim varIndex As Variant
    Dim strSel As String
    Dim intlen As Integer
    If CxList.ItemsSelected.Count > 0 Then
    For Each varIndex In CxList.ItemsSelected
    If Numerico = True Then
    strSel = strSel & CxList.ItemData(varIndex) & ","
    Else
    strSel = strSel & "'" & CxList.ItemData(varIndex) & "',"
    End If
    Next varIndex
    intlen = Len(strSel)
    ObterSelecionados = Left(strSel, intlen - 1)
    Else
    ObterSelecionados = ""
    End If
    End Function

    Um exemplo do uso:

    DoCmd.ApplyFilter , "CampoDoForm In (" & ObterSelecionados(NomeCaixaListagem, False) & ")"

    E pode combinar (com And) as seleções feitas nas várias caixas.

    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 18/1/2012, 15:56

    Então norbs, muito obrigado pela sua atenção
    É isso mesmo que desejo saber, só preciso de mais umas informações de como aplicar, desculpe, pois estou começando a estudar access agora!

    Essa função eu vou ter escreve-lá apenas uma vez? Esse código da função tenho que fazer alguma alteração?

    e após escrever a função tenho que aplicar o código abaixo em algum evento do formulário ou das minhas caixas de listagens?

    DoCmd.ApplyFilter , "CampoDoForm In (" & ObterSelecionados(NomeCaixaListagem, False) & ")"

    abraços,
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 18/1/2012, 16:45

    outra questão é que na coluna do campo vem escrito diversas vezes, por exemplo:
    Fora
    Fora
    Fora
    Dentro
    Dentro
    Dentro

    tem como fazer na minha caixa de listagem aparecer somente sem aquelas repetições de todos os registros
    Fora
    Dentro
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 18/1/2012, 18:01

    A função fica num módulo global (um módulo que não seja de um formulário ou relatório) e pode ser chamada de qualquer outro módulo.
    Não precisa de alteração, apenas, no uso, a definição do parâmetro True/False quando se tratar de valor numérico ou texto.

    Um exemplo prático vc pode ver aqui:
    http://maximoaccess.forumeiros.com/t5526-formulario-de-criterios

    Para evitar a exibição de valores repetidos na CxListagem, vc pode alimenta-la com uma consulta que busque os valores do campo na tabela, e usar SELECT DISTINCT ao invés de SELECT nesta consulta.
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 18/1/2012, 18:07

    olá norbis, então
    acho que me equivoquei na minha pergunta e eu mesmo me enrolei!

    Estou vendo meu formulário, e eu tenho caixas de texto alimentadas pelos campos da minha tabela que exibem todos os dados da tabela, o que eu queria era ao selecionar as caixas de listagens, de seleções múltiplas simples, que equivalem a cada campo esses dados fossem filtrados

    Mil desculpas acabei lendo o que escreveu e percebi meu erro!
    quando a consulta na caixa de listagem foi essa a alternativa que eu pensei
    quanto a função permanecerá a mesma?
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 18/1/2012, 18:22

    quando a consulta na caixa de listagem foi essa a alternativa que eu pensei
    quanto a função permanecerá a mesma?

    Não entendi...
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 18/1/2012, 19:08

    Pelo que estou entendendo, você está querendo fazer filtragens através de listbox no mesmo form onde cadastra os dados.
    Se é isso, não vai funcionar.

    Acho que não examinou o exemplo que recomendei.

    Crie um novo formulário desacoplado para suas caixas de listagem. Aí pode usar o Select Distinct para evitar os duplicados.
    Coloque um botão para abrir seu form principal (de cadastro) com os dados filtrados pelas seleções que fez nas listbox's.
    A função serve pra isso: definir os critérios estabelecidos em caixa(s) de listagem para o(s) campo(s).
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 18/1/2012, 19:13

    Muito obrigado pela atenção

    Nobs, brigadão mesmo!
    Consegui resolver meus problemas logo a função funciona perfeitamente, mas tenho um probleminha!

    o formulário realmente está filtrando quando selecionado.
    Agora uma única coisa, quando eu seleciono um ou uns itens, ele aparece a filtragem aí se eu resolvo retirar seleções quando ele retira a última seleção ele dá erro em tempo de execução '3075', sabe alguma alternativa de como eu posso evitar que esse erro apareça na tela?

    quando preciono fim no erro, ele volta a funcionar normalmente!
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 18/1/2012, 19:27

    É difícil sem ter a exata noção da sua estrutura.
    A mensagem de erro deve estar exibindo a opção de depurar. Então verifique a linha do código para a qual aponta e faça a alteração necessária.
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 18/1/2012, 19:32

    ele dá erro em tempo de execução
    erro de sintaxe (operador faltando) na expresão de consulta 'Empresa in ('

    acho que acontece pq eu tiro todas as seleções
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 18/1/2012, 19:46

    Observe que deve ser passado o parâmetro True ou False para a função, dependendo se os valores da listbox são numéricos ou texto.

    Se for texto:
    CampoDoForm In (" & ObterSelecionados(NomeCaixaListagem, False)

    Se for número:
    CampoDoForm In (" & ObterSelecionados(NomeCaixaListagem, True)
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 18/1/2012, 19:51

    Então são texto mesmo!
    como na função!

    Não tem um jeito de "ocultar" esse erro, pois assim resolveria o problema!
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 18/1/2012, 20:03

    Pelo erro que vc relatou, o problema parece ser este.
    A função original não deve ser alterada. Apenas na utilização dela deve ser passado o parâmetro True para número ou False para texto.
    Se seus campos são todos texto, utilize False em todas as chamadas.

    Enfim, para omitir o erro pode usar
    Private Sub ...()
    On Error Resume Next
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 18/1/2012, 22:40

    Também é preciso tratar quando não houver nenhum item selecionado:

    If Me.NomeCaixaListagem.ItemsSelected.Count = 0 Then
    ...

    Então, resolveu?
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 19/1/2012, 18:16

    Olá Norbs!

    Não sei se estou pondo o código no lugar correto!

    Então,tentei a função abaixo, axo que precisaria por mesmo essa função, mas não estou tendo resultado

    Private Sub Lista31_AfterUpdate()
    If Me.Lista31.ItemsSelected.Count = 0 Then
    DoCmd.ApplyFilter , "NomedoCampo In (" & ObterSelecionados(Lista31, False) & ")"
    End If

    tentei aplicar o sina de maior (>) ao inves do igual, ele até tira o erro mas fica como se estivesse selecionado!

    O código está no lugar errado?


    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 19/1/2012, 19:07

    Olá

    Para aplicar o conjunto de filtragens, deve inserir um botão no formulário, e colocar o código no evento Ao Clicar deste botão.
    Depois de fazer as seleções nas listas, o clique dispara o comando ApplyFilter.
    O código deve incluir todas as situações de seleção nas diversas listas, e aí é que entra a condição
    If Nz(Me.NomeCaixaListagem.ItemsSelected.Count, 0) > 0 Then
    (se a contagem dos itens selecionados na ListBox Tal for maior que zero)
    ou
    If Not Nz(Me.NomeCaixaListagem.ItemsSelected.Count, 0) > 0 Then
    (se a contagem dos itens selecionados na ListBox Tal não for maior que zero)

    Outro detalhe: vc está aplicando filtros a determinados campos do formulário, então precisa colocar o Nome do campo no lugar dos nomes que usei como exemplo (CampoDoForm ou NomeDoCampo).
    Ou seja, coloque o Nome do seu campo no lugar do texto em vermelho
    DoCmd.ApplyFilter , "NomedoCampo In (" & ObterSelecionados(Lista31, False) & ")"

    Mas se quer aplicar a filtragem independente por campo, então coloque o código no evento Após Atualizar da ListBox.
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 19/1/2012, 19:38

    Sim eu segui as sua orientações e os nomes do campos e do form tbm foram mudados.Só alterei para por aqui
    Estou o usando o evento após atualizar nas listbox, coloquei o código abaixo e acontece a mesmo coisa que o que eu já tinha feito, o erro não acontece, mas o ultimo item selecionado, permanece como filtro, ou seja, quando tiro todas as seleções não deveria aparecer nada ou apagar da tela aquela última ação

    If Nz(Me.NomeCaixaListagem.ItemsSelected.Count, 0) > 0 Then

    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 19/1/2012, 19:55

    Parece que precisa de uma função que remova as seleções na ListBox.

    Cole lá no módulo global:

    Public Function fncSelecionarTudo(sl As Boolean, NomeList As Control)
    Dim lngLista As Long
    For lngLista = 0 To NomeList.ListCount - 1
    NomeList.Selected(lngLista) = IIf(sl = True, True, False)
    Next
    End Function

    'chamada para selecionar tudo: Call fncSelecionarTudo(True, Me!NomeListBox)
    'chamada para limpar tudo: Call fncSelecionarTudo(False, Me!NomeListBox)

    Pode inserir botões com código para limpar a seleção na ListBox:

    Private Sub NomeBotao_Click()
    On Error GoTo Trato
    Call fncSelecionarTudo(False, Me.NomeListBox)
    Exit Sub
    Trato: MsgBox Err.Description
    End Sub
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 19/1/2012, 20:13

    ótimo o seu código!
    Dá pra utilizar mesmo com o evento após atualizar!
    Concerteza vou utilizá-lo!

    Mas a minha dúvida é referente ao formulário, como estou usando o evento após atualizar, então quando eu faço um filtro então ele me retorna, mas quando eu tiro essa filtragem (não há nenhum item selecionado na caixa de listagem), então não deveria aparecer nada no meu formulário, como se fosse uma nova filtragem - se não selecionei nada, não deveria aparecer nada, isso não ocorreiria se eu tivesse usando um botão para filtragem, mas como estou usando no evento após atualizar, a última atualização, permanece na tela! Vc sabe algum jeito de driblar?

    Entendeu?
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 19/1/2012, 20:31

    Para remover a filtragem e voltar o formulário ao estado original, usa-se um comando do Access:

    DoCmd.RunCommand acCmdRemoveFilterSort

    Pode colocar no evento que melhor lhe convier.

    Ex. no caso de usar no evento Ao Clicar de um botão:

    Private Sub NomeBotaoRemoverFiltro_Click()
    On Error GoTo Trato
    DoCmd.RunCommand acCmdRemoveFilterSort
    'se quiser, pode aproveitar e limpar as ListBox's
    Call fncSelecionarTudo(False, Me!ListBox1)
    Call fncSelecionarTudo(False, Me!ListBox2)
    '...
    Trato: MsgBox Err.Description
    End Sub
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 23/1/2012, 17:48

    Olá norbs, desculpe a demora pela resposta!

    Mas muito obrigado mesmo pela atenção e paciência!
    vc me ajudou muito!!!

    Tudo certinho! Vlw mesmo!!

    Resolvido!

    abraços


    Última edição por 1108.carlos em 24/1/2012, 23:39, editado 1 vez(es)
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 23/1/2012, 17:51

    Grato pelo retorno!
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 25/1/2012, 00:01

    Olá Norbs, desculpas por estar reabrindo novamente o tópico, mas estou com uma dúvida em relação ao seu código! Encontrei um erro na minha filtragem!

    exemplo: tenho dois campos
    Campo1---------Campo2
    banana -------- amarelo
    maçã --------- vermelho
    Laranja -------- verde

    se seleciono maçã e amarelo e dou um click em filtrar, não deveria conter nenhum registro, mas aparece banana -- amarelo



    Estou usando o seguinte código:

    If Nz(Me.Lista31.ItemsSelected.Count, 0) > 0 Then
    DoCmd.ApplyFilter , "Campo1 In (" & ObterSelecionados(Lista31, False) & ")"
    End If
    If Nz(Me.Lista32.ItemsSelected.Count, 0) > 0 Then
    DoCmd.ApplyFilter , "Campo2 In (" & ObterSelecionados(Lista32, False) & ")"
    End If

    Acho que tenho que fazer alguma modificação na sintaxe do código, vc tem alguma idéia? Nas demais filtragens está tudo ok!

    Abraços,
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 25/1/2012, 00:13


    Quando quer fazer filtragem incluindo dados de mais de uma caixa de seleção, precisa concatenar os parâmetros conforme o código no exemplo sugerido.
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 25/1/2012, 00:21

    Não sei como fazer isso pois tenho que colocar essa função antes
    If Nz(Me.Lista31.ItemsSelected.Count, 0) > 0 Then

    vc poderia me explicar melhor?!
    Tenho que por um AND no final de cada instrução? mas onde?

    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 25/1/2012, 01:04

    Veja uma parte de um código para filtragens em múltiplos controles:

    Neste caso são vários tipos de campos, e não apenas ListBox, mas isso não faz diferença.
    Quando trabalhamos com seleções em vários controles, precisamos prever todas as possiblidades de combinação.

    Código:

    If Not ObterSelecionados(ListBox1, False) = "" Then
        If Not IsNull(Me.DiaInicial) And Not IsNull(Me.MesInicial) And Not IsNull(Me.DiaFinal) And Not IsNull(Me.MesFinal) Then
            DoCmd.ApplyFilter , "Me.Nascimento Is Not Null And Me.Endereco Is Not Null And Me.CEP Is Not Null And Me.Cidade Is Not Null And Me.Telefone Is Not Null And Me.ListBox1 In (" & ObterSelecionados(ListBox1, False) & ") And Me.Mes Between Me.MesInicial And Me.MesFinal And Me.Dia Between Me.DiaInicial And Me.DiaFinal"
        ElseIf IsNull(Me.DiaInicial) And Not IsNull(Me.MesInicial) And IsNull(Me.DiaFinal) And Not IsNull(Me.MesFinal) Then
            DoCmd.ApplyFilter , "Me.Nascimento Is Not Null And Me.Endereco Is Not Null And Me.CEP Is Not Null And Me.Cidade Is Not Null And Me.Telefone Is Not Null And Me.ListBox1 In (" & ObterSelecionados(ListBox1, False) & ") And Me.Mes Between Me.MesInicial And Me.MesFinal"
        Else
            DoCmd.ApplyFilter , "Me.Nascimento Is Not Null And Me.Endereco Is Not Null And Me.CEP Is Not Null And Me.Cidade Is Not Null And Me.Telefone Is Not Null And Me.ListBox1 In (" & ObterSelecionados(ListBox1, False) & ")"
        End If
    ElseIf ObterSelecionados(ListBox1, False) = "" Then
        If Not IsNull(Me.DiaInicial) And Not IsNull(Me.MesInicial) And Not IsNull(Me.DiaFinal) And Not IsNull(Me.MesFinal) Then
            DoCmd.ApplyFilter , "Me.Nascimento Is Not Null And Me.Endereco Is Not Null And Me.CEP Is Not Null And Me.Cidade Is Not Null And Me.Telefone Is Not Null And Me.Mes Between Me.MesInicial And Me.MesFinal And Me.Dia Between Me.DiaInicial And Me.DiaFinal"
        ElseIf IsNull(Me.DiaInicial) And Not IsNull(Me.MesInicial) And IsNull(Me.DiaFinal) And Not IsNull(Me.MesFinal) Then
            DoCmd.ApplyFilter , "Me.Nascimento Is Not Null And Me.Endereco Is Not Null And Me.CEP Is Not Null And Me.Cidade Is Not Null And Me.Telefone Is Not Null And Me.Mes Between Me.MesInicial And Me.MesFinal"
        Else
            DoCmd.ApplyFilter , "Me.Nascimento Is Not Null And Me.Endereco Is Not Null And Me.CEP Is Not Null And Me.Cidade Is Not Null And Me.Telefone Is Not Null"
        End If
    End If
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 25/1/2012, 01:13


    Já comentei isto lá em cima, mas lembrando: para disparar uma filtragem múltipla não dá pra usar o evento After_Update de qualquer ListBox.
    É preciso usar o evento Click de um botão.
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 25/1/2012, 17:01

    Então estou usando mesmo o botão ao clicar!

    Vi o seu código, estou tentando entender as combinações, mas não sei como associar isso as minhas listbox ao campo no form, pois no código trata-se a listbox como um campo

    o código que vc me enviou foi:
    DoCmd.ApplyFilter , "CampoDoForm In (" & ObterSelecionados(NomeCaixaListagem, False) & ")" e pediu para concatenar usando AND

    Eu terei que fazer todas aquelas instruções? tenho 7 listbox a serem filtradas, vc poderia me informar como posso iniciar essa instrução?






    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 25/1/2012, 17:37


    É mole, não!
    O código completo do procedimento de filtragem de onde peguei a parte do exemplo, tem 326 linhas.

    No método ApplyFilter tudo que colocarmos entre as aspas é parâmetro de filtragem, ou seja, são critérios.
    Então, se tivermos mais de 1 critério, o adicionamos colocando-o após um AND. É indeferente se o critério for para uma ListBox, ComboBox, GrupoOpções, TextBox, ou seja lá que tipo de campo for. Basta descrever o critério após o AND.

    DoCmd.ApplyFilter , "Me.Campo1 In (" & ObterSelecionados(Me.ListBox1, False) & ") AND Me.Campo2 In (" & ObterSelecionados(Me.ListBox2, False) & ") AND ..."

    Dá trabalho. Uma dica é iniciar os If's pela ordem dos controles no form.


    If IsNull(1) Then
    If IsNull(2) Then
    If Not IsNull (3) Then
    DoCmd.ApplyFilter , "Me.Campo3 In (" & ObterSelecionados(Me.ListBox3, False)
    End If
    Else
    DoCmd.ApplyFilter , "Me.Campo2 In (" & ObterSelecionados(Me.ListBox2, False) _
    AND Me.Campo3 In (" & ObterSelecionados(Me.ListBox3, False)"
    End If
    Else
    ...
    End If


    Última edição por norbs em 25/1/2012, 18:36, editado 1 vez(es)
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 25/1/2012, 18:01

    mas como ficam os campos do formulário?
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 25/1/2012, 18:13


    Como assim? Não entendi.

    Quando executar o procedimento, o formulário exibirá os registros filtrados pela combinação dos critérios estabelecidos.
    Os campos exibirão seus valores correspondentes.
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 25/1/2012, 18:24

    sim, mas onde ponho o critéiro campodoform no código?

    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 25/1/2012, 18:34


    Ah, tá! Foi erro de no nome dos campos... Mas dava pra deduzir...

    Alterei na mensagem anterior!
    avatar
    1108.carlos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 48
    Registrado : 02/01/2012

    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  1108.carlos 27/1/2012, 13:16

    Então quebrei a cabeça tentando resolver dessa forma, mas infelizmente não consegui, sem contar que tenho mais de 7 listbox

    será que não tem uma maneira mais fácil de fitrar por seleção múltipla?
    avatar
    Convidad
    Convidado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Convidad 27/1/2012, 13:31


    Para aplicar um filtro é preciso informar o critério.
    Quanto mais objetos envolvidos maior é a complexidade dos critérios.

    Creio que outro jeito, tem não.

    Mas 'pegando a lógica da coisa', e com paciência, vc chega lá.

    Depois é beleza ver funcionando!




    Conteúdo patrocinado


    [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples) Empty Re: [Resolvido]Filtrar em diversas caixas de listagens de multipla seleção (simples)

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 27/4/2024, 21:14