Ir para conteúdo
Fórum Script Brasil
  • 0

AJUDA PARA MONTAR CÓDIGO


Macêdo

Pergunta

Pessoal, minha situação é a seguinte:

Possuo um Form para fazer FILTROS numa tabela, neste FORM existem 6 COMBOS os quais 1 para cada campo da Tabela e cada COMBO possue inúmeros itens os quais serão a base para o FILTRO, meu código, de inicio está assim como mostrado abaixo, ENORME e nem sei quando irei terminá-lo. gostaria de saber se existe outra forma de fazer estes filtros, sendo que, da forma que estou fazendo precisarei saber todas as combinações possíveis que possam acontecer, assim:

1 - combo 1 <> todos

2 - combo 2 <> todos

3 - combo 3 <> todos

4 - combo 4 <> todos

5 - combo 5 <> todos

6 - combo 6 <> todos

7 - combos 1 e 2 <> todos

8 - combos 1 e 3 <> todos

9 - combos 1 e 4 <> todos ...

A linha de raciocinio é a seguinte: a combo que tiver a propriedade TEXT <> de TODOS deve ser filtrada o campo a que se refere na tabela com a PALAVRA ou item que aparece na COMBO, ou seja, o valor escolhido pelo usuário

Private Sub FILTROS()

If Combo_situacao = "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente <> "TODOS" Then

With rs_relatorio
    .Filter = " nome like '" & Combo_proponente & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório Individual"

End If

If Combo_situacao = "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio <> "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " municipio like '" & Combo_municipio & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Município"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_municipio.Text

End If

If Combo_situacao = "TODOS" And _
Combo_atividade <> "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " ATIVIDADE like '" & Combo_atividade & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Atividade"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_atividade.Text

End If

If Combo_situacao = "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista <> "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " projetista like '" & Combo_projetista & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Projetista"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_projetista.Text

End If

If Combo_situacao = "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa <> "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " porte like '" & Combo_programa & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Programa"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_programa.Text

End If

If Combo_situacao <> "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " situacao like '" & Combo_situacao & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Situação"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_situacao.Text

End If

If Combo_situacao <> "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio <> "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " situacao like '" & Combo_situacao & "'and municipio like '" & Combo_municipio & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Município/Situação"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_municipio & " / " & Combo_situacao

End If

If Combo_situacao <> "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista <> "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " situacao like '" & Combo_situacao & "'and projetista like '" & Combo_projetista & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Projetista/Situação"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_projetista & " / " & Combo_situacao

End If

If Combo_situacao <> "TODOS" And _
Combo_atividade <> "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " situacao like '" & Combo_situacao & "'and atividade like '" & Combo_atividade & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Atividade/Situação"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_atividade & " / " & Combo_situacao

End If

If Combo_situacao <> "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa <> "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " situacao like '" & Combo_situacao & "'and porte like '" & Combo_programa & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Programa/Situação"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_programa & " / " & Combo_situacao

End If

If Combo_situacao = "TODOS" And _
Combo_atividade <> "TODOS" And _
Combo_projetista <> "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " atividade like '" & Combo_atividade & "'and projetista like '" & Combo_projetista & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Projetista/Atividade"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_projetista & " / " & Combo_atividade

End If

If Combo_situacao = "TODOS" And _
Combo_atividade <> "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio <> "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " atividade like '" & Combo_atividade & "'and municipio like '" & Combo_municipio & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Município/Atividade"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_municipio & " / " & Combo_atividade

End If

If Combo_situacao = "TODOS" And _
Combo_atividade <> "TODOS" And _
Combo_projetista = "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa <> "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " atividade like '" & Combo_atividade & "'and porte like '" & Combo_programa & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Programa/Atividade"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_programa & " / " & Combo_atividade

End If

If Combo_situacao = "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista <> "TODOS" And _
Combo_municipio <> "TODOS" And _
Combo_programa = "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " projetista like '" & Combo_projetista & "'and municipio like '" & Combo_municipio & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Município/Projetista"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_municipio & " / " & Combo_projetista

End If

If Combo_situacao = "TODOS" And _
Combo_atividade = "TODOS" And _
Combo_projetista <> "TODOS" And _
Combo_municipio = "TODOS" And _
Combo_programa <> "TODOS" And _
Combo_proponente = "TODOS" Then

With rs_relatorio
    .Filter = " projetista like '" & Combo_projetista & "'and porte like '" & Combo_programa & "'"
End With
Rpt_projetos.Sections("Section2").Controls.Item("Label_cima").Caption = "Relatório de Projetos por Projetista/Programa"
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = Combo_projetista & " / " & Combo_programa

End If

End Sub

Espero que exista saida para um caso desses...

Obrigado a todos pela atenção a mais esta questão VB

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

cara tem um jeito bem mais facil tipo assim:

Dim strFiltro As String

strFiltro = ""
If Combo1.Text <> "TODOS" Then
    strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "Campo1 Like '" & Combo1.Text & "'"
End If
If Combo2.Text <> "TODOS" Then
    strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "Campo2 Like '" & Combo2.Text & "'"
End If
...
...
If ComboN.Text <> "TODOS" Then
    strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "CampoN Like '" & ComboN.Text & "'"
End If
rs_relatorio.Filter = strFiltro[/code]

veja se você entende ai, qualquer coisa poste

Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou perfeitamente, só falta eu entender por completo para aumentar o conhecimento e me safar de outras dessas complicações

Dim strFiltro As String ' criou uma variavel string para unir as informações para o FILTER

strFiltro = "" ' creio que aqui você limpou a variavel para caso esteja vindo de um FILTER anterior

If Combo1.Text <> "TODOS" Then

strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "Campo1 Like '" & Combo1.Text & "'" ' e aqui ?

End If

If Combo2.Text <> "TODOS" Then

strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "Campo2 Like '" & Combo2.Text & "'"

End If

...

...

If ComboN.Text <> "TODOS" Then

strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "CampoN Like '" & ComboN.Text & "'"

End If

rs_relatorio.Filter = strFiltro

Olha só, mesmo sem entender 100% segui a linha do código e implementei está PRONTO! Além de fazer os filtros de acordo as combos escolhidas ainda informa numa Label no relatório qual o tipo de Filtro feito, hehehehe ficou assim:

Private Sub filtros()

Dim strFiltro As String
Dim strinfo As String

strFiltro = ""

If Combo_situacao <> "TODOS" Then
    strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "situacao Like '" & Combo_situacao.Text & "'"
    strinfo = strinfo & IIf(strinfo <> "", " / ", "") & Combo_situacao.Text
End If

If Combo_atividade <> "TODOS" Then
    strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "atividade Like '" & Combo_atividade.Text & "'"
    strinfo = strinfo & IIf(strinfo <> "", " / ", "") & Combo_atividade.Text
End If

If Combo_projetista <> "TODOS" Then
    strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "projetista Like '" & Combo_projetista.Text & "'"
    strinfo = strinfo & IIf(strinfo <> "", " / ", "") & Combo_projetista.Text
End If

If Combo_municipio <> "TODOS" Then
    strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "municipio Like '" & Combo_municipio.Text & "'"
    strinfo = strinfo & IIf(strinfo <> "", " / ", "") & Combo_municipio.Text
End If

If Combo_proponente <> "TODOS" Then
    strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "nome Like '" & Combo_proponente.Text & "'"
    strinfo = strinfo & IIf(strinfo <> "", " / ", "") & Combo_proponente.Text
End If

If Combo_programa <> "TODOS" Then
    strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "porte Like '" & Combo_programa.Text & "'"
    strinfo = strinfo & IIf(strinfo <> "", " / ", "") & Combo_programa.Text
End If

rs_relatorio.Filter = strFiltro
Rpt_projetos.Sections("Section2").Controls.Item("Label_baixo").Caption = strinfo

End Sub
Private Sub Command2_Click()
filtros
With Rpt_projetos
    Set .DataSource = rs_relatorio
    .DataMember = ""
    .Refresh
    .Show
End With
End Sub
Valeu Kuroi!, se possível ainda aguardo a informação que falta para entender a linha:
strFiltro = strFiltro & IIf(strFiltro <> "", " And ", "") & "atividade Like '" & Combo_atividade.Text & "'"

Link para o comentário
Compartilhar em outros sites

  • 0

na verdade é bem simples, ele simplesmente adiciona mais uma condicao na string do filtro.

se você não sabe usar a funcao Iif(), a explicacao é a seguinte: o primeiro parâmetro é uma condicao q deve retornar verdadeiro ou falso. o segundo é um valor que você quer q seja retornado caso a condicao passado no primero parametro for verdadeira. o terceiro é o valor q você quer caso a condicao seja falsa.

no exemplo, se o filtro já tiver preenchido com alguma coisa, por exemplo Campo1 = 'Valor1' ai eu quero adicionar mais uma condicao Campo2 = 'Valor2'. ai eu testo se já não tem nd. se tiver eu tenho q por um And no meio.

veja se entendeu ai qualquer coisa pergunte.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...