VBA Access - Formatando Data corretamente para o SQL - Wrong Date Formatting in SQL´s Code

Inline image 1
É preciso ter alguma compreensão de como os formatos de datas comportam-se no VBA.

Por exemplo, delimitar datas com o símbolo "#", independentemente das configurações regionais, o MS Access espera que essas datas estejam literalmente no formato americano, por exemplo, #12/31/1999#.

Para perceber isso acesse qualquer query que tenha um campo Data no modo Design. 

Na linha de Critério, sob o respectivo campo Data, filtre-o por uma data específica, e depois mude-o para o Modo SQL. Perceba que na estrutura Design você vê a data de acordo com as configurações locais (provavelmente Brasil (DD/MM/AAAA)), mas na instrução SQL ficará mm/dd/yyyy.

As cláusulas SQL nem sempre são evidentes:

DoCmd.OpenReport "BernardesReport", acViewPreview, , "InvoiceDate > #12/31/2000#"

Debug.Print DLookup("InvoiceID", "tblInvoices", "EntryDate = #6/30/1953#")

Let strSQL = "SELECT * FROM tblKPI WHERE KPIDate > #" & Format(Me.StartDate, "mm\/dd\/yyyy") & "#;"

Suponhamos que você utilize campos de data em muitas instruções SQL e que algumas delas tenham interação com bases de dados de outros países, como no caso de estar trabalhando em uma filial no Brasil. Neste caso a função abaixo lhe poupará bastante tempo.


Function SQLDate(varDate As Variant) As String      'Purpose:    Return a delimited string in the date format used natively by JET SQL.      'Argument:   A date/time value.      'Note:       Returns just the date format if the argument has no time component,      '                or a date/time format if it does.      'Author:     Allen Browne. allen@allenbrowne.com, June 2006.      

If IsDate(varDate) Then          

If DateValue(varDate) = varDate Then              

SQLDate = Format$(varDate, "\#mm\/dd\/yyyy\#")          

Else              

SQLDate = Format$(varDate, "\#mm\/dd\/yyyy hh\:nn\:ss\#")          

End If      

End If  

End Function


Tags: VBA, Access, SQL, Where, Condition,


Nenhum comentário:

Postar um comentário

diHITT - Notícias