VBA Tipp: Datum ins VBA-Datumsformat (SQL-Format) umwandeln

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Wenn als Bedingung beim Öffnen von Formularen, in SQL-Strings oder in Filter-Strings ein Datum verwendet wird, muss es im SQL-Format (amerikanisches Datumsformat) eingegeben werden. Da das Datum aber fast immer im deutschen Datumsformat als Text (Datentyp String) oder als Datum (Datentyp Date) vorliegt, muss es entsprechend umgewandelt werden.

Lösung

Das geht mit der folgenden Funktion, die in einem globalen Modul hinterlegt wird:

Public Function CDateSQL(ByVal Datumswert As Variant) As String
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Const AccessDateFmt As String = "\#mm\/dd\/yyyy\#"
 
   If IsDate(Datumswert) Then
      CDateSQL = Format$(CDate(Datumswert), AccessDateFmt)
   Else
      Err.Raise 13, , "Ungültiger Datumswert: " & Nz(Datumswert, "Null")
   End If
End Function

Aufruf

Beispiel 1: Einbau in einen SQL-String

   ... WHERE Bestelldatum = " & CDateSQL(MeinDatum) & " AND ...

Beispiel 2: Einbau in einen Filterstring

   Dim strFilter As String
 
   strFilter = "Bestelldatum = " & CDateSQL(MeinDatum)
   Me.Filter = strFilter
   Me.FilterOn = True

Beispiel 3: Verwendung in der DCount-Funktion (DomAnzahl)

   MsgBox DCount("*", "Bestellungen", _
                 "Bestelldatum Between " & CDateSQL("1.7.1996") & " And " & CDateSQL("22.7.1996"))

Beispiel 4: Formular nach Datum öffnen

   DoCmd.OpenForm "Bestellungen", , , "Bestelldatum = " & CDateSQL(MeinDatum)

Beispiel 5: In einem Recordset nach Datum suchen mit FindFirst

   Dim rs As DAO.Recordset
 
   Set rs = Me.RecordsetClone
 
   rs.FindFirst "Bestelldatum = " & CDateSQL(MeinDatum)
   Me.Bookmark = rs.Bookmark


Wiki hinweis.png

Hinweise:

• Der eingegebene Datumswert "MeinDatum" kann den Datentyp "String" (Text) oder "Date" (Datum) haben.
• Bei Eingabe eines ungültigen Datumswertes gibt die Funktion einen Leerstring zurück, und löst dadurch im aktuellen Code einen Laufzeitfehler aus.
• Wenn der Datumswert durch die Funktion Date() bereitgestellt wird, muss die Funktion CDateSQL() nicht verwendet werden, z.B.

   'entweder ohne CDateSQL-Funktion
   DoCmd.OpenReport "Bestellungen", acViewPreview, , "Lieferdatum >= Date() + 1"
 
   'oder mit CDateSQL-Funktion
   DoCmd.OpenReport "Bestellungen", acViewPreview, , "Lieferdatum >= " & CDateSQL(Date + 1)

Alternativ kann in VBA auch die Funktion BuildCriteria verwendet werden:

   DoCmd.OpenReport "Bestellungen", acViewPreview, , _
                    BuildCriteria("Lieferdatum", dbDate, "between " & "4.2" & " and " & #02/06/2018#)


Wikilinks

Weblinks


Wiki faq.png FAQ: Dieser Artikel gehört zu den "Häufig gestellten Fragen" (FAQ). Die Seite Access-FAQ bietet eine Übersicht aller FAQ-Artikel.