Você está na página 1de 6

Deutsch English

O tipo de dados de data no VBA e no Access


Idioma:

Casa por Philipp Stiefel , publicado originalmente: 29/11/2017, atualizado pela última vez em 01/08/2019

Über mich

MS Access

Acesso e e-mail

Acesso-Cliente-
Servidor

mySQL & Access

Visual Basic
para Aplicações

ASP

Despejos
aleatórios de
sabedoria Baseado em uma foto de Estée Janssens , usada aqui sob licença CC0
duvidosa
 
Transferências
Em geral, estamos muito familiarizados com as datas. Lidamos com eles o tempo todo na vida real, bem
Dicas do trabalhamos com datas em bancos de dados Access e programação VBA?
Windows

links Muito, na verdade!

Impressum / Embora as datas no Access e no VBA pareçam simples e diretas à primeira vista, na verdade existem alg
Contato desenvolvimento do Access lutando com datas quase todos os dias em fóruns relacionados ao Access. - V
Última atualização: 2022 - como evitar problemas comuns ao trabalhar com datas no Access e no VBA.
10 - 29

Introdução e Noções Básicas


Há um tipo de dados Data/Hora dedicado no Access e um tipo de dados Data correspondente no VBA. A
armazenadas nesse tipo de dados.

Um equívoco muito comum é a ideia de que você pode adicionar um campo a uma tabela do Access, esc
do campo para qualquer formato que exiba uma data sem hora (por exemplo, “ data abreviada ”) , par

Isso não funciona!

Uma coluna Data/Hora sempre armazena data e hora. Definir o formato -Propriedade de uma colu
são exibidos para você, não afeta como os dados são realmente armazenados no banco de dados. E
data, mas também armazenará a hora. - Você precisa estar ciente disso ou terá uma surpresa desa

Armazenamento interno

Enquanto estamos nisso, vamos dar uma olhada em como o VBA e o tipo de dados Data/Hora de acesso
dados Date (/Time) é apenas um invólucro muito fino em torno do tipo de dados Double .

Double é um tipo de dados de ponto flutuante de 8 bytes e pode armazenar pelo menos 15 dígitos signif
do escopo deste artigo. No entanto, há uma coisa sobre números de ponto flutuante que você deve esta
flutuante ou a uma coluna de banco de dados, o valor armazenado pode estar extremamente próximo d

Os dados DateTime são armazenados no tipo Double de maneira simples, mas muito eficaz. A parte inte
representam a fração de um dia, portanto, a hora do dia. Números negativos representam datas anterio

Um valor duplo de 1,5 representa a Data/Hora 31/12/1899 12:00 PM . E a hora atual (18/06/2017 15:32

Você pode usar a função de conversão de tipo CDbl para converter explicitamente um tipo Date em um
Double em uma data. Esta conversão é sem perdas. Você não usará nenhuma informação ao converter e

Public Sub TestDateConversion () Dim myDate As Date Dim myDouble As Double myDouble = CDbl (
 

O exemplo acima usa a função Now - para recuperar a data e hora atuais. Ele é imediatamente convert
representações de texto das variáveis, dependendo de seu tipo. O valor interno, no entanto, é exatame

O tipo de dados Date específico não adiciona muito ao seu núcleo Double. Seu principal benefício é a ex
ganha seu verdadeiro significado. Além disso, uma data ao ser exibida ou convertida em uma string usar

As funções CDbl e CDate nesse exemplo não são realmente necessárias. Uma conversão implícita entre
código. Prefiro digitar as funções de conversão para deixar a intenção do código mais clara.

Funções de data e hora do VBA

Existem algumas funções internas relacionadas a Data/Hora no VBA.DateTime -Module. Se você não con
(pressione [F2] no VBA-Editor) e dê uma olhada nas funções disponíveis.

Uma palavra sobre aritmética de datas. A função DateAdd pode ser usada para adicionar um intervalo (p
qualquer número de dias a qualquer data. Mas por causa da representação interna no tipo Double, você

Esta adição simples é certamente mais barata (= tem melhor desempenho) do que uma chamada de fun
operação com mais clareza. Se você quiser adicionar meses ou anos, precisará dessa função de qualque
adicionar para obter o resultado desejado.

Se você quiser subtrair um intervalo de qualquer data, basta usar um número negativo na função DateA
acima também funciona.

A função DateDiff é muito útil para obter a diferença de intervalo entre duas datas. Existem várias outr
definitivamente deveria dar uma olhada.

Após esta longa introdução, vamos dar uma olhada em alguns problemas comuns com datas em VBA e Ac

Critérios de Data nas Consultas - Lembre-se: É Data e Hora, se


Normalmente, você deseja comparar valores de data sem hora nas consultas. Ao tentar isso, você encon
presença do tempo.

Imagine que você criou uma tabela com um DateTime -Field nela. Agora você deseja filtrar os dados na
simples.

Você cria uma nova consulta e insere a data desejada como critério. - Mas o que aconteceu agora? Falta

Quando você presta muita atenção aos dados da tabela, a causa se torna óbvia rapidamente. O registro

Os dados exibidos para os demais registros na tabela e também nos critérios de consulta sugerem que e
Date usado para exibir a data na tabela não mostrará valores de hora para 00:00:00. Da mesma forma,
automaticamente. Mas ainda assim, ele será usado para comparar os dados da tabela com o critério.

A formatação dos dados na tabela com o formato Short Date não alterará esse comportamento. Isso só p

A solução para qualquer consulta de data baseada em dia é usar uma expressão de critérios para filtrar
dia após a data de término desejada.

O delimitador para literais de data/hora no Access/Jet-SQL é o sinal de hash (#). Portanto, a expressão
esta:
>=#23.08.2017# E <#24.08.2017#

Eu usei o formato de data alemão aqui, você deve digitar a data de acordo com suas configurações regi

Como você pode ver na captura de tela, todos os registros esperados são retornados pela consulta agora

Não use o operador BETWEEN em vez de >= e <. Isso é igual a >= e < = e incluirá 00:00 horas do dia segu

Meu exemplo acima foi sobre como consultar os dados de um único dia. Mas tudo o que foi dito acima s
mesmo um ano.

Aplicação de valores somente de data em uma coluna de tabel


Como dito antes, definir um formato somente de data para uma coluna de data em uma tabela não gara

A única opção para impor a entrada apenas de datas - ou seja, datas com hora 00:00:00 - é uma Regra d

Para colunas que não permitem valores NULL ( Obrigatório = Sim), existem várias expressões de Regra d
que permitem valores nulos. O valor Null resultará em um erro na maioria das expressões de regra de va

Aqui está uma expressão de regra de validação que você pode usar para impor valores somente de data

0 = Hora ( [DateValueCol] ) + Minuto ( [DateValueCol] ) + Segundo ( [DateValueCol]

Aqui é inserida a propriedade Regra de Validação de uma coluna Data/Hora no Access Table Designer.

Criando consultas SQL com critérios de data/hora no VBA


Os valores de data precisam ser formatados corretamente para incorporação no SQL-String de uma cons

Se você incorporar um valor de data em uma string SQL no VBA, a data precisará ser convertida em sua
para converter implicitamente uma data em uma string. Este formato é baseado no formato de data qu
de Controle do Windows.

Se você definiu suas configurações regionais para os Estados Unidos, seu formato de data será MM/DD/A
formato de data será DD.MM.AAAA.

Ao converter datas de e para strings no VBA, o ambiente de tempo de execução também usará seu form
uma string, desde que a string de data esteja no formato esperado.

O Jet-/Ace-Database-Engine, no entanto, é mais rigoroso quanto às datas. Ele só reconhecerá strings de


internacional (AAAA-MM-DD).

Agora, se você estiver nos Estados Unidos, pode ser preguiçoso e simplesmente ignorar todo esse proble
absolutamente não deveria! - Se você fizer isso, seu aplicativo será interrompido assim que alguém o es
computador.

Para lidar com esse problema, recomendo formatar explicitamente qualquer valor de data no ISO-Date-
fortemente o formato ISO para reduzir a ambigüidade visual.

Para obter a formatação desejada, use a função Formatar para sua data. A função format retornará a d

Dim sql As String sql = "SELECT * " & _ " FROM aTable " & _ " WHERE DateValue >= #" & Fo

Você se lembra do sinal de hash como delimitador para literais de data/hora no Access/Jet-SQL? No Que
vezes. Ao escrever SQL Strings em VBA , é sua tarefa adicioná-los.

E quanto ao tempo em consultas SQL?

Se você deseja explicitamente incluir o tempo em seus critérios de consulta SQL, isso é menos problem
adicional para seu valor de data/hora, onde nn é o espaço reservado para minutos. Isso resultará em um
Database-Engine.

Dim sql As String sql = "SELECT * " & _ " FROM Table1 " & _ " WHERE DateTimeValue >= #"

Datas em um ambiente internacional


Você pode se perguntar como lidar com datas se os usuários de seu aplicativo estiverem em países difer

Existe uma regra simples que pode evitar muitos problemas: menos é mais!

O VBA e o Access usarão automaticamente as configurações regionais para exibir e analisar os valores de
entrada de dados de data e exibir, menos problemas haverá em computadores com configurações de loc

Use formatos predefinidos em vez de formatos personalizados fixos

Se você estiver nos EUA e definir o formato de exibição de qualquer coluna de data ou campo de formu
exatamente o mesmo que defini-lo para o formato predefinido denominado “Data abreviada” .

Agora, se um usuário em outro país (por exemplo, Alemanha) com outro formato de data em seu compu
serão exibidos como “MM/DD/AAAA”. - Isso é muito confuso para quem não está acostumado com esse f

Mas se você tiver usado o formato nomeado “Data abreviada”, a data será exibida como “DD.MM.AAAA”

E o assunto é ainda pior do que parece à primeira vista. Qualquer data que o usuário inserir neste camp
Regionais do Windows, não de acordo com o formato explícito que você definiu. No exemplo acima, o u
reconhecida corretamente pelo Access/VBA, mesmo que a data seja exibida no formato “MM/DD/AAAA”
Sempre use formatos de data e hora predefinidos e nomeados em vez de strings de formato pe
usuário de seus aplicativos.

O mesmo vale para a Time em um cenário internacional. Embora a hora seja exibida na maioria (todas?
exibida como 12 horas com um marcador AM/PM adicionado ou pode ser exibida como 24 horas Tempo.
de tempo ou usar apenas formatos de tempo nomeados (por exemplo, “Tempo curto”), você e seus usuá

Quando usar formatos de data explícitos?

Você deve usar formatação explícita apenas para fins de relatórios ou troca de dados onde houver diret
especificação de arquivo de dados que defina o formato de data.

Em relatórios impressos (ou PDF), a formatação da data deve corresponder às expectativas do público-a
Você pode usar a propriedade Format -Property dos controles de relatório para definir o formato de saí
explicitamente uma formatação de 12h AM/PM adicionando o componente de formato de relógio “AM/P
longa (por exemplo, nomes de dia e mês) para relatórios ou se quiser gerar a data formatada para vário
data com a API do Windows .

Se seu aplicativo precisar importar ou exportar dados de data/hora de ou para arquivos de texto, você
arquivos de texto. A especificação deve determinar um formato de data a ser usado nesses arquivos. Ao
explicitamente (ou analisar) a data de acordo com esta especificação.

No Access, você pode definir o formato de data para importações/exportações de arquivos de texto e sa

Se você estiver exportando dados de data/hora para um formato de arquivo que tenha tipos de dados d
aconselhável manter suas mãos longe e exportar o tipo de dados de data sem qualquer formatação.

Máscaras de entrada de dados para datas


Geralmente, não gosto de máscaras de entrada rígidas para entrada de dados. Se seu aplicativo do Acce
suportáveis. No entanto, assim que você deseja acomodar o usuário usando diferentes formatos de data

Uma máscara de entrada no Access é bastante estática. Se você definir uma máscara de entrada de dat
formato de data divergente. Embora surpreendentemente isso não cause muito dano ao mudar de DD.M
máscara, obviamente tem efeitos mais irritantes quando o formato de data preferido do usuário é AAAA

Aconselho você a aplicar minha regra de menos é mais mais uma vez e evitar o uso de máscaras de entr
o código em seu aplicativo que ajusta as máscaras de entrada para corresponder ao formato de data da

Embrulhar
Há muitos aspectos ao lidar com dados de data e hora em aplicativos do Microsoft Access. Felizmente, a
fornecidas no Access e no VBA. Você só precisa saber quando e como usar as ferramentas disponíveis.

Nunca imaginei que este artigo fosse tão longo como agora. Espero que seu tamanho seja justificado po
robusto e versátil de data e hora em suas aplicações.

Compartilhe este artigo:

Assine minha newsletter

Your first name Your email address *


SE INS

Eu nunca vou compartilhar seu e-mail com ninguém. Você pode cancelar a inscrição a qualquer moment
Esta lista de e-mail está hospedada no Mailchimp nos Estados Unidos. Veja nossa política de privacidade

Benefícios da subscrição da newsletter

© 1999 - 2022 por Philipp Stiefel - Política de Privacidade

Você também pode gostar