MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Funções de cálculo e de exibição de valores Data/Hora

    Jeferson de Paula
    Jeferson de Paula
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 361
    Registrado : 06/04/2013

    Funções de cálculo e de exibição de valores Data/Hora Empty Funções de cálculo e de exibição de valores Data/Hora

    Mensagem  Jeferson de Paula em 10/9/2013, 15:40

    Olá Pessoal,

    Estava eu garimpando algumas informações na internet sobre Data/Hora no access e achei uma documentação muito interessante no site da Microsoft e gostaria de compartilhar com vocês!

    Fonte: http://support.microsoft.com/kb/210604/pt-br

    Bons Estudos! Exclamation 

    Exibindo datas específicas

    Para exibir datas específicas, é possível usar a função DateSerial() para manipular partes de dia, mês e ano de uma data. Por exemplo, é possível usar as seguintes expressões na propriedade ControlSource de uma caixa de texto ou na janela Immediate para retornar às datas específicas:

    'O MÊS ATUAL
       DateSerial(Ano(Data()), Mês(Data()), 1)

    'O PRÓXIMO MÊS
       DateSerial(Ano(Data()), Mês(Data()) + 1, 1)

    'O ÚLTIMO DIA DO MÊS ATUAL
       DateSerial(Ano(Data()), Mês(Data()) + 1, 0)

    'O ÚLTIMO DIA DO PRÓXIMO MÊS
       DateSerial(Ano(Data()), Mês(Data()) + 2, 0)

    'O PRIMEIRO DIA DO MÊS ANTERIOR
       DateSerial(Ano(Data()), Mês(Data())-1,1)

    'O ÚLTIMO DIA DO MÊS ANTERIOR
       DateSerial(Ano(Data()), Mês(Data()),0)

    'O PRIMEIRO DIA DO TRIMENTRE ATUAL
       DateSerial(Ano(Data()), Int((Mês(Data()) - 1) / 3) * 3 + 1, 1)

    'O ÚLTIMO DIA TO TRIMENTRE ATUAL
       DateSerial(Ano(Data()), Int((Mês(Data()) - 1) / 3) * 3 + 4, 0)

    'O PRIMEIRO DIA DA SEMANA ATUAL (considerando que domingo = dia 1)
       Data() - DiaSem(Data()) + 1

    'O ÚLTIMO DIA DA SEMANA ATUAL
       Data() - DiaSem(Data()) + 7

    'O PRIMEIRO DIA DA SEMANA ATUAL (usando definições na caixa de diálogo Opções)
       Data() - DiaSem(Data()) + 1

    'O ÚLTIMO DIA DA SEMANA ATUAL
       Data() - DiaSem(Data(), 0) + 7

    Para obter mais informações sobre como calcular o ano fiscal ou mês fiscal, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês): 210249. Como obter o ano ou o mês fiscal de uma determinada data no Access 2000 CUIDADO: caso execute as etapas deste exemplo, você modificará o banco de dados de exemplo Northwind.mdb. Convém fazer backup do arquivo Northwind.mdb e seguir estas etapas em uma cópia do banco de dados.

    Calculando intervalos de tempo

    Devido ao valor de hora ficar armazenado como uma fração de um dia com 24 horas, é possível receber resultados de formatação incorretos ao tentar adicionar, subtrair, multiplicar ou dividir dados de hora maiores do que 24 horas.

    Por exemplo, caso tente encontrar o número de horas decorridas entre duas datas subtraindo os valores no Visual Basic, é possível receber um número incorreto. Como demonstração, digite o seguinte código na janela Imediato e perceba que será retornado um valor de 0:00 hora, e não o valor correto de 53:00 horas.

    Código:
       StartDate=#6/1/93 8:00AM#
       EndDate=#6/3/93 1:00PM#
       ?Format(EndDate-StartDate,"hh:mm")
    Para resolver problemas de formatação causados por valores de hora maiores do que 24 horas, é possível usar as funções Int() e CSng() no Visual Basic para separar um valor de hora calculado em variáveis diferentes para dias, horas, minutos e segundos. Por exemplo, é possível incluir o seguinte fragmento de código em uma função personalizada para criar variáveis de hora separadas:

    Código:
     '-------------------------------------------------------------------
     ' This sample code separates a time interval into seven variables for the following values: days, hours, minutes, seconds, total time in
     ' hours, total time in minutes, and total time in seconds. The interval argument is flexible; it can be a single value, an expression, or a field reference.
     '-------------------------------------------------------------------

    Dim totalhours As Long, totalminutes As Long, totalseconds As Long
    Dim days As Long, hours As Long, minutes As Long, seconds As Long
    Dim interval As Variant

    days = Int(CSng(interval))
    totalhours = Int(CSng(interval * 24))
    totalminutes = Int(CSng(interval * 1440))
    totalseconds = Int(CSng(interval * 86400))
    hours = totalhours Mod 24
    minutes = totalminutes Mod 60
    seconds = totalseconds Mod 60
    É possível usar as variáveis totalhours, totalminutes e totalseconds para exibir um valor de hora como sendo uma única unidade de tempo. As variáveis de dias, horas, minutos e segundos o habilitam para dividir um valor de hora em partes de tempo. Para exibir valores de hora em formatos diferentes, é possível concatenar estas variáveis conforme demonstrado nas seguintes funções de exemplo:

    • A função GetElapsedDays() calcula a hora decorrida entre dois valores de data/hora e exibe o resultado em dias.
    • A função GetElapsedTime() calcula a hora decorrida entre valores de tempo e exibe o resultado em dias, horas, minutos e segundos.
    • A função GetTimeCardTotal() soma um campo de valores de tempo em uma tabela e exibe o total em horas e minutos.

    Função de exemplo GetElapsedDays()

    Para criar a função GetElapsedDays(), execute as seguintes etapas:

    1.Abra o banco de dados de exemplo Northwind.mdb.
    2.Crie um módulo e digite a seguinte linha na seção Declarações caso ainda não esteja lá:

    Código:
    Option Explicit
    3.Digite a seguinte função:

    Código:
    Function GetElapsedDays (interval)
    Dim days As Long
        days = Int(CSng(interval))
        GetElapsedDays = days & " Days "
     End Function
    4.Para testar a função, crie uma nova consulta com base na tabela Pedidos.
    5.Na grade QBE, adicione os seguintes campos.

    Código:
    Campo: ShippedDate
    Apresenta: Verdadeiro

    Campo: OrderDate
    Apresenta: Verdadeiro

    Campo: ElapsedTime: GetElapsedDays([ShippedDate]-[OrderDate])
    Apresenta: Verdadeiro
    6.Execute a consulta. Observe que a coluna ElapsedTime exibe o número de dias entre o campo ShippedDate e o campo OrderDate para cada registro na tabela Pedidos.

    Função de exemplo GetElapsedTime()

    Para criar a função GetElapsedTime(), execute as seguintes etapas: 1. Crie uma nova tabela com a seguinte estrutura e salve como TimeLog.

    Código:
        Tabela: TimeLog
        -----------------------
        Nome do campo: Hora de início
        Tipo de dados: Data/Hora
        Formato: Data geral

        Nome do campo: Hora de término
        Tipo de dados: Data/Hora
        Formato: Data geral
    2.Exiba a tabela TimeLog no modo de exibição folha de dados, insira estes três registros e feche a tabela:

    Código:
        Hora de início                Hora de término
        --------------------------------------------
        5/10/95 16:57:00         5/15/95 2:38:00
        5/11/95 10:17:31       5/24/95 18:05:00
        5/18/95 9:16:43         5/19/95 17:03:00
    3.Crie um módulo e digite as seguintes linhas na seção Declarações:

    Código:
     Option Explicit
    4.Insira a seguinte função:

    Código:
    Function GetElapsedTime(interval)
    Dim totalhours As Long, totalminutes As Long, totalseconds As Long
    Dim days As Long, hours As Long, Minutes As Long, Seconds As Long

    days = Int(CSng(interval))
    totalhours = Int(CSng(interval * 24))
    totalminutes = Int(CSng(interval * 1440))
    totalseconds = Int(CSng(interval * 86400))
    hours = totalhours Mod 24
    Minutes = totalminutes Mod 60
    Seconds = totalseconds Mod 60
        GetElapsedTime = days & " Days " & hours & " Hours " & Minutes & " Minutes " & Seconds & " Seconds "
    End Function
    OBSERVAÇÃO: A função GetElapsedTime exige que você informe uma data e uma hora.

    5.Para testar a função, crie um novo relatório com base na tabela TimeLog, usando o Assistente de AutoRelatório.
    6.Exiba o relatório no modo Design.
    7.Adicione uma caixa de texto não acoplada à seção de detalhes da tabela TimeLog e defina suas propriedades da seguinte forma:

    Código:
        Caixa de texto
        ---------------
        Nome: ElapsedTime
        OrigemDoControle: =GetElapsedTime([Hora de término]-[Hora de início])
        Largura: 3 polegadas
    8.Visualize o relatório. Observe que cada registro exibe o tempo total decorrido em dias, horas, minutos e segundos.

    Função de amostra GetTimeCardTotal()

    Para criar a função GetTimeCardTotal(), execute as seguintes etapas:

    OBSERVAÇÃO: O código de exemplo neste artigo usa o Microsoft Data Access Objects. Para este código ser executado corretamente, é necessário referenciar a biblioteca de objetos Microsoft DAO 3.6. Para fazer isto, clique em Referências no menu Ferramentas no Editor do Visual Basic e verifique a caixa de seleção Microsoft DAO 3.6 Object Library está marcada.

    1.Crie uma nova tabela com a seguinte estrutura e salve-a como TimeCard.

    Código:
        Tabela: CartãoPonto
        -----------------------
        Nome do campo: Horas diárias
        Tipo de dados: Data/Hora
        Formato: Hora abreviada
    2.Exiba a tabela TimeCard no modo de exibição folha de dados, insira estes quatro registros e feche a tabela:

    Código:
        8:15
        7:37
        8:12
        8:03
    3.Crie um módulo e digite a seguinte linha na seção Declarações caso ainda não esteja lá:

    Código:
    Option Explicit
    4.Digite a seguinte função:

    Código:
    Function GetTimeCardTotal ()
    Dim db As DAO.Database, rs As DAO.Recordset
    Dim totalhours As Long, totalminutes As Long
    Dim days As Long, hours As Long, minutes As Long
    Dim interval As Variant, j As Integer

    Set db = dbengine.workspaces(0).databases(0)  Set rs = db.OpenRecordset("timecard")  interval = #12:00:00 AM#
    While Not rs.EOF
    interval = interval + rs![Daily hours]
    rs.MoveNext
    Wend  totalhours = Int(CSng(interval * 24))  totalminutes = Int(CSng(interval * 1440))  hours = totalhours Mod 24  minutes = totalminutes Mod 60   GetTimeCardTotal = totalhours & " hours and " & minutes & " minutes"
    End Function
    Para testar o procedimento, digite a seguinte linha na janela Imediata e pressione ENTER:

    Código:
     ?GetTimeCardTotal()
    Observe que a janela Immediate exibe 32 horas e 7 minutos.

    Este tópico o ajudou? Agradecer não custa nada e ainda nos motiva a continuar lhe ajudando. Então que tal dar um joinha Funções de cálculo e de exibição de valores Data/Hora 001_1810?


    .................................................................................
    Atenciosamente
    Aldo Jeferson de Paula
    Blog Support SQL Server
    Fórum Support SQL Server

    Quem nunca ouviu alguém falando mal do Microsoft®️ Access? Compartilhe suas experiências e conhecimentos, clique aqui e faça seu comentário!

    Tópicos Recomendáveis
    > Kit Geográfico 2013
    > Novo na Programação do Access?
    > Curso de Access/VBA Completo
    > Conceitos Básicos em T-SQL

      Data/hora atual: 25/11/2020, 09:05