MaximoAccess

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

Obrigado

Administração do MaximoAccess

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


    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  alantaru em 5/12/2018, 12:35

    Bom dia a todos. Preciso da ajuda de vocês!
    Estou criando um formulário que contém uma tabela. Este formulário utiliza várias Caixas de Combinação para filtrar a tabela.
    Com essa tabela já filtrada, o usuário poderá gerar um relatório com ela, usando somente os dados filtrados.

    Eu possuo aqui um exemplo que utiliza duas Caixas de Combinação (sendo que estas devem ser usadas em ordem para que a tabela seja filtrada corretamente).

    Porém meu formulário utiliza 11 Caixas de Combinação, ou seja, 11 filtros! E o usuário não necessariamente irá filtrá-los em uma ordem específica. Eu gostaria de saber se é possível permitir a filtragem em qualquer ordem.

    E, além disso, eu preciso que, à medida em que o usuário vá filtrando determinadas Caixas de Combinação, as caixas restantes sejam atualizadas com apenas dados filtrados anteriormente.


    Segue o link do exemplo que eu consegui:
    mabesi.com/downloads/categorias-arquivos/summary/10-access/61-filtros-em-cascata.html

    [Não são permitidos links externos, colocar desta forma, para baixar copiar link e colar no navegador]

    Aproveitando, tenho outra dúvida também envolvendo este mesmo formulário:
    Além dessa tabela de onde serão extraídos os dados, eu possuo uma segunda tabela onde quero gravar somente os registros filtrados, cada vez que eles forem filtrados.
    É possível, ao clicar no botão de gerar relatório, que o Access grave linha por linha todos os dados filtrados como se fossem novos registros nessa segunda tabela? Como poderia ser feito automaticamente?


    Desde já agradeço, e me coloco à disposição para esclarecimentos.


    Última edição por alantaru em 7/12/2018, 09:31, editado 1 vez(es)
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 5/12/2018, 14:50

    Há diversos exemplos no repositório de exemplo sobre filtros em cascasta. Compensa dar uma olhada.

    Se não encontrar nada sobre filtrar em cascata independente da ordem, então anexe aqui seu formulário e as tabelas que alimentam as combos para maior eficácia na ajuda.
    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  alantaru em 5/12/2018, 15:16

    Boa tarde.
    Estou anexando aqui meu projeto.
    O formulário em questão é o frmRota. É ele quem filtra através das Caixas de Combinação e gera o relatório dos campos filtrados.

    alantaru.000webhostapp.com/BANCO_DE_DADOS/Filtro_em_cascata_Multiplo.zip

    [Não são permitidos links externos, colocar desta forma, para baixar copiar link e colar no navegador]
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 5/12/2018, 15:57

    Só encontrei planilhas em excel. E o arquivo access contendo o formulário?
    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  alantaru em 5/12/2018, 16:21

    Ops, mil perdões.
    Já corrigi o arquivo. Poderia baixar novamente?
    Obrigado!
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 5/12/2018, 17:42

    Arquivo em anexo. Confira e estude o que foi feito.

    Obs.: A padronização no nome dos controles ajudou muito.

    Códigos utilizados
    Evento ao receber foco das combos
    Código:
    Me.ActiveControl.RowSource = fncMontaRowSource(Me.ActiveControl.Name)

    Função fncMontaRowSource
    Código:
    Private Function fncMontaRowSource(strComboNome As String) As String

        Dim ctl As Control
        Dim strFiltro As String
        
        For Each ctl In Me.Controls
            If ctl.ControlType = acComboBox Then
                If ctl.Name <> strComboNome And Not IsNull(ctl.Value) Then
                    Select Case ctl.Name
                        Case "cboEmpresa", "cboPlantaInstalada", "cboDeptoAlmox", "cboRua", "cboStatus", "cboModelo", "cboPorcentagemToner2", "cboHorario"
                            strFiltro = strFiltro & fncNomeCampoTab(ctl.Name) & " = '" & ctl.Value & "' And "
                        Case "cboContrato", "cboProtocolo"
                            strFiltro = strFiltro & fncNomeCampoTab(ctl.Name) & " = " & ctl.Value & " And "
                        Case "cboDataEntrega"
                            strFiltro = strFiltro & fncNomeCampoTab(ctl.Name) & " = #" & Format(ctl.Value, "mm/dd/yyyy") & "# And "
                    End Select
                End If
            End If
        Next ctl
        
        If strFiltro <> "" Then strFiltro = "where " & Left(strFiltro, Len(strFiltro) - 4)
        
        fncMontaRowSource = "select distinct " & fncNomeCampoTab(strComboNome) & " from tabRota " & strFiltro & "order by " & fncNomeCampoTab(strComboNome) & ";"

    End Function

    Função fncNomeCampoTab
    Código:
    Private Function fncNomeCampoTab(strCombo) As String

        If strCombo = "cboPorcentagemToner2" Then
            fncNomeCampoTab = "VidaUtilToner"
        Else
            fncNomeCampoTab = Mid(strCombo, 4)
        End If

    End Function
    Anexos
    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação AttachmentFiltro_em_cascata_Multiplo.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (381 Kb) Baixado 57 vez(es)
    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  alantaru em 5/12/2018, 23:04

    Amigo, funcionou perfeitamente!
    Muito obrigado pela ajuda! Very Happy

    Sobre minha segunda dúvida envolvendo este formulário,
    É possível, ao clicar no botão de Gerar Rota, que o Access grave linha por linha todos os dados filtrados como se fossem novos registros na tabela tabEntregas?
    (Espero não estar pedindo demais para um único tópico. caso seja necessário, dividirei em um segundo tópico, porém, como se trata do mesmo formulário, acho que talvez não tenha problemas.)
    Assis
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

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

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  Assis em 6/12/2018, 00:16

    Ivan

    Utilizei o seu ótimo exemplo, se conseguir só queria uma alteração.

    Como mostro na imagem, quando selecionar "Cama" mostrar só mesmo o tipo "Cama" e não o tipo "Jogo de cama".

    Segue o meu exemplo

    Obrigado e

    Parabéns pelo filtro

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Sem_ty70
    Anexos
    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação AttachmentFiltro_em_cascata.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (393 Kb) Baixado 30 vez(es)


    .................................................................................
    *** Só sei que nada sei ***
    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  alantaru em 6/12/2018, 00:46

    Sim também tenho essa dúvida!
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 6/12/2018, 00:56

    Observe que no procedimento FiltraSubform é usado o operador like junto com asteriscos, isto é, filtra campos que contenham um determinado texto
    Código:
    If Nz(Me.cboTipo, "") <> "" Then
        strWhere = strWhere & "[Tipo] LIKE '*" & Me.cboTipo & "*' AND "
    End If

    Para sanar isto, basta usar o operador igual  para buscar valores exatos (troque like por = e remova os asteriscos existentes), exemplo resolvendo o caso acima:
    Código:
    If Nz(Me.cboTipo, "") <> "" Then
       strWhere = strWhere & "[Tipo] = '" & Me.cboTipo & "' AND "
    End If

    Obs.: Sou o responsável só pela lista nas combos, mas mesmo assim obrigado.
    Assis
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

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

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  Assis em 6/12/2018, 11:06

    Bom dia

    Perfeito Ivan

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 6/12/2018, 11:52

    Obrigado pelo retorno. O fórum agradece. Sucesso a vocês.
    avatar
    ORLANDOCBM
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 01/08/2019

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Dúvida

    Mensagem  ORLANDOCBM em 13/10/2019, 18:14

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Aaaaa10


    Ivan,

    Vc é muito desenrolado mesmo!!!

    Me tira uma dúvida: o exemplo que foi postado por nosso colega é quase idêntico ao meu. A diferença é que os meus registros que são mostrados na parte de baixo do FORMULÁRIO PRINCIPAL ("GERALFILTRO") estão configurados assim:

    Criei um SUBFORMULÁRIO ("SUBGFLISTA") no meu FORMULÁRIO "GERALFILTRO", e o objeto de origem desse subformulário é outro formulário denominado "GF_LISTA".

    Portanto, gostaria de saber como os códigos que vc descreveu deveriam ficar para o meu formulário.

    Ressalto que configurei desta forma: formrprincipal-----subform----formgf_lista para poder ter a condição de visualizar todas as colunas do subformulario (barras de rolagem vertical e horizontal) sem que essas barras fiquem no formprincipal, pois aí as combos para filtros não ficariam todas dispostas na tela (eu teria que ficar a todo tempo usando a barra de rolagem horizontal ao tentar realizar filtros e percorrer pelas colunas mais à direita da "lista".

    Segue imagem em anexo.

    Agradeço demais a atenção que vc puder dar.
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 15/10/2019, 01:31

    Orlando, boa noite...

    A ajuda prestada no tópico só foi eficaz e elegante graças ao acesso ao arquivo disponibilizado. Sem o anexo do seu projeto não conseguirei ajudá-lo. Entendo que esteja protegendo informações, mas sem acesso ao projeto é muito complicado ajudar.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    ORLANDOCBM
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 01/08/2019

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Tranquilo! Segue arquivo em anexo

    Mensagem  ORLANDOCBM em 15/10/2019, 01:52

    O problema está no formulário GERALFILTRO.

    Muito obrigado pela atenção!
    Anexos
    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação AttachmentSISTEMA DE IDENTIFICAÇÃO MILITAR 1.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1.9 Mb) Baixado 18 vez(es)
    avatar
    ORLANDOCBM
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 01/08/2019

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Ressalva

    Mensagem  ORLANDOCBM em 15/10/2019, 02:02

    Ivan,

    O campo "idade" no subformulário é um campo calculado, logo, nem sei se tem como aplicar filtro nele, ou se será necessário criar essa coluna (idade) na tabela, para poder receber os valores e assim poder filtrar;

    A maioria das combobox estão sem a lista das opções, mas não se preocupe com isso, basta vc me dar uma luz dos códigos usados nos filtros.
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 17/10/2019, 04:25

    No formulario GF_LISTA use como fonte de registro a string abaixo
    Código:
    SELECT TAB_CADMIL.*, CalculaIdade([DATA NASC]) AS Idade FROM TAB_CADMIL;

    No formulário GERALFILTRO, crie a função
    Código:
    Private Sub fncFiltroFiltre()

        Dim ctl As Control
        Dim strFiltro As String
        
        For Each ctl In Me.Controls
            If ctl.ControlType = acComboBox Then
                If Not IsNull(ctl.Value) Then
                    Select Case ctl.Name
                    
                        'campos tipo texto entre aspas
                        'campos tipo data entre cerquilhas
                    
                        Case "cbosituação"
                            strFiltro = strFiltro & "[SITUAÇÃO] = """ & Me!CBOSITUAÇÃO & """ And "
                            
                        Case "cboidade"
                            strFiltro = strFiltro & "[Idade] = " & Me!cboidade & " And "
                            
                        '...
                        '...
                        '...
                            
                        Case "cbopatente"
                            strFiltro = strFiltro & "[PATENTE] = """ & Me!cbopatente & """ And "
                            
                    End Select
                End If
            End If
        Next ctl
        
        Me!SUBGFLISTA.Form.Filter = ""
        Me!SUBGFLISTA.Form.FilterOn = False
        
        If strFiltro <> "" Then
            strFiltro = Left(strFiltro, Len(strFiltro) - 5)
            Me!SUBGFLISTA.Form.Filter = strFiltro
            Me!SUBGFLISTA.Form.FilterOn = True
        End If

    End Sub

    No evento após atualizar das combobox faça a chamada da função
    Código:
    Call fncFiltroFiltre

    Ao clicar nos botões "Limpar" garanta que o código limpe a combobox relacionada e também garanta uma linha para a chamada da função novamente
    Código:
    Me.COMBOTALTALTAL.SetFocus
    COMBOTALTALTAL.Text = Empty
    Call fncFiltroFiltre

    Aconselho que no campo TXTREGISTROS use como fonte de controle a string abaixo
    Código:
    =SeImed(IsError([SUBGFLISTA]![TXTREGISTROS]);0;[SUBGFLISTA]![TXTREGISTROS])

    Bons estudos...


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    ORLANDOCBM
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 01/08/2019

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Agradecimento

    Mensagem  ORLANDOCBM em 19/10/2019, 17:01

    Ivan,

    Inicialmente muitíssimo obrigado! Sua dica caiu como uma luva na mão!!! Agora o sistema está funcionando como eu queria.

    Me tira uma dúvida: o SUBFORMULÁRIO (SUBGFLISTA) é programado para ordenar os registros pelo CÓD_PATENTE do militar, assim, a sequência fica dessa forma:

    CEL
    TCEL
    MAJ
    CAP
    .
    .
    .

    No entanto, como temos a opção tb de classificar, por exemplo, o NOME COMPLETO, de A a Z (através do clicar c/ direito em cima da coluna NOME COMPLETO), ocorre que o SUBGFLISTA perde a ordem pela patente, sem contar que não há opção no clicar c/ direito de remover a classificação, no caso feita pelo NOME COMPLETO.

    Como existe um botão (REMOVER FILTRO) do FORMULÁRIO PRINCIPAL (GERALFILTRO), estou pensando em incluir também o código para ordenar novamente o SUBGFLISTA pelo CÓD_PATENTE, ou então remover todas as classificações e ordenar pelo CÓD_PATENTE, mas já quebrei a cabeça aqui e não sei como seria esse código.

    Forte abraço meu amigo! Demorei a responder pq passei todos esses dias a trabalhar na ocorrência de desabamento, de grande repercussão aqui em Fortaleza.
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 20/10/2019, 02:24

    Código:
    FormPrincipal.ControleSubForm.Form.OrderBy = "CampoFulano ASC, CampoSicrano DESC, CampoBeltrano ASC"
    FormPrincipal.ControleSubForm.Form.OrderByOn = True


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    ORLANDOCBM
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 01/08/2019

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Agradecimento

    Mensagem  ORLANDOCBM em 21/10/2019, 00:37

    Ivan,

    Amigo. Muito obrigado!!! Deu certo!

    Os códigos ficaram assim:

    Me!SUBGFLISTA.Form.OrderBy = "[CÓD PAT] ASC, [NOME COMPLETO] ASC"
    Me!SUBGFLISTA.Form.OrderByOn = True
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 21/10/2019, 00:45

    O fórum agradece o retorno. Sucesso.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    ORLANDOCBM
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 01/08/2019

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Dúvida

    Mensagem  ORLANDOCBM em 6/11/2019, 22:44

    Ivan,

    Ainda sobre este mesmo assunto aqui discutido, se vc puder me ajudar nessas pendências, te agradeço muito:

    1) Pensei em implementar uma forma de filtrar a IDADE, ALTURA e PESO não apenas com os valores IGUAIS aos escolhidos nas suas respectivas COMBOBOX, mas de criar combobox vizinhas a estas, onde me dê a opção de eu escolher: É IGUAL A, É DIFERENTE DE, É MAIOR QUE, É MENOR QUE. Logo, como ficaria implementada esta mudança no CÓDIGO QUE VC ME INFORMOU NA FUNÇÃO "fncFiltroFiltre"?

    2) Criei uma txtbox nomeada de TXTPESQUISA, com o objetivo de localizar um militar, onde seria feito o filtro tanto pelo NOME COMPLETO, qto pela MATRÍCULA ou ainda pelo CPF. Para isto, mudei a FONTE DE REGISTRO do formulário GERAL FILTRO, definindo esta consulta como fonte:

    SELECT TAB_CADMIL.*, [Nº DO RE-CBM] & ' ' & [NOME COMPLETO] & ' ' & [CPF] AS Expr1 FROM TAB_CADMIL;

    Logo, nesta consulta, como vc vê, foi criado o campo Expr1: [Nº DO RE-CBM] & ' ' & [NOME COMPLETO] & ' ' & [CPF]

    Da mesma forma das COMBOBOX, queria que esta TXTBOX tb estivesse inserida na FUNÇÃO "fncFiltroFiltre", para isto, fiz os seguintes ajustes no código:

    Private Sub fncFiltroFiltre()

    Dim ctl As Control
    Dim strFiltro As String

    For Each ctl In Me.Controls
    If ctl.ControlType = acComboBox Or ctl.ControlType = acTextBox Then
    If Not IsNull(ctl.Value) Then
    Select Case ctl.Name

    'campos tipo texto entre aspas
    'campos tipo data entre cerquilhas (#)

    Case "cbosituação"
    strFiltro = strFiltro & "[SITUAÇÃO] = """ & Me!CBOSITUAÇÃO & """ And "

    Case "cboidade"
    strFiltro = strFiltro & "[Idade] = """ & Me!cboidade & """ And "

    .
    .
    .

    Case "TXTPESQUISA"
    strFiltro = strFiltro & "[Expr1] = """ & Me!TXTPESQUISA & """ And """


    End Select
    End If
    End If
    Next ctl

    Me!SUBGFLISTA.Form.filter = ""
    Me!SUBGFLISTA.Form.FilterOn = False

    If strFiltro <> "" Then
    strFiltro = Left(strFiltro, Len(strFiltro) - 5)
    Me!SUBGFLISTA.Form.filter = strFiltro
    Me!SUBGFLISTA.Form.FilterOn = True
    End If

    End Sub



    Não obtive êxito pq na prática o código teria que "DIZER" isto:

    Case "TXTPESQUISA"
    'strFiltro = strFiltro & "[Expr1] DEVE CONTER """ & Me!TXTPESQUISA & """ And """

    Ou então:

    Case "TXTPESQUISA"
    'strFiltro = strFiltro & "[NOME COMPLETO] Or [Nº DO RE-CBM] Or [CPF] = """ & Me!TXTPESQUISA & """ And """


    Mas não sei como fazer isto funcionar em VBA.

    Ahhh. E diferente das COMBOX, esta TXTPESQUISA deve ir filtrando à medida que for sendo digitado, e não APÓS ATUALIZAR.

    Pode me dar uma força?


    Só uma dica:

    tentei usar o mesmo esquema que usei no FORMULÁRIO "PESQUISA DE MILITAR", só que a digitação na TXTPESQUISA fica embaralhando as letras e umas se sobrepondo às outras qdo digitamos um pouco mais rápido. Usei o artifício no critério da consulta de inserir o "[Text]" no final do critério, mas mesmo assim não ajudou: Como "*" & [Forms]![GERALFILTRO].[TXTPESQUISA].[Text] & "*"

    Portanto, queria ver se tinha como fazer este filtro via VBA, dentro da função "fncFiltroFiltre"

    Me avisa, se precisar postar o arquivo de novo!

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Exempl10





    avatar
    ORLANDOCBM
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 01/08/2019

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Complemento

    Mensagem  ORLANDOCBM em 7/11/2019, 15:02

    Ivan,

    Consegui implementar o código fora da função "fncFiltroFiltre"

    Private Sub cboidade_AfterUpdate()

    Dim parteNome As String
    Dim tipoFiltro As String

    parteNome = cboidade.Text
    tipoFiltro = cboSELidade

    If parteNome <> "" Then
        Select Case tipoFiltro
           Case "É diferente de"
               Me.SUBGFLISTA.Form.filter = "IDADE Not Like '*" & parteNome & "*'"
               Me.SUBGFLISTA.Form.FilterOn = True

    '...
    '...

        End Select
    Else
        Me.SUBGFLISTA.Form.FilterOn = False
       
    End If
    End Sub



    Porém este filtro não funciona bem em conjunto com a função "fncFiltroFiltre"

    E tb não sei como escrever o código para  "É maior que" e "É menor que"
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 7/11/2019, 21:59

    Igual
    Código:
    CampoFulano = CampoSicrano
    ou
    Código:
    CampoFulano Like CampoSicrano

    Diferente
    Código:
    CampoFulano <> CampoSicrano
    ou
    Código:
    CampoFulano Not Like CampoSicrano

    É maior que
    Código:
    CampoFulano > CampoSicrano

    É maior igual que
    Código:
    CampoFulano >= CampoSicrano

    É menor que
    Código:
    CampoFulano < CampoSicrano

    É menor igual que
    Código:
    CampoFulano <= CampoSicrano

    As sintaxes são essas.

    -------------------------------------------------------------------------------

    Na função fncFiltroFiltre

    Código:
    Private Sub fncFiltroFiltre()

        Dim ctl As Control
        Dim strFiltro As String
        Dim strOperador As String
       
        For Each ctl In Me.Controls
            If ctl.ControlType = acComboBox Then
                If Not IsNull(ctl.Value) Then
                    Select Case ctl.Name
                   
                        'campos tipo texto entre aspas
                        'campos tipo data entre cerquilhas
                   
                        Case "cbosituação"
                            strFiltro = strFiltro & "[SITUAÇÃO] = """ & Me!CBOSITUAÇÃO & """ And "
                           
                        Case "cboidade"

                            Select Case CampoReferenciaOperaçõesParaIdade
                                Case "", "É igual a": strOperador = "=" 'poderia ser "Like"
                                Case "É diferente de": strOperador = "<>" 'poderia ser "Not Like"
                                Case "É maior que": strOperador = ">"
                                Case "É maior igual que": strOperador = ">="
                                Case "É menor que": strOperador = "<"
                                Case "É menor igual que": strOperador = "<="
                            End Select

                            strFiltro = strFiltro & "[Idade] " & strOperador & " " & Me!cboidade & " And "
                           
                        '...
                        '...
                        '...
                           
                        Case "cbopatente"
                            strFiltro = strFiltro & "[PATENTE] = """ & Me!cbopatente & """ And "
                           
                    End Select
                End If
            End If
        Next ctl
       
        Me!SUBGFLISTA.Form.Filter = ""
        Me!SUBGFLISTA.Form.FilterOn = False
       
        If strFiltro <> "" Then
            strFiltro = Left(strFiltro, Len(strFiltro) - 5)
            Me!SUBGFLISTA.Form.Filter = strFiltro
            Me!SUBGFLISTA.Form.FilterOn = True
        End If

    End Sub

    Não tem segredo.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    ORLANDOCBM
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 01/08/2019

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Retorno

    Mensagem  ORLANDOCBM em 9/11/2019, 19:21

    Prezado Ivan,

    Sua dica foi fantástica. Era isso mesmo que eu estava precisando. Mas me tira umas dúvidas:

    1a DÚVIDA:

    Vou citar como exemplo as combobox relativas ao filtro do PESO. O código ficou assim:

    Case "cbopeso"
                       Select Case cboSELpeso
                                Case "É diferente de": strOperador = "<>" 'poderia ser "Not Like"
                                Case "", "É igual a": strOperador = "=" 'poderia ser "Like"
                                Case "É maior que": strOperador = ">"
                                Case "É menor que": strOperador = "<"
                             End Select
                                strFiltro = strFiltro & "[PESO] " & strOperador & " " & Me!cbopeso & " And "


    Nesta linha:

    Case "", "É igual a": strOperador = "=" 'poderia ser "Like"  

    eu entendo que se a combobox "cboSELpeso" estiver vazia, o strOperador tb será "="

    Não é isso?

    Porém qdo escolho apenas o peso, deixando portanto a "cboSELpeso" vazia, dá mensagem de erro dizendo que o operador está faltando ('[PESO] 45'), ou seja, não está entrando o "="



    2a DÚVIDA:

    Gostaria de poder filtrar tb os registros que contém, por exemplo, o PESO EM BRANCO. O filtro ficaria assim:

    É igual a  ----------- Em branco             ou    É igual a ---------------- Vazio

    Até agora não encontrei uma maneira de poder filtrar (PESO, IDADE OU ALTURA) POR VALORES EM BRANCO (A idéia por trás disso é poder relacionar todos os campos que tenham, por exemplo, o PESO faltando (EM BRANCO) e poder editar, incluindo todos os valores, pois imagina a gente ter que ir passando todos os 1.809 registros para ir incluindo o PESO de quem não tem ainda... ficaria muito trabalhoso).



    3a DÚVIDA:

    Na txtbox que tem na parte superior do formulário em questão, onde a gente pode pesquisar o militar pelo nome, matrícula ou CPF. Queria que essa TXTBOX tb tivesse inserida na função de filtro que vc implementou.

    Sobre isto, sei que, diferentemente das txtbox, o evento deverá ocorrer AO ALTERAR, ao invés de APÓS ATUALIZAR.

    Creio que a função filtro, nesta parte, deva ser algo que traduza esta intenção:

    Case "TXTPESQUISA"
                           strFiltro = strFiltro & "[NOME COMPLETO] Or [Nº DO RE-CBM] Or [CPF] = """ & Me!TXTPESQUISA & """ And "

    Ou então:

                          strFiltro = strFiltro & "[Expr1] DEVE CONTER """ & Me!TXTPESQUISA & """ And "

    Expr1 na consulta é a concatenação do [NOME COMPLETO] com [Nº DO RE-CBM], que é matrícula do militar, com o [CPF]


    Mas não faço ideia de como escrever essa parte do código.

    Vou te mandar o BD NOVAMENTE.
    Anexos
    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação AttachmentSISTEMA DE IDENTIFICAÇÃO MILITAR2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1.5 Mb) Baixado 4 vez(es)
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 10/11/2019, 00:48

    Função fncFiltroFiltre

    Código:
    Dim ctl As Control
        Dim strFiltro As String
        Dim strOperador As String
         
        For Each ctl In Me.Controls
       
            If ctl.Name = "TXTPESQUISA" Then
                strFiltro = strFiltro & "([NOME COMPLETO] like ""*" & Nz(Me!TXTPESQUISA.Text, "") & "*"" or "
                strFiltro = strFiltro & "[Nº DO RE-CBM] like ""*" & Nz(Me!TXTPESQUISA.Text, "") & "*"" or "
                strFiltro = strFiltro & "[CPF] like ""*" & Nz(Me!TXTPESQUISA.Text, "") & "*"") And "
       
            ElseIf ctl.ControlType = acComboBox Then
                If Not IsNull(ctl.Value) Then
                    Select Case ctl.Name
                   
                        'campos tipo texto entre aspas
                        'campos tipo data entre cerquilhas (#)
                   
                        ...
                           
                        Case "cboidade"
                        Select Case Nz(cboSELidade, "")
                                Case "É diferente de": strOperador = "<>" 'poderia ser "Not Like"
                                Case "", "É igual a": strOperador = "=" 'poderia ser "Like"
                                Case "É maior que": strOperador = ">"
                                'Case "É maior ou igual a": strOperador = ">="
                                Case "É menor que": strOperador = "<"
                                'Case "É menor ou igual a": strOperador = "<="
                              End Select
                                strFiltro = strFiltro & "[Idade] " & strOperador & " """ & Me!cboidade & """ And "

                        ...
                                                                                 
                    End Select
                End If
            End If
        Next ctl
       
        Me!SUBGFLISTA.Form.filter = ""
        Me!SUBGFLISTA.Form.FilterOn = False
       
        If strFiltro <> "" Then
            strFiltro = Left(strFiltro, Len(strFiltro) - 5)
            Me!SUBGFLISTA.Form.filter = strFiltro
            Me!SUBGFLISTA.Form.FilterOn = True
        End If

    Evento Ao alterar do TXTPESQUISA

    Código:
    Call fncFiltroFiltre
    Me!SUBGFLISTA.Requery

    Isso resolve a primeira e a terceira dúvida.

    Para a segunda, abra um novo tópico e deixemos que outro colega também ajude.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    ORLANDOCBM
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 37
    Registrado : 01/08/2019

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Retorno

    Mensagem  ORLANDOCBM em 16/11/2019, 19:03

    Tranquilo Ivan. Muito obrigado!

    Fiz as modificações sugeridas, no entanto estão ocorrendo esses 2 problemas:


    1) O filtro na TXTBOX está OK, mas quando digito, por exemplo, o nome de um militar, ou matrícula, ou CPF inexistente no SUBFORMULÁRIO, os objetos mostrados pelas SETAS AMARELAS na FIGURA ABAIXO (que são programados para ficar na cor rosa em caso do filtro estar ATIVO) não ficam. Até ficam, mas só enquanto se vai digitando e o filtro vai ocorrendo e encontrando resultados existentes, depois que o termo digitado passa a não existir no SUBFORMULÁRIO, aí os objetos mostrados pelas SETAS AMARELAS voltam a ficar na cor branca (indicando que o FILTRO está inativo).

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação 16-11-12


    Veja que neste caso abaixo numa versão anterior do meu sistema, qdo mando filtrar uma combinação de SITUAÇÃO + SUBSITUAÇÃO em que não há resultados no SUBFORMULÁRIO, os objetos mostrados pelas SETAS AMARELAS permanecem na COR ROSA, passando a ideia de que o FILTRO ESTÁ ATIVO e o resultado da filtragem foi "zero". Pois bem, o mesmo deveria ocorrer no filtro da TXTBOX.

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação 16-11-13





    2) Após as alterações sugeridas por último, passei a não conseguir usar os filtros das COMBOBOX. Dá msg de erro de execução '2185':

    "Vc não pode fazer referência a uma propriedade ou método de controle, a menos que o controle tenha o foco.


    O código ficou assim:



    Private Sub fncFiltroFiltre()

       Dim ctl As Control
       Dim strFiltro As String
       Dim strOperador As String
         
       For Each ctl In Me.Controls
       
               If ctl.Name = "TXTPESQUISA" Then
                             
                         '(AQUI NÃO DEVERIA TER UM "SELECT CASE...?"
                         
                           strFiltro = strFiltro & "([NOME COMPLETO] like ""*" & Nz(Me!TXTPESQUISA.Text, "") & "*"" or "
                           strFiltro = strFiltro & "[Nº DO RE-CBM] like ""*" & Nz(Me!TXTPESQUISA.Text, "") & "*"" or "
                           strFiltro = strFiltro & "[CPF] like ""*" & Nz(Me!TXTPESQUISA.Text, "") & "*"") And "
                           
           

       ElseIf ctl.ControlType = acComboBox Then 'Or ctl.ControlType = acTextBox Then
               If Not IsNull(ctl.Value) Then
                   Select Case ctl.Name
                   
                       'campos tipo texto entre aspas
                       'campos tipo data entre cerquilhas (#)
                   
                       Case "cbosituação"
                           strFiltro = strFiltro & "[SITUAÇÃO] = """ & Me!CBOSITUAÇÃO & """ And "
                                             
                       Case "cbosubsituação"
                           strFiltro = strFiltro & "[SUBSITUAÇÃO] = """ & Me!CBOSUBSITUAÇÃO & """ And "
                           
                       Case "cboagregado"
                           strFiltro = strFiltro & "[TEXTO AGREGADO] = """ & Me!cboagregado & """ And "
                           
                       Case "cbopatente"
                           strFiltro = strFiltro & "[PATENTE] = """ & Me!cbopatente & """ And "
                           
                       Case "cboárea"
                           strFiltro = strFiltro & "[ÁREA] = """ & Me!cboárea & """ And "
                           
                       Case "cbosexo"
                           strFiltro = strFiltro & "[SEXO] = """ & Me!cbosexo & """ And "
                           
                       Case "cboidade"
                       Select Case cboSELidade
                                Case "É diferente de": strOperador = "<>" 'poderia ser "Not Like"
                                Case "", "É igual a": strOperador = "=" 'poderia ser "Like"
                                Case "É maior que": strOperador = ">"
                                'Case "É maior ou igual a": strOperador = ">="
                                Case "É menor que": strOperador = "<"
                                'Case "É menor ou igual a": strOperador = "<="
                             End Select
                                strFiltro = strFiltro & "[Idade] " & strOperador & " """ & Me!cboidade & """ And "
                               
                       Case "cboaltura"
                       Select Case cboSELaltura
                                Case "É diferente de": strOperador = "<>" 'poderia ser "Not Like"
                                Case "", "É igual a": strOperador = "=" 'poderia ser "Like"
                                Case "É maior que": strOperador = ">"
                                'Case "É maior ou igual a": strOperador = ">="
                                Case "É menor que": strOperador = "<"
                                'Case "É menor ou igual a": strOperador = "<="
                             End Select
                                strFiltro = strFiltro & "[ALTURA (m)] " & strOperador & " " & Me!cboaltura & " And "
                                       
                       Case "cbopeso"
                       Select Case cboSELpeso
                                Case "É diferente de": strOperador = "<>" 'poderia ser "Not Like"
                                Case "", "É igual a": strOperador = "=" 'poderia ser "Like"
                                Case " ": strOperador = "="
                                Case "É maior que": strOperador = ">"
                                Case "É menor que": strOperador = "<"
                             End Select
                                strFiltro = strFiltro & "[PESO] " & strOperador & " " & Me!cbopeso & " And "
                       
                                             
                       Case "cboimc"
                           strFiltro = strFiltro & "[TEXTO IMC] = """ & Me!cboimc & """ And "
                           
                       Case "cbotsfrh"
                           strFiltro = strFiltro & "[TS - FRh] = """ & Me!cbotsfrh & """ And "
                           
                       Case "cboalérgico"
                           strFiltro = strFiltro & "[TEXTO ALÉRGICO] = """ & Me!cboalérgico & """ And "
                           
                       Case "cbocútis"
                           strFiltro = strFiltro & "[CÚTIS] = """ & Me!cbocútis & """ And "
                           
                       Case "cbocabelos"
                           strFiltro = strFiltro & "[CABELOS] = """ & Me!cbocabelos & """ And "
                           
                       Case "cboolhos"
                           strFiltro = strFiltro & "[OLHOS] = """ & Me!cboolhos & """ And "
                           
                       Case "cbonaturalidade"
                           strFiltro = strFiltro & "[NATURALIDADE] = """ & Me!cbonaturalidade & """ And "
                           
                       Case "cbobairro"
                           strFiltro = strFiltro & "[BAIRRO] = """ & Me!cbobairro & """ And "
                           
                       Case "cbocidade"
                           strFiltro = strFiltro & "[CIDADE] = """ & Me!cbocidade & """ And "
                           
                       Case "cbolotação"
                           strFiltro = strFiltro & "[OBM/SEÇAO] = """ & Me!cbolotação & """ And "
                           
                       Case "cbo2avia"
                           strFiltro = strFiltro & "[TEXTO 2ª VIA] = """ & Me!cbo2avia & """ And "
                           
                                                                                                                     
                   End Select
               End If
           End If
       
       Next ctl
       
       Me!SUBGFLISTA.Form.filter = ""
       Me!SUBGFLISTA.Form.FilterOn = False
       
       If strFiltro <> "" Then
           strFiltro = Left(strFiltro, Len(strFiltro) - 5)
           Me!SUBGFLISTA.Form.filter = strFiltro
           Me!SUBGFLISTA.Form.FilterOn = True
       End If

    End Sub


    Envio o BD!!!
    Anexos
    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação AttachmentSISTEMA DE IDENTIFICAÇÃO MILITAR 2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1.5 Mb) Baixado 4 vez(es)
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1086
    Registrado : 22/11/2016

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  IvanJr. em 16/11/2019, 20:08

    Código:
    ...
    If ctl.Name = "TXTPESQUISA" Then
                            
                         if ctl.Name = screen.activecontrol.name then
                    
                           strFiltro = strFiltro & "([NOME COMPLETO] like ""*" & Nz(Me!TXTPESQUISA.Text, "") & "*"" or "
                           strFiltro = strFiltro & "[Nº DO RE-CBM] like ""*" & Nz(Me!TXTPESQUISA.Text, "") & "*"" or "
                           strFiltro = strFiltro & "[CPF] like ""*" & Nz(Me!TXTPESQUISA.Text, "") & "*"") And "
                          
                         else

                           strFiltro = strFiltro & "([NOME COMPLETO] like ""*" & Nz(Me!TXTPESQUISA, "") & "*"" or "
                           strFiltro = strFiltro & "[Nº DO RE-CBM] like ""*" & Nz(Me!TXTPESQUISA, "") & "*"" or "
                           strFiltro = strFiltro & "[CPF] like ""*" & Nz(Me!TXTPESQUISA, "") & "*"") And "

                         end if

       ElseIf ctl.ControlType = acComboBox Then 'Or ctl.ControlType = acTextBox Then
    ...

    Para demais problemas, abra um novo tópico


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    Conteúdo patrocinado

    [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação Empty Re: [Resolvido]Filtros Múltiplos em Cascata Utilizando Várias Caixas de Combinação

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 15/12/2019, 18:24