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]VBA - Diferença entre meses - classificação

    avatar
    AndreyMinorelli
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]VBA - Diferença entre meses - classificação Empty [Resolvido]VBA - Diferença entre meses - classificação

    Mensagem  AndreyMinorelli 5/1/2021, 00:31

    Boa noite!

    Estou tentando trazer os registros dos últimos 3 meses no filtro de um subform.
    Acredito que consegui chegar na sintaxe correta, uma vez que o resultado é correto. No entanto os registros estão aparecendo fora de ordem. Gostaria que eles aparecessem em ordem de data.

    Segue código do filtro:

    Código:
    ElseIf Me.cboPeriodos = 3 Then
                strWhere = strWhere & "Format(dt_reg, 'mm yyyy') between Format(DateSerial(Year(Date()), Month(Date()) - 3, 3),'mm yyyy') and Format(date(),'yyyy-mm') And "

    Obrigado!!
    Noobezinho
    Noobezinho
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4122
    Registrado : 29/06/2012

    [Resolvido]VBA - Diferença entre meses - classificação Empty Re: [Resolvido]VBA - Diferença entre meses - classificação

    Mensagem  Noobezinho 5/1/2021, 09:52

    Olá Andrey

    Como colocou apenas um pedaço do código, só posso dizer isso:

    É necessário colocar o ORDER BY nomedatabela.nomedocampo no final da consulta.

    { }'s

    Balem

    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]VBA - Diferença entre meses - classificação Empty Update

    Mensagem  AndreyMinorelli 5/1/2021, 12:37

    Olá, Noobezinho! Obrigado pelo retorno.

    Eu tentei o ORDER BY conforme você sugeriu mas retornou erro de sintaxe (operador faltando).

    Segue código completo:

    Código:

    Private Sub cmdFilter_Click()
        'Purpose:   Build up the criteria string form the non-blank search boxes, and apply to the form's Filter.
        'Notes:     1. We tack " AND " on the end of each condition so you can easily add more search boxes; _
                            we remove the trailing " AND " at the end.
        '           2. The date range works like this: _
                            Both dates      = only dates between (both inclusive. _
                            Start date only = all dates from this one onwards; _
                            End date only   = all dates up to (and including this one).
        Dim p As String
        Dim strWhere As String                  'The criteria string.
        Dim lngLen As Long                      'Length of the criteria string to append to.
        Const conJetDate = "\#mm\/dd\/yyyy\#"   'The format expected for dates in a JET query string.
        
        
        '***********************************************************************
        'Look at each search box, and build up the criteria string from the non-blank ones.
        '***********************************************************************
        'Text field example. Use quotes around the value in the string.
        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 & "Format(dt_reg,'yyyy-mm')=Format(date(),'yyyy-mm') And "
            ElseIf Me.cboPeriodos = 2 Then
                strWhere = strWhere & "Format(dt_reg, 'mm yyyy')=Format(DateSerial(Year(date()), Month(date()) - 1, 1), 'mm yyyy') And "
            ElseIf Me.cboPeriodos = 3 Then
                strWhere = strWhere & "Format(dt_reg, 'mm yyyy') between Format(DateSerial(Year(Date()), Month(Date()) - 3, 3),'mm yyyy') and Format(date(),'yyyy-mm') ORDER BY t_registros.dt_reg And "
                
                 't_registros.dt_reg Between DateAdd("m",-3,Date()) And Date()
                 'Format(DateSerial(Year(Date), Month(Date) - 3, 3), 'mm yyyy') and Format(date(),'yyyy-mm')
            End If
        End If
            
            'Debug.Print strWhere
            
        
        '***********************************************************************
        'Chop off the trailing " AND ", and use the string as the form's Filter.
        '***********************************************************************
        'See if the string has more than 5 characters (a trailng " AND ") to remove.
        lngLen = Len(strWhere) - 5
        If lngLen <= 0 Then     'Nah: there was nothing in the string.
            MsgBox "Nenhum critério foi informado", vbInformation, "Erro"
        Else                    'Yep: there is something there, so remove the " AND " at the end.
            strWhere = Left$(strWhere, lngLen)
            'For debugging, remove the leading quote on the next line. Prints to Immediate Window (Ctrl+G).
            'Debug.Print strWhere
            
            'Finally, apply the string as the form's Filter.
            Me.Filter = strWhere
            Me.FilterOn = True
        End If
    End Sub
    Silvio
    Silvio
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4753
    Registrado : 20/04/2011

    [Resolvido]VBA - Diferença entre meses - classificação Empty Re: [Resolvido]VBA - Diferença entre meses - classificação

    Mensagem  Silvio 5/1/2021, 12:42

    bom dia, se me permitem um pitaco..

    Em vez de:

    strWhere = strWhere & "Format(dt_reg, 'mm yyyy') between Format(DateSerial(Year(Date()), Month(Date()) - 3, 3),'mm yyyy') and Format(date(),'yyyy-mm') ORDER BY t_registros.dt_reg And "

    troque por..
    strWhere = strWhere & "Format(dt_reg, 'mm yyyy') between Format(DateSerial(Year(Date()), Month(Date()) - 3, 3),'mm yyyy') and Format(date(),'yyyy-mm') And ORDER BY t_registros.dt_reg "


    .................................................................................
    Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
    www.maximoaccess.com/t860-resolucao-de-topicos

    "Quase tudo é possível quando se tem determinação e força de vontade. Não desista tão rápido."

    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]VBA - Diferença entre meses - classificação Empty Update

    Mensagem  AndreyMinorelli 5/1/2021, 16:25

    Oi, Silvio!

    Coloquei o and antes do "ORDER BY", mas continuo com o erro de sintaxe (operador faltando).
    Essa string é aplicada no filtro do subform, será que ali não é possível utilizar order by, sort, etc?

    Abs.
    Silvio
    Silvio
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4753
    Registrado : 20/04/2011

    [Resolvido]VBA - Diferença entre meses - classificação Empty Re: [Resolvido]VBA - Diferença entre meses - classificação

    Mensagem  Silvio 5/1/2021, 18:08

    And ORDER BY t_registros.dt_reg ASC "

    DESC = decrescente
    ASC = crescente


    .................................................................................
    Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
    www.maximoaccess.com/t860-resolucao-de-topicos

    "Quase tudo é possível quando se tem determinação e força de vontade. Não desista tão rápido."

    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]VBA - Diferença entre meses - classificação Empty Update

    Mensagem  AndreyMinorelli 5/1/2021, 18:22

    ainda com o mesmo erro...

    Não sei se existe alguma forma de contornar esse filtro sem formatar as datas para trazer os registro dos últimos 3 meses. Acredito que seria a formatação que está fazendo com que os resultados venham fora de ordem.
    O pior é que o mais complexo deu certo, que é realizar esse filtro, mas uma simples ordenação eu não consigo fazer.

    Eu tentei inserir o "ORDER BY ... ASC" diretamente no campo de filtro do subform pra testar e o erro continua o mesmo.

    Se alguém tiver alguma ideia de chegar no mesmo resultado de outra forma eu também agradeço!
    avatar
    AndreyMinorelli
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]VBA - Diferença entre meses - classificação Empty Update

    Mensagem  AndreyMinorelli 5/1/2021, 22:19

    Pessoal, decobri!!!!

    O meu formulário estava trazendo os registros ordenados por ID, que é o padrão.
    O que eu fiz foi adicionar o código abaixo no procedimento ao abrir o formulário (pq ele automaticamente traz todos os registros ao abrir), e adicionar no final do procedimento que filtra o formulário.

    Código:

            Me.OrderBy = "dt_reg DESC"
            Me.OrderByOn = True
            Me.Refresh
    Silvio
    Silvio
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4753
    Registrado : 20/04/2011

    [Resolvido]VBA - Diferença entre meses - classificação Empty Re: [Resolvido]VBA - Diferença entre meses - classificação

    Mensagem  Silvio 6/1/2021, 11:13

    Show de bola.


    .................................................................................
    Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
    www.maximoaccess.com/t860-resolucao-de-topicos

    "Quase tudo é possível quando se tem determinação e força de vontade. Não desista tão rápido."

    AndreyMinorelli gosta desta mensagem


      Data/hora atual: 16/6/2021, 22:13