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]Consulta retorna dia negativo

    avatar
    RodriguesChqao
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 118
    Registrado : 31/05/2016

    [Resolvido]Consulta retorna dia negativo Empty [Resolvido]Consulta retorna dia negativo

    Mensagem  RodriguesChqao 27/3/2017, 21:55

    Bom dia!

    Depois de inserir alguns dados no meu BD notei o seguinte erro com a consulta para calcular a diferença de datas.
    O estranho é que está acontecendo somente com alguns registros.

    Segue o problema:

    Dt_Validade = 2606/2017
    Dia de Hoje = 27/03/2017

    Fórmula para cálculo:
    Dias Restantes: DifData("yyyy";Agora();[Dt_Validade]) & " Ano(s)," & DifData("d";Mês(Agora());Mês([Dt_Validade])) & " Meses, " & DifData("d";Dia(Agora());Dia([Dt_Validade])) & " Dia(s)"

    O resultado deveria ser 0 ano(s), 3 meses e 1 Dia(s) e não 0 ano(s), 3 meses e -1 Dia(s)

    Gostaria de obter ajuda para solucionar o erro.

    obrigado
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7970
    Registrado : 15/03/2013

    [Resolvido]Consulta retorna dia negativo Empty Re: [Resolvido]Consulta retorna dia negativo

    Mensagem  Alvaro Teixeira 27/3/2017, 23:40

    Olá Rodrigues,
    O simples era calcular apenas o nº de dias para expirar.
    No caso que apresentou deveria apresentar 2 meses e 30 dias.

    Encontrei código abaixo na net que resolve o pretendido:
    Código:
    Private Sub Test167419023674()
        Debug.Print Join(MyDateDiff(#2/2/2010#, #1/1/2013#))
    End Sub

    Private Function MyDateDiff(d1 As Date, d2 As Date) As Variant
    '  Origem: https://access-programmers.co.uk/forums/showthread.php?t=250591
    '   returns the difference between two dates in an array where
    '   array element (0) = year, (1) = month and (2) = day
        Dim dy As Long
        Dim dm As Long
        Dim dd As Long
        Dim tmp As Date
        
        If d1 > d2 Then     'if first date is greater
            tmp = d1        'the swap them
            d1 = d2
            d2 = tmp
        End If
        
        dy = DateDiff("yyyy", d1, d2)   'calc years
        tmp = DateAdd("yyyy", dy, d1)   'get remainder
        dm = DateDiff("m", tmp, d2)     'calc months
        tmp = DateAdd("m", dm, tmp)     'get remainder
        dd = DateDiff("d", tmp, d2)     'calc days
        
        If dm < 0 Then                  'if month value is negative
            dy = dy - 1                 'calc one less year
            dm = 12 + dm                'and get remaining months
        End If
        
        If dd < 0 Then                  'if day value is negative
            dm = dm - 1                 'calc one less month
            dd = DaysLastMonth(d2) + dd 'and get remaining days
        End If
        
        MyDateDiff = Array(dy, dm, dd)
        
    End Function

    Private Function DaysLastMonth(d1 As Date) As Integer
    '   returns the number of days in the month prior to d1
        Dim FirstOfThisMonth As Date
        
        FirstOfThisMonth = DateSerial(Year(d1), Month(d1), 1) 'find the first
        DaysLastMonth = Day(FirstOfThisMonth - 1)             'find the day before
    End Function
    Abraço
    avatar
    RodriguesChqao
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 118
    Registrado : 31/05/2016

    [Resolvido]Consulta retorna dia negativo Empty Re: [Resolvido]Consulta retorna dia negativo

    Mensagem  RodriguesChqao 28/3/2017, 00:23

    Desde já agradeço mas não entendo quase nada de VBA e estou tentando aprender na medida das necessidades, então:

    Devo inserir o código em um módulo?

    Como chamar o módulo na consulta?

    Obrigado!
    avatar
    RodriguesChqao
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 118
    Registrado : 31/05/2016

    [Resolvido]Consulta retorna dia negativo Empty Re: [Resolvido]Consulta retorna dia negativo

    Mensagem  RodriguesChqao 28/3/2017, 00:35

    O problema é a consulta tempo.

    A linha de nome completo Rodrigues e zzz estão com o cálculo certo, mas a linha de nome zzz está errada

    Segue o bd, anexo.

    Obrigado
    Anexos
    [Resolvido]Consulta retorna dia negativo AttachmentCredencial_11_.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (249 Kb) Baixado 9 vez(es)
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7970
    Registrado : 15/03/2013

    [Resolvido]Consulta retorna dia negativo Empty Re: [Resolvido]Consulta retorna dia negativo

    Mensagem  Alvaro Teixeira 29/3/2017, 15:43

    Olá Rodrigues, é isto que pretende:
    [Resolvido]Consulta retorna dia negativo 018

    Para isso altere a consulta no modo de estrutura SQL e colo código abaixo:
    Código:
    SELECT Tbl_Credencial.PG, Tbl_Credencial.ARMA, Tbl_Credencial.[Nome Completo], Tbl_Credencial.Dt_Exp, Tbl_Credencial.Dt_Validade, IIf(Date()>=([Dt_Validade]),0,DateDiff("d",Now(),[Dt_Validade])) AS [Dias Restantes], IIf(Date()>=([Dt_Validade]),0,AnoMesDia(Date(),[Dt_Validade])) AS [Tempo Restante], IIf(Date()>=([Dt_Validade]),"Credencial Vencida","Credencial em vigor") AS Situação
    FROM Tbl_Credencial
    ORDER BY Tbl_Credencial.Dt_Validade;

    Utilizei o módulo que estava na sua base de dados de exemplo.

    Abraço
    avatar
    RodriguesChqao
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 118
    Registrado : 31/05/2016

    [Resolvido]Consulta retorna dia negativo Empty Re: [Resolvido]Consulta retorna dia negativo

    Mensagem  RodriguesChqao 29/3/2017, 17:49

    Boa tarde!

    Resolve perfeitamente. Já testei na minha consulta e ficou perfeito.

    Se não for pedir demais vc poderia explicar a instrução sql na parte dos IIf e Date

    obrigado.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7970
    Registrado : 15/03/2013

    [Resolvido]Consulta retorna dia negativo Empty Re: [Resolvido]Consulta retorna dia negativo

    Mensagem  Alvaro Teixeira 30/3/2017, 16:43

    Olá Rodrigo,
    A instrução IIf(Date()>=([Dt_Validade]),0,...) é para mostrar 0, nos que já estão vencidos.
    Apenas para isso.
    Não testei, mas se retirar essa parte deve mostrar o tempo decorrido a negativo.
    Abraço
    avatar
    RodriguesChqao
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 118
    Registrado : 31/05/2016

    [Resolvido]Consulta retorna dia negativo Empty Re: [Resolvido]Consulta retorna dia negativo

    Mensagem  RodriguesChqao 30/3/2017, 17:34

    obrigado!
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7970
    Registrado : 15/03/2013

    [Resolvido]Consulta retorna dia negativo Empty Re: [Resolvido]Consulta retorna dia negativo

    Mensagem  Alvaro Teixeira 30/3/2017, 18:07

    cheers

    Conteúdo patrocinado


    [Resolvido]Consulta retorna dia negativo Empty Re: [Resolvido]Consulta retorna dia negativo

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 18/10/2024, 06:44