É 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:
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.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") & "#;"
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