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]Relatório com datas e dois combobox

    avatar
    alantb
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 163
    Registrado : 25/07/2017

    [Resolvido]Relatório com datas e dois combobox Empty [Resolvido]Relatório com datas e dois combobox

    Mensagem  alantb em 8/12/2017, 10:54

    Bom dia pessoal,

    Tenho o código abaixo que está funcionando (filtrando) perfeitamente um relatório: entre duas datas mais UM(1) combobox. Com base nesse código criei outro relatório em outro sistema, entretanto, preciso que tenha um combobox a mais (entre datas + 2 combobox), ou seja: filtrar entre datas e com os combos com seleção, ou não, somente as datas preenchidas; ou entre datas e seleção em apenas um combo. Sendo assim como adicionar mais um FILTRO????

    Private Sub cmdImprimir_Click()

    Dim strFiltro As String


    If IsNull(Me.ComboClasse) Then

    strFiltro = "[desClasse] Like ""*"""

    Else

    strFiltro = "[desClasse] = '" & Me.ComboClasse & "'"

    End If

    If Len("" & Me.txtDe) > 0 Then strFiltro = strFiltro & " and dtDe >=#" & Me.txtDe & "#"
    If Len("" & Me.txtAte) > 0 Then strFiltro = strFiltro & " And dtDe<=#" & Me.txtAte & "#"

    DoCmd.OpenReport "RelClassificacao", acViewPreview, , , , "SELECT Matricula, Nome, desCargo,dtClasse,desClasse, Sum(TotalPontosAno) as Pontos FROM ((((TbContrato LEFT JOIN TbPessoa ON TbContrato.CodPessoa=TbPessoa.CodPessoa) LEFT JOIN TbCargo ON TbContrato.CodCargo=TbCargo.CodCargo) LEFT JOIN TbClasse ON TbContrato.CodClasse=TbClasse.CodClasse) LEFT JOIN TbFormulario ON TbContrato.Matricula=TbFormulario.MatriculaFunc) LEFT JOIN TbFormularioDetalhe ON TbFormulario.CodFormulario=TbFormularioDetalhe.CodFormulario WHERE " & strFiltro & " GROUP BY Matricula,Nome,desCargo,desClasse,dtClasse ORDER BY Sum(TotalPontosAno) Desc;"


    DoCmd.Close acForm, "frmRelClassificacao"

    End Sub

    ALAN
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7614
    Registrado : 05/11/2009

    [Resolvido]Relatório com datas e dois combobox Empty Re: [Resolvido]Relatório com datas e dois combobox

    Mensagem  Alexandre Neves em 8/12/2017, 15:28

    Boa tarde,
    Sem indicação dos nomes dos controlos e nomes dos campos, fica dificil

    Código:
    Private Sub cmdImprimir_Click()
        Dim strFiltro As String

        If IsNull(ComboClasse) and IsNull(ComboClasse1) Then
        Elseif IsNull(ComboClasse) then
            strFiltro = "desClasse='" & ComboClasse & "'"
        elseif IsNull(ComboClasse1) then
            strFiltro = "desClasse1='" & ComboClasse1 & "'"
        else
            strFiltro = "desClasse='" & ComboClasse & "' and desClasse1='" & ComboClasse1 & "'"
        End If
        If Len("" & Me.txtDe) > 0 Then strFiltro = strFiltro & " and dtDe >=#" & Me.txtDe & "#"
        If Len("" & Me.txtAte) > 0 Then strFiltro = strFiltro & " And dtDe<=#" & Me.txtAte & "#"

        DoCmd.OpenReport "RelClassificacao", acViewPreview, , , , "SELECT Matricula, Nome, desCargo,dtClasse,desClasse, Sum(TotalPontosAno) as Pontos FROM ((((TbContrato LEFT JOIN TbPessoa ON TbContrato.CodPessoa=TbPessoa.CodPessoa) LEFT JOIN TbCargo ON TbContrato.CodCargo=TbCargo.CodCargo) LEFT JOIN TbClasse ON TbContrato.CodClasse=TbClasse.CodClasse) LEFT JOIN TbFormulario ON TbContrato.Matricula=TbFormulario.MatriculaFunc) LEFT JOIN TbFormularioDetalhe ON TbFormulario.CodFormulario=TbFormularioDetalhe.CodFormulario WHERE " & strFiltro & " GROUP BY Matricula,Nome,desCargo,desClasse,dtClasse ORDER BY Sum(TotalPontosAno) Desc;"

        DoCmd.Close acForm, "frmRelClassificacao"

    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    alantb
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 163
    Registrado : 25/07/2017

    [Resolvido]Relatório com datas e dois combobox Empty Re: [Resolvido]Relatório com datas e dois combobox

    Mensagem  alantb em 8/12/2017, 16:18

    Olá, Alexandre, esse sistema que estou fazendo apenas cadastra atestados, licenças ou afastamentos do trabalho em geral. Com os controles que estou usando ficaria como no código abaixo. Entretanto, esta gerando o relatório com TODOS os dados apenas. Se digitar uma data e selecionar nos combobox ainda não está filtrando.
    As colunas do relatório são: Matricula(CodFunc), Nome(NomeFunc), Motivo(descMotivo), Dias (NroDias) e A Contar(AContar)

    Outra dúvida: esses campos são adicionados a seção DETALHE do relatório adicionando Caixas de Texto e renomeando com o nome dos Campos????é isso, pois se for de outra forma teria de indicar na Fonte de Registro do relatório o nome da Consulta e dai usar o menu Campos Existentes para inserir os campos....Só que dessa forma não seria necessário a query SQL que aparece no código abaixo. Correto???

    Private Sub cmdImprimir_Click()

    Dim strFiltro As String

    If IsNull(ComboFunc) And IsNull(ComboMotivo) Then
    ElseIf IsNull(ComboFunc) Then
    strFiltro = "NomeFunc='" & ComboFunc & "'"
    ElseIf IsNull(ComboMotivo) Then
    strFiltro = "descMotivo='" & ComboMotivo & "'"
    Else
    strFiltro = "NomeFunc='" & ComboFunc & "' and descMotivo='" & ComboMotivo & "'"
    End If
    If Len("" & Me.txtDe) > 0 Then strFiltro = strFiltro & " and AContar >=#" & Me.txtDe & "#"
    If Len("" & Me.txtAte) > 0 Then strFiltro = strFiltro & " And AContar<=#" & Me.txtAte & "#"

    DoCmd.OpenReport "RelBiometriaLista", acViewPreview, , , , "SELECT tbMovimento.CodBiometria, tbMovimento.CodFunc, tbFuncionario.NomeFunc, tbMovimento.CodMotivo, tbMotivo.DescMotivo, tbMovimento.NroDias, tbMovimento.AContar FROM tbMotivo INNER JOIN (tbFuncionario INNER JOIN tbMovimento ON tbFuncionario.codFunc = tbMovimento.CodFunc) ON tbMotivo.CodMotivo = tbMovimento.CodMotivo WHERE " & strFiltro & ""

    DoCmd.Close acForm, "frmRelBiometriaData"

    End Sub

    ALAN
    avatar
    alantb
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 163
    Registrado : 25/07/2017

    [Resolvido]Relatório com datas e dois combobox Empty Re: [Resolvido]Relatório com datas e dois combobox

    Mensagem  alantb em 8/12/2017, 18:01

    Pessoal, já alterei o código e o design do relatório de várias formas, mas sempre exibe somente todos os dados, não filtra. Parece que não lê a parte do código que indica os comboboxes e os campos data. Dessa forma segue cópia do BD para verificação.

    Para testar executar o form "frmRelBiometriaData" e inserir datas ex: 01/01/2017 'a 30/07/2017. Ou datas +funcionário; ou datas+funcionário+motivo.

    ALAN
    Anexos
    [Resolvido]Relatório com datas e dois combobox AttachmentbdBiometria.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (223 Kb) Baixado 22 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7614
    Registrado : 05/11/2009

    [Resolvido]Relatório com datas e dois combobox Empty Re: [Resolvido]Relatório com datas e dois combobox

    Mensagem  Alexandre Neves em 9/12/2017, 10:36

    Bom dia,
    Sobre o filtro, tinha as condições trocadas. veja agora
    Código:
    Private Sub cmdImprimir_Click()
        Dim strFiltro As String
        
        If IsNull(Me.ComboFunc) And IsNull(Me.ComboMotivo) Then
        ElseIf IsNull(Me.ComboFunc) Then
            strFiltro = "descMotivo='" & Me.ComboMotivo & "'"
        ElseIf IsNull(ComboMotivo) Then
            strFiltro = "NomeFunc='" & Me.ComboFunc & "'"
        Else
            strFiltro = "NomeFunc='" & ComboFunc & "' and descMotivo='" & ComboMotivo & "'"
        End If
        
        If Len("" & Me.txtDe) > 0 Then strFiltro = strFiltro & " and AContar >=#" & Me.txtDe & "#"
        If Len("" & Me.txtAte) > 0 Then strFiltro = strFiltro & " And AContar<=#" & Me.txtAte & "#"
        
        DoCmd.OpenReport "RelBiometriaLista", acViewPreview, , , , "SELECT tbMovimento.CodBiometria, tbMovimento.CodFunc, tbFuncionario.NomeFunc, tbMovimento.CodMotivo, tbMotivo.DescMotivo, tbMovimento.NroDias, tbMovimento.AContar FROM tbMotivo INNER JOIN (tbFuncionario INNER JOIN tbMovimento ON tbFuncionario.codFunc = tbMovimento.CodFunc) ON tbMotivo.CodMotivo = tbMovimento.CodMotivo WHERE " & strFiltro & ""
        'DoCmd.OpenReport "RelBiometriaLista", acViewPreview, , , , "SELECT tbMovimento.CodBiometria, tbMovimento.CodFunc, tbFuncionario.NomeFunc, tbMovimento.CodMotivo, tbMotivo.DescMotivo, tbMovimento.NroDias, tbMovimento.AContar FROM ConsultaBiometria WHERE " & strFiltro & " ORDER BY tbFuncionario.NomeFunc Asc;"
        
        DoCmd.Close acForm, "frmRelBiometriaData"
    End Sub

    Pode eliminar a consulta ConsultaBiometria
    No relatório, retire a origem dos registos e coloque, no acontecimento AoAbrir
    Código:
    Private Sub Report_Open(Cancel As Integer)
        RecordSource = OpenArgs
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    alantb
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 163
    Registrado : 25/07/2017

    [Resolvido]Relatório com datas e dois combobox Empty Re: [Resolvido]Relatório com datas e dois combobox

    Mensagem  alantb em 12/12/2017, 17:31

    Alexandre, se deixar o combo de seleção do funcionário em branco as vezes carrega o relatório e as vezes não, carrega em branco. As vezes seleciono só o motivo também, as vezes carrega dados as vezes não. Senão tenho de fechar tudo e abrir o sistema novamente para funcionar.
    Outra coisa : tem como deixar os combobox com a opção TODOS em de selecionar uma opção ???

    ALAN
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7614
    Registrado : 05/11/2009

    [Resolvido]Relatório com datas e dois combobox Empty Re: [Resolvido]Relatório com datas e dois combobox

    Mensagem  Alexandre Neves em 16/12/2017, 09:45

    Bom dia,
    Veja
    Código:
    Private Sub cmdImprimir_Click()
        Dim strFiltro As String
       
        If Len("" & Me.ComboFunc) > 0 And Len("" & Me.ComboMotivo) > 0 Then
            strFiltro = "NomeFunc='" & ComboFunc & "' and descMotivo='" & ComboMotivo & "'"
        ElseIf Len("" & Me.ComboFunc) > 0 Then
            strFiltro = "NomeFunc='" & Me.ComboFunc & "'"
        ElseIf Len("" & ComboMotivo) > 0 Then
            strFiltro = "descMotivo='" & Me.ComboMotivo & "'"
        End If
       
        If Len("" & Me.txtDe) > 0 Or Len("" & Me.txtAte) > 0 Then strFiltro = strFiltro & " and "
        If Len("" & Me.txtDe) > 0 Then strFiltro = strFiltro & " AContar >=#" & Me.txtDe & "#"
        If Len("" & Me.txtAte) > 0 Then strFiltro = strFiltro & " AContar<=#" & Me.txtAte & "#"
        If Len(strFiltro) > 0 Then strFiltro = " WHERE " & strFiltro
       
        DoCmd.OpenReport "RelBiometriaLista", acViewPreview, , , , "SELECT tbMovimento.CodBiometria, tbMovimento.CodFunc, tbFuncionario.NomeFunc, tbMovimento.CodMotivo, tbMotivo.DescMotivo, tbMovimento.NroDias, tbMovimento.AContar FROM tbMotivo INNER JOIN (tbFuncionario INNER JOIN tbMovimento ON tbFuncionario.codFunc = tbMovimento.CodFunc) ON tbMotivo.CodMotivo = tbMovimento.CodMotivo" & strFiltro
       
        DoCmd.Close acForm, "frmRelBiometriaData"
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    alantb
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 163
    Registrado : 25/07/2017

    [Resolvido]Relatório com datas e dois combobox Empty Re: [Resolvido]Relatório com datas e dois combobox

    Mensagem  alantb em 19/12/2017, 15:46

    Olá Alexandre, quando eu clico em imprimir:

    - direto sem nenhuma seleção imprime TUDO, ok tá certo;
    - se eu selecionar um funcionário, sem digitar datas, imprime seus afastamentos, ok..
    - se selecionar um MOTIVO sem selecionar datas e nem funcionário também imprime OK;

    Entretanto, quando digito um período de datas com seleção com esse ultimo código dá erro em tempo de execução '3075' erro de sintaxe operador faltando na expressão de consulta e exibe as datas que digitei e as seleções que fiz nos combobox.....

    ALAN
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7614
    Registrado : 05/11/2009

    [Resolvido]Relatório com datas e dois combobox Empty Re: [Resolvido]Relatório com datas e dois combobox

    Mensagem  Alexandre Neves em 7/1/2018, 14:30

    Boa tarde,
    Veja agora
    Código:
    Private Sub cmdImprimir_Click()
        Dim strFiltro As String
       
        If Len("" & Me.ComboFunc) > 0 And Len("" & Me.ComboMotivo) > 0 Then
            strFiltro = "NomeFunc='" & ComboFunc & "' and descMotivo='" & ComboMotivo & "'"
        ElseIf Len("" & Me.ComboFunc) > 0 Then
            strFiltro = "NomeFunc='" & Me.ComboFunc & "'"
        ElseIf Len("" & ComboMotivo) > 0 Then
            strFiltro = "descMotivo='" & Me.ComboMotivo & "'"
        End If
       
        If Len("" & Me.txtDe) > 0 And Len("" & Me.txtAte) > 0 Then
            If Len(strFiltro) = 0 Then
                strFiltro = strFiltro & "AContar >=#" & Me.txtDe & "# and AContar <=#" & Me.txtAte & "#"
            Else
                strFiltro = strFiltro & " and AContar >=#" & Me.txtDe & "# and AContar <=#" & Me.txtAte & "#"
            End If
        ElseIf Len("" & Me.txtDe) > 0 Then
            If Len(strFiltro) = 0 Then
                strFiltro = strFiltro & "AContar >=#" & Me.txtDe & "#"
            Else
                strFiltro = strFiltro & " and AContar >=#" & Me.txtDe & "#"
            End If
        ElseIf Len("" & Me.txtAte) > 0 Then
            If Len(strFiltro) = 0 Then
                strFiltro = strFiltro & "AContar <=#" & Me.txtAte & "#"
            Else
                strFiltro = strFiltro & " and AContar <=#" & Me.txtAte & "#"
            End If
        End If
        If Len(strFiltro) > 0 Then strFiltro = " WHERE " & strFiltro
       
        DoCmd.OpenReport "RelBiometriaLista", acViewPreview, , , , "SELECT tbMovimento.CodBiometria, tbMovimento.CodFunc, tbFuncionario.NomeFunc, tbMovimento.CodMotivo, tbMotivo.DescMotivo, tbMovimento.NroDias, tbMovimento.AContar FROM tbMotivo INNER JOIN (tbFuncionario INNER JOIN tbMovimento ON tbFuncionario.codFunc = tbMovimento.CodFunc) ON tbMotivo.CodMotivo = tbMovimento.CodMotivo" & strFiltro
       
        DoCmd.Close acForm, "frmRelBiometriaData"
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    alantb
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 163
    Registrado : 25/07/2017

    [Resolvido]Relatório com datas e dois combobox Empty Re: [Resolvido]Relatório com datas e dois combobox

    Mensagem  alantb em 7/2/2018, 19:15

    Olá Alexandre, desculpe a demora para responder pois estava de férias. Com as modificações do código da última mensagem deu certo. Obrigado mais uma vez pela disponibilidade e atenção...RESOLVIDO...

    ALAN

      Data/hora atual: 25/5/2020, 14:28