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


2 participantes

    [Resolvido]Relatório com datas e dois combobox

    avatar
    alantb
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  alantb 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    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 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
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  alantb 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
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  alantb 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 30 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    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 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
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  alantb 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    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 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
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  alantb 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8498
    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 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
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  alantb 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

    Conteúdo patrocinado


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

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 18:12