MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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

    [Resolvido]Consulta de períodos utilizando VBA

    avatar
    AndreyMinorelli
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 20
    Registrado : 30/12/2020

    [Resolvido]Consulta de períodos utilizando VBA Empty [Resolvido]Consulta de períodos utilizando VBA

    Mensagem  AndreyMinorelli 31/12/2020, 11:52

    Bom dia!!

    Preciso de auxílio em conhecimento básico de formatação de data no VBA.

    Estou criando um formulário de consulta dos registros de uma tabela. Dentro do formulário eu tenho algumas comboboxes armazenam uma string em uma variável e quando o cliente clica em filtrar essa string é inserida dentro do "WHERE" e filtra os registros do meu subform.

    Eu preciso criar uma consulta de registro por período (mês, mês anterior, trimestre, semestre, ano).

    Conheço muito pouco de access e vba, então a solução que eu pensei foi a seguinte: Criei uma tabela com os períodos que desejo consultar e no meu formulário criei uma combobox pra selecionar. Quando o cliente seleciona "mês" na combobox o filtro adicionaria no "WHERE" algo como (Year([data])=Year(Now()) AND Month([data])=Month(Now())). No entanto está retornando erro de tipo (13 - Tipos incompatíveis). Acredito que tenha a ver com formatação da data e que a sintaxe no vba é diferente do critério de uma consulta no modo design.

    Alguém consegue me ajudar? Segue o código que estou criando:

    Private Sub cmdFilter_Click()

       Dim strWhere As String                  'String com o critério.
       Dim lngLen As Long                      'Comprimento da string do critério para acrescentar.

       '***********************************************************************
       'Verifique os valores das combobox e construa a string com os critérios a partir das que não estão em branco.
       '***********************************************************************
       
       If Not IsNull(Me.cboEmpresa) Then
           strWhere = strWhere & "([t_grupo_ID] = " & Me.cboEmpresa & ") AND "
       End If

       If Not IsNull(Me.cboSetores) Then
           strWhere = strWhere & "([t_empresas_ID] = " & Me.cboSetores & ") AND "
       End If

       If Not IsNull(Me.cboReceitas) Then
       strWhere = strWhere & "([t_cat_entradas_saidas_ID] = " & Me.cboReceitas & ") AND "
       End If

       If Not IsNull(Me.cboPeriodos) Then
       If Me.cboPeriodos = 1 Then strWhere = strWhere & "((Year([data])=Year(Now()) AND Month([data])=Month(Now())))" And ""
       End If
       

       'Verifica se a string tem menos que 5 caracteres para remover.
       lngLen = Len(strWhere) - 5
       If lngLen <= 0 Then     'Não tem informação na string.
           MsgBox "Selecione algum critério", vbInformation, ""
       Else                    'existe critério selecionado e remova o " AND " no final.
           strWhere = Left$(strWhere, lngLen)
           
           'insira a string no filtro do formulário.
           Me.Filter = strWhere
           Me.FilterOn = True
       End If
    End Sub
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Consulta de períodos utilizando VBA Empty Re: [Resolvido]Consulta de períodos utilizando VBA

    Mensagem  Alexandre Neves 31/12/2020, 12:08

    Bom dia, bem-vindo ao fórum e próspero Ano Novo
    Qual o conteúdo da strWhere assume? (coloque debug.print strWhere e veja o que aparece na janela imediata)


    .................................................................................
    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

    AndreyMinorelli gosta desta mensagem

    avatar
    AndreyMinorelli
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 20
    Registrado : 30/12/2020

    [Resolvido]Consulta de períodos utilizando VBA Empty Consulta de períodos utilizando VBA

    Mensagem  AndreyMinorelli 31/12/2020, 12:53

    Eu consigo aplicar o debug.print somente até a última condição antes de filtrar o período.
    O resultado é o seguinte:

    Código:

    ([t_grupo_ID] = 1) AND ([t_empresas_ID] = 3) AND ([t_cat_entradas_saidas_ID] = 1) AND

    Quando o vba vai executar a condição de consulta abaixo, ele dá erro 13 (tipos incompatíveis) e não consigo utilizar o debug.print.


    Código:

        If Not IsNull(Me.cboPeriodos) Then
        If Me.cboPeriodos = 1 Then strWhere = strWhere & "((Year([data])=Year(Now()) AND Month([data])=Month(Now())))" And ""
        End If
    avatar
    AndreyMinorelli
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 20
    Registrado : 30/12/2020

    [Resolvido]Consulta de períodos utilizando VBA Empty Consulta de períodos utilizando VBA

    Mensagem  AndreyMinorelli 31/12/2020, 13:40

    Eu sei que a forma que formatamos data no modo design é diferente do VBA, mas não consigo descobrir como é que eu monto uma expressão como essa dentro do VBA.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Consulta de períodos utilizando VBA Empty Re: [Resolvido]Consulta de períodos utilizando VBA

    Mensagem  Alexandre Neves 31/12/2020, 14:15

    Em vez de
    Código:
    If Not IsNull(Me.cboPeriodos) Then
        If Me.cboPeriodos = 1 Then strWhere = strWhere & "((Year([data])=Year(Now()) AND Month([data])=Month(Now())))" And ""
    End If
    Tente
    Código:
    If Len("" & Me.cboPeriodos)>0 Then
        If Me.cboPeriodos = 1 Then strWhere = strWhere & "Format(data,"yyyy-mm")=Format(date,"yyyy-mm") And "
    End If

    Atenção aos nomes reservados do Access que podem interpretar valores internos do programa ("data")


    .................................................................................
    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

    AndreyMinorelli gosta desta mensagem

    avatar
    AndreyMinorelli
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 20
    Registrado : 30/12/2020

    [Resolvido]Consulta de períodos utilizando VBA Empty Consulta de períodos utilizando VBA

    Mensagem  AndreyMinorelli 31/12/2020, 14:44

    Rodei a procedure com o código que você me passou mas retorna erro logo após a primeira formatação de data, esperando fim da instrução.

    Será que tem a ver com as "?


    Código:

       If Me.cboPeriodos = 1 Then strWhere = strWhere & "(Format(data, "yyyy/mm") = Format(Date, "yyyy/mm")) And "

    segue imagem com erro


    *Preciso nomear diferentemente a coluna [data] conforme sua sugestão. Obrigado pela dica.
    Anexos
    [Resolvido]Consulta de períodos utilizando VBA Attachmentteste.png
    Você não tem permissão para fazer download dos arquivos anexados.
    (33 Kb) Baixado 3 vez(es)


    Última edição por AndreyMinorelli em 31/12/2020, 14:56, editado 1 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Consulta de períodos utilizando VBA Empty Re: [Resolvido]Consulta de períodos utilizando VBA

    Mensagem  Alexandre Neves 31/12/2020, 14:52

    Pois, em vez de aspas deviam ser pelicas
    Código:
    If Me.cboPeriodos = 1 Then strWhere = strWhere & "Format(data,'yyyy-mm')=Format(date,'yyyy-mm') And "


    .................................................................................
    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

    AndreyMinorelli gosta desta mensagem

    avatar
    AndreyMinorelli
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 20
    Registrado : 30/12/2020

    [Resolvido]Consulta de períodos utilizando VBA Empty Consulta de períodos utilizando VBA

    Mensagem  AndreyMinorelli 31/12/2020, 15:31

    Rapaz! Era isso! Agora eu consigo armazenar o critério dentro da variável. Muito Obrigado!!!!

    Se não for te incomodar muito, gostaria de mais uma ajuda.
    Quando eu rodo a procedure o access está me pedindo para inserir um valor de parâmetro para "Data".
    No entanto, em nenhum lugar do meu projeto existe alguma variável "Data" (ou "data"), ou algum campo, tampouco nas minhas tabelas eu tenho uma coluna com esse nome.

    Eu já alterei aquela coluna para "data_reg" para eliminar o problema de palavra reservada.

    Mais uma vez obrigado!
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Consulta de períodos utilizando VBA Empty Re: [Resolvido]Consulta de períodos utilizando VBA

    Mensagem  Alexandre Neves 31/12/2020, 15:42

    Se alterou para data_reg, deve substituir tudo para data_reg onde estava data
    Se quer referir-se à data actual, coloque Date
    Está a ver a vantagem de respeitarmos as palavras reservadas do Access? Até para criar, alterar ou interpretar o código é mais fácil


    .................................................................................
    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

    AndreyMinorelli gosta desta mensagem

    avatar
    AndreyMinorelli
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 20
    Registrado : 30/12/2020

    [Resolvido]Consulta de períodos utilizando VBA Empty Re: [Resolvido]Consulta de períodos utilizando VBA

    Mensagem  AndreyMinorelli 31/12/2020, 16:07

    Obrigado e que 2021 seja incrível para você e sua família!
    avatar
    AndreyMinorelli
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 20
    Registrado : 30/12/2020

    [Resolvido]Consulta de períodos utilizando VBA Empty Update

    Mensagem  AndreyMinorelli 4/1/2021, 19:56

    Somente para finalizar de fato o tópico...

    Eu estava presenciando um erro de valor de parâmetro. Como se eu tivesse declarado um parâmetro chamado "Data" e não tinha atribuído valor.
    Descobri o erro. Segue código com erro e resolvido.

    Código com erro:
    Código:
        strWhere = strWhere & "Format(dt_reg,'yyyy-mm')=Format(date,'yyyy-mm') And "

    Código corrigido:
    Código:
        strWhere = strWhere & "Format(dt_reg,'yyyy-mm')=Format(date(),'yyyy-mm') And "

    Tinha faltado os parêntesis após "date".

      Data/hora atual: 17/6/2021, 17:46