{"id":55000521,"date":"2026-08-01T00:00:00","date_gmt":"2026-10-18T13:21:50","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=521"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"SQL_Server_datetime_und_datetime2_in_Access","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/","title":{"rendered":"SQL Server: datetime und datetime2 in Access"},"content":{"rendered":"<p><b>Wir verkn&uuml;pfen eine Tabelle des SQL Servers mit Access, &ouml;ffnen den Direktbereich und lesen mit <b>DLookup<\/b> ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung <b>Typen unvertr&auml;glich<\/b>. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f&uuml;r Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.<\/b><\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Beitrags laufen gegen die SQL Server-Datenbank <b>DateTimeTest<\/b>. Das Skript <b>DateTimeTest.sql<\/b> legt sie auf einer lokalen Instanz an, in unserem Fall <b>.SQLEXPRESS<\/b>.<\/p>\n<p>Es l&ouml;scht eine vorhandene Datenbank gleichen Namens und erzeugt sie neu.<\/p>\n<p>Die Datenbank enth&auml;lt zwei Tabellen und eine Sicht. Die Tabelle <b>tblZeitstempel<\/b> hat neben <b>ZeitstempelID<\/b> und <b>Bezeichnung<\/b> je eine Spalte f&uuml;r jeden Datentyp, den wir untersuchen wollen:<\/p>\n<ul>\n<li><b>ZDate:<\/b> Datentyp <b>date<\/b><\/li>\n<li><b>ZSmallDateTime:<\/b> Datentyp <b>smalldatetime<\/b><\/li>\n<li><b>ZDateTime:<\/b> Datentyp <b>datetime<\/b><\/li>\n<li><b>ZDateTime2_0:<\/b> Datentyp <b>datetime2(0)<\/b><\/li>\n<li><b>ZDateTime2_3:<\/b> Datentyp <b>datetime2(3)<\/b><\/li>\n<li><b>ZDateTime2_7:<\/b> Datentyp <b>datetime2(7)<\/b><\/li>\n<\/ul>\n<p>Sie enth&auml;lt drei Zeilen. Die erste enth&auml;lt den 2. Oktober 2026 um 8:30:15 Uhr. Bei <b>ZDate<\/b> fehlt die Uhrzeit, <b>ZSmallDateTime<\/b> steht auf 8:30:00, weil der Typ nur Minuten speichert. <b>ZDateTime<\/b> und <b>ZDateTime2_3<\/b> tragen die Sekundenbruchteile <b>.123<\/b>, <b>ZDateTime2_7<\/b> die Sekundenbruchteile <b>.1234567<\/b>.<\/p>\n<p>Die zweite Zeile hat den 15. September 2026 um 11:30:05 Uhr, die dritte den 1. Januar 2026 ohne Uhrzeit. Das Ergebnis in SQL Server Management Studio steht im Ergebnisraster (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_521_001.png\" alt=\"Die Tabelle tblZeitstempel im Ergebnisraster von SSMS\" width=\"700\" height=\"57,81092\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die Tabelle tblZeitstempel im Ergebnisraster von SSMS<\/span><\/b><\/p>\n<p>Die Tabelle <b>tblSchreibtest<\/b> hat die vier Spalten <b>ZDateTime<\/b>, <b>ZDateTime2_0<\/b>, <b>ZDateTime2_3<\/b> und <b>ZDateTime2_7<\/b>. Wir verwenden sie f&uuml;r die Schreibversuche. Die Sicht <b>vwZeitstempel<\/b> liefert dieselben Daten wie <b>tblZeitstempel<\/b>, wandelt aber die drei <b>datetime2<\/b>-Spalten mit <b>CAST<\/b> in <b>datetime<\/b> um.<\/p>\n<p>Das Frontend <b>SQLServer_DateTimeUndDateTime2InAccess.accdb<\/b> enth&auml;lt die Tabellen als Verkn&uuml;pfungen.<\/p>\n<p>Die Verkn&uuml;pfungen mit dem Zusatz <b>Normal<\/b> im Namen verwenden die Einstellung, die wir weiter unten als Konstellation 3 beschreiben, die &uuml;brigen die Standardeinstellung. Die VBA-Prozeduren stehen im Modul <b>mdlDateTimeBeispiele<\/b>, ein Testmodul pr&uuml;ft die Aussagen dieses Beitrags.<\/p>\n<h2>Datums- und Zeittypen im SQL Server<\/h2>\n<p>F&uuml;r Datum und Uhrzeit bietet der SQL Server vier Datentypen an, die wir hier betrachten:<\/p>\n<ul>\n<li><b>date:<\/b> nur das Datum, vom 1. Januar 0001 bis zum 31. Dezember 9999<\/li>\n<li><b>smalldatetime:<\/b> Datum und Uhrzeit auf die Minute genau, vom 1. Januar 1900 bis zum 6. Juni 2079<\/li>\n<li><b>datetime:<\/b> Datum und Uhrzeit, vom 1. Januar 1753 bis zum 31. Dezember 9999, in Schritten von etwa 3 Millisekunden<\/li>\n<li><b>datetime2(n):<\/b> Datum und Uhrzeit, vom 1. Januar 0001 bis zum 31. Dezember 9999, mit <b>n<\/b> Nachkommastellen f&uuml;r die Sekunden, wobei <b>n<\/b> zwischen 0 und 7 liegt<\/li>\n<\/ul>\n<p>Den Typ <b>datetime<\/b> gibt es seit den fr&uuml;hen Versionen des SQL Servers, <b>datetime2<\/b> ist neuer. Er hat einen gr&ouml;&szlig;eren Bereich, eine h&ouml;here Genauigkeit und entspricht dem SQL-Standard. Die Dokumentation von Microsoft zu <b>datetime<\/b> empfiehlt f&uuml;r neue Arbeiten die Typen <b>date<\/b>, <b>time<\/b>, <b>datetime2<\/b> und <b>datetimeoffset<\/b>.<\/p>\n<p>F&uuml;r Access sieht das anders aus. Hier kommt es darauf an, wie Access die Typen einbindet, wenn wir eine Tabelle verkn&uuml;pfen.<\/p>\n<h2>Wie Access die Typen einbindet<\/h2>\n<p>Access kennt f&uuml;r Datum und Uhrzeit zwei Felddatentypen. <b>Datum\/Uhrzeit<\/b> speichert den Wert intern als Zahl vom Typ <b>Double<\/b>.<\/p>\n<p>Der Teil vor dem Komma ist die Zahl der Tage seit dem 30. Dezember 1899, der Teil hinter dem Komma der Anteil des Tages. Daneben gibt es seit Access 2021 und Access in Microsoft 365 den Typ <b>Datum\/Uhrzeit, erweitert<\/b>, der Sekundenbruchteile mit bis zu sieben Stellen speichert. Er ist nicht mit &auml;lteren Access-Versionen kompatibel.<\/p>\n<p>Der erweiterte Typ wurde vor allem f&uuml;r die Anbindung des SQL Servers eingef&uuml;hrt. Er bildet den Typ <b>datetime2<\/b> nach. Ob Access ihn beim Verkn&uuml;pfen verwendet, steuert eine Option der aktuellen Datenbank. Wir finden sie in den Access-Optionen unter <b>Aktuelle Datenbank<\/b> im Bereich <b>Datentypunterst&uuml;tzungs-Optionen<\/b>, sie hei&szlig;t <b>Unterst&uuml;tzung des erweiterten Datentyps &#8220;Date Time Extended&#8221; (DateTime2) f&uuml;r mit ODBC verkn&uuml;pfte\/importierte Tabellen<\/b> (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_521_002.png\" alt=\"Die Option f&uuml;r datetime2 in den Access-Optionen\" width=\"700\" height=\"113,9535\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Die Option f&uuml;r datetime2 in den Access-Optionen<\/span><\/b><\/p>\n<p>Die Option wirkt beim Verkn&uuml;pfen oder Importieren. Eine bestehende Verkn&uuml;pfung &auml;ndert sich nicht, wenn wir die Option sp&auml;ter umschalten, bis wir sie neu verkn&uuml;pfen. In unseren Tests verhielt sich eine neue Datenbank, in der wir die Option nie ge&auml;ndert hatten, wie bei eingeschalteter Option.<\/p>\n<p>Was daraus folgt, sehen wir an den Verkn&uuml;pfungen mit <b>DAO<\/b>. Die Funktion <b>FeldTypen<\/b> liefert zu jedem Feld einer Tabelle den DAO-Datentyp (siehe Listing 1). Der Wert 8 steht f&uuml;r <b>Datum\/Uhrzeit<\/b>, der Wert 26 f&uuml;r <b>Datum\/Uhrzeit, erweitert<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>FeldTypen(strTabelle<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n    <span style=\"color:blue;\">Dim <\/span>fld<span style=\"color:blue;\"> As <\/span>DAO.Field\r\n    <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n    For Each fld In db.TableDefs(strTabelle).Fields\r\n        FeldTypen = FeldTypen & fld.Name & \"=\" & fld.Type & \" \"\r\n    <span style=\"color:blue;\">Next<\/span> fld\r\n    FeldTypen = <span style=\"color:blue;\">Trim<\/span>(FeldTypen)\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: FeldTypen liefert die Felder einer Tabelle mit dem DAO-Datentyp<\/span><\/b><\/p>\n<p>F&uuml;r die Standardverkn&uuml;pfung <b>dbo_tblZeitstempel<\/b> erhalten wir im Direktbereich diese Zeile, hier zur besseren Lesbarkeit umgebrochen:<\/p>\n<pre>FeldTypen(\"dbo_tblZeitstempel\")\r\nZeitstempelID=4 Bezeichnung=10 ZDate=8\r\nZSmallDateTime=8 ZDateTime=8\r\nZDateTime2_0=26 ZDateTime2_3=26\r\nZDateTime2_7=26<\/pre>\n<p>Die Typen <b>date<\/b>, <b>smalldatetime<\/b> und <b>datetime<\/b> kommen als <b>Datum\/Uhrzeit<\/b> an, alle drei <b>datetime2<\/b>-Felder als <b>Datum\/Uhrzeit, erweitert<\/b>.<\/p>\n<p>Die Tabelle im Entwurf zeigt denselben Unterschied (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_521_003.png\" alt=\"Die Felder der verkn&uuml;pften Tabelle im Entwurf mit den Datentypen\" width=\"500\" height=\"296,5879\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die Felder der verkn&uuml;pften Tabelle im Entwurf mit den Datentypen<\/span><\/b><\/p>\n<p>Damit ergeben sich drei Konstellationen, die wir nacheinander durchgehen: <b>datetime<\/b>, <b>smalldatetime<\/b> und <b>date<\/b> in Access, <b>datetime2<\/b> bei eingeschalteter Option und <b>datetime2<\/b> bei ausgeschalteter Option.<\/p>\n<h2>Konstellation 1: datetime, smalldatetime und date<\/h2>\n<p>Die Typen <b>date<\/b>, <b>smalldatetime<\/b> und <b>datetime<\/b> verhalten sich in Access wie ein normales Datum\/Uhrzeit-Feld. Das gilt in unseren Tests unabh&auml;ngig von der Option. Ein Aufruf von <b>DLookup<\/b> auf das Feld <b>ZDateTime<\/b> liefert den Wert wie bei einer Access-Tabelle:<\/p>\n<pre>DLookup(\"ZDateTime\",\"dbo_tblZeitstempel\")\r\n02.10.2026 08:30:15<\/pre>\n<p>Der Wert in der Tabelle lautet 8:30:15.123 Uhr. Access zeigt die Sekundenbruchteile nicht an. <b>Format<\/b>, <b>CDate<\/b>, <b>Nz<\/b> und <b>DateAdd<\/b> arbeiten mit dem Feld wie bei einer Access-Tabelle.<\/p>\n<p>Bei <b>ZDate<\/b> und <b>ZSmallDateTime<\/b> gelten in unseren Tests dieselben Ergebnisse. Der Aufruf ohne Kriterium liest den ersten Datensatz in der Reihenfolge der Tabelle.<\/p>\n<p>Wer in einer Datenbank, auf die vor allem Access zugreift, keine Sekundenbruchteile braucht, kommt mit diesen Typen ohne Einstellungen aus.<\/p>\n<p>Die Einschr&auml;nkungen des Typs <b>datetime<\/b> sind die Schritte von etwa 3 Millisekunden und der Bereich ab dem Jahr 1753.<\/p>\n<h2>Konstellation 2: datetime2 bei eingeschalteter Option<\/h2>\n<p>Bei eingeschalteter Option, in unseren Tests die Standardeinstellung, kommt <b>datetime2<\/b> als <b>Datum\/Uhrzeit, erweitert<\/b> an. Hier treten die Fehler auf. Wir gehen sie der Reihe nach durch, beginnend mit der Funktion aus der Einleitung.<\/p>\n<p>Der Aufruf von <b>DLookup<\/b> auf ein <b>datetime2<\/b>-Feld liefert einen Fehler:<\/p>\n<pre>DLookup(\"ZDateTime2_3\",\"dbo_tblZeitstempel\")<\/pre>\n<p>Es erscheint die Meldung <b>Laufzeitfehler 13: Typen unvertr&auml;glich<\/b> (siehe Bild 4). Der Aufruf liefert einen Wert, den Access nicht ausgeben kann. Auch die Zuweisung an eine <b>Date<\/b>-Variable oder an eine <b>String<\/b>-Variable scheitert mit dem Fehler 13. Dasselbe gilt in unseren Tests f&uuml;r <b>DMax<\/b>, <b>DMin<\/b> und <b>DFirst<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_521_004.png\" alt=\"Der Aufruf von DLookup auf ein datetime2-Feld meldet Typen unvertr&auml;glich\" width=\"349,9999\" height=\"219,2607\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Der Aufruf von DLookup auf ein datetime2-Feld meldet Typen unvertr&auml;glich<\/span><\/b><\/p>\n<p>Eine Verwendung der Dom&auml;nenfunktionen ist trotzdem m&ouml;glich. Die Funktion <b>DCount<\/b> z&auml;hlt Datens&auml;tze auch dann, wenn das Kriterium ein <b>datetime2<\/b>-Feld enth&auml;lt. Der folgende Aufruf z&auml;hlt die Zeilen vom 2. Oktober 2026 und liefert 1:<\/p>\n<pre>DCount(\"*\",\"dbo_tblZeitstempel\", _\r\n  \"ZDateTime2_3&gt;=#10\/2\/2026# AND \" & _\r\n  \"ZDateTime2_3&lt;#10\/3\/2026#\")<\/pre>\n<p>Eine Datumsbedingung auf einem <b>datetime2<\/b>-Feld funktioniert also, nur der Wert des Feldes l&auml;sst sich nicht lesen.<\/p>\n<h2>Recordset und CDate bei datetime2<\/h2>\n<p>Mit einem Recordset l&auml;sst sich der Feldwert lesen. Er kommt allerdings als Text an. Die folgende Abfrage liest das Feld <b>ZDateTime2_7<\/b> der ersten Zeile:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rst = CurrentDb.OpenRecordset( _\r\n  \"SELECT ZDateTime2_7 \" & _\r\n  \"FROM dbo_tblZeitstempel \" & _\r\n  \"WHERE ZeitstempelID=1\", _\r\n  dbOpenSnapshot, dbSeeChanges)\r\nTypeName(rst.Fields(0).Value)\r\nString\r\nrst.Fields(0).Value\r\n10\/02\/2026 08:30:15.1234567<\/pre>\n<p>Der Text hat in unseren Tests mit deutschen Regionaleinstellungen das amerikanische Format Monat, Tag, Jahr, dazu sieben Nachkommastellen f&uuml;r die Sekunden.<\/p>\n<p>Gemeint ist hier der 2. Oktober 2026. Die Funktion <b>CDate<\/b> kann diesen Text mit den Nachkommastellen nicht in ein Datum umwandeln und l&ouml;st den Fehler 13 aus.<\/p>\n<p>Wer die Nachkommastellen mit <b>Left<\/b> abschneidet, bekommt einen Wert, aber einen falschen. <b>CDate(Left(Text, 19))<\/b> liest bei deutschen Regionaleinstellungen den Text <b>10\/02\/2026 08:30:15<\/b> als 10. Februar 2026 statt als 2. Oktober 2026 (siehe Bild 5). Access gibt dazu keine Meldung aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_521_005.png\" alt=\"CDate liest den Text des Feldes mit vertauschtem Tag und Monat\" width=\"700\" height=\"68,62744\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: CDate liest den Text des Feldes mit vertauschtem Tag und Monat<\/span><\/b><\/p>\n<p>Beim zweiten Datum der Tabelle, dem 15. September, liefert derselbe Aufruf das richtige Datum, weil es keinen 15. Monat gibt und <b>CDate<\/b> den Text dann als Monat und Tag liest.<\/p>\n<p>Die Vertauschung tritt deshalb bei Tagen bis zum zw&ouml;lften eines Monats auf, au&szlig;er wenn Tag und Monat &uuml;bereinstimmen. Access meldet dazu nichts.<\/p>\n<h2>Abfragen auf datetime2-Felder<\/h2>\n<p>In Abfragen verh&auml;lt sich das Feld je nach Funktion unterschiedlich. Mehrere Funktionen funktionieren: <b>Year<\/b>, <b>Month<\/b>, <b>Hour<\/b> und <b>DateAdd<\/b>.<\/p>\n<p>Die folgende Abfrage liefert 2026, 10 und 8:<\/p>\n<pre>SELECT Year(ZDateTime2_3), Month(ZDateTime2_3),\r\n  Hour(ZDateTime2_3)\r\nFROM dbo_tblZeitstempel\r\nWHERE ZeitstempelID=1;<\/pre>\n<p>Andere scheitern mit dem Fehler 3071 (<b>Dieser Ausdruck wurde falsch eingegeben, oder er ist zu komplex, um ausgewertet zu werden<\/b>), n&auml;mlich <b>CDate<\/b>, <b>DateValue<\/b>, <b>Format<\/b>, <b>CStr<\/b>, <b>Left<\/b> und <b>Nz<\/b>.<\/p>\n<p>Die Rechnung mit <b>+ 1<\/b> meldet den Fehler 3464 (<b>Datentypenkonflikt in Kriterienausdruck<\/b>). In einer Gruppierung bedeutet das: <b>Format<\/b> im <b>GROUP BY<\/b> funktioniert nicht, <b>Year<\/b> und <b>Month<\/b> dagegen schon. Die folgende Abfrage liefert drei Zeilen, eine f&uuml;r jeden Monat der Beispieldaten:<\/p>\n<pre>SELECT Year(ZDateTime2_3)*100+Month(ZDateTime2_3) AS M\r\nFROM dbo_tblZeitstempel\r\nGROUP BY Year(ZDateTime2_3)*100+Month(ZDateTime2_3);<\/pre>\n<p>Auch <b>ORDER BY<\/b> auf das Feld und der Vergleich mit Datumsliteralen in <b>WHERE<\/b> funktionieren. <b>Max<\/b> und <b>Min<\/b> liefern das Ergebnis als Text im bekannten Format.<\/p>\n<p>Bei <b>Max<\/b> sind die Sekundenbruchteile auf null gesetzt: Statt <b>8:30:15.123<\/b> steht <b>8:30:15.0000000<\/b> im Ergebnis, hier f&uuml;r die Spalte <b>ZDateTime2_3<\/b>.<\/p>\n<h2>Schreiben in datetime2-Felder<\/h2>\n<p>Auch beim Schreiben gibt es Unterschiede. Die Funktion <b>ZeitstempelAnlegen<\/b> legt in einer Tabelle einen Datensatz an und tr&auml;gt in alle vier Felder denselben <b>Date<\/b>-Wert ein (siehe Listing 2).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>ZeitstempelAnlegen(strTabelle<span style=\"color:blue;\"> As String<\/span>, datWert<span style=\"color:blue;\"> As Date<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n    <span style=\"color:blue;\">Set<\/span> rst = CurrentDb.OpenRecordset(strTabelle, dbOpenDynaset, dbSeeChanges)\r\n    rst.Add<span style=\"color:blue;\">New<\/span>\r\n    rst!ZDateTime = datWert\r\n    rst!ZDateTime2_0 = datWert\r\n    rst!ZDateTime2_3 = datWert\r\n    rst!ZDateTime2_7 = datWert\r\n    rst.Update\r\n    rst.Bookmark = rst.LastModified\r\n    ZeitstempelAnlegen = rst!SchreibtestID\r\n    rst.Close\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: ZeitstempelAnlegen tr&auml;gt einen Datumswert in alle Felder ein<\/span><\/b><\/p>\n<p>Wir rufen sie f&uuml;r die Standardverkn&uuml;pfung <b>dbo_tblSchreibtest<\/b> mit dem 2. Oktober 2026, 8:30:15 Uhr und 123 Millisekunden auf. Im Server stehen danach diese Werte:<\/p>\n<ul>\n<li><b>ZDateTime:<\/b> <b>2026-10-02 08:30:15.123<\/b><\/li>\n<li><b>ZDateTime2_0:<\/b> <b>2026-10-02 08:30:15<\/b><\/li>\n<li><b>ZDateTime2_3:<\/b> <b>2026-10-02 08:30:15.000<\/b><\/li>\n<li><b>ZDateTime2_7:<\/b> <b>2026-10-02 08:30:15.0000000<\/b><\/li>\n<\/ul>\n<p>Die Millisekunden gehen bei den <b>datetime2<\/b>-Feldern verloren, bei <b>datetime<\/b> bleiben sie erhalten. Wer Sekundenbruchteile in ein <b>datetime2<\/b>-Feld schreiben will, kann in einer Abfrage die nicht dokumentierte Funktion <b>NowExtended<\/b> verwenden.<\/p>\n<p>Mit <b>INSERT INTO &#8230; VALUES (NowExtended())<\/b> erhielt das Feld <b>ZDateTime2_7<\/b> in unserem Test einen Wert mit sieben Nachkommastellen. Ein <b>INSERT<\/b> mit einem Datumsliteral wie <b>#10\/2\/2026 08:30:15#<\/b> schreibt in allen vier Feldern den Wert mit ganzen Sekunden, wie er im Literal steht. Das Literal enth&auml;lt keine Sekundenbruchteile.<\/p>\n<h2>Auswege bei eingeschalteter Option<\/h2>\n<p>Wenn die Tabellen bereits <b>datetime2<\/b> enthalten und wir die Option nicht umstellen wollen, gibt es mehrere M&ouml;glichkeiten. Die erste liest den Text aus einem Recordset und wandelt ihn selbst in ein Datum um.<\/p>\n<p>Die Funktion <b>ErweitertZuDatum<\/b> erwartet den Text im Format des erweiterten Typs und liefert ein <b>Date<\/b>. Sie gibt ein Datum unver&auml;ndert zur&uuml;ck und akzeptiert auch <b>Null<\/b> (siehe Listing 3).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>ErweitertZuDatum(varWert<span style=\"color:blue;\"> As Variant<\/span>)<span style=\"color:blue;\"> As Variant<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strWert<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>datTag<span style=\"color:blue;\"> As Date<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>datZeit<span style=\"color:blue;\"> As Date<\/span>\r\n    <span style=\"color:blue;\">If <\/span>IsNull(varWert)<span style=\"color:blue;\"> Then<\/span>\r\n        ErweitertZuDatum = Null\r\n    <span style=\"color:blue;\">Else<\/span>If VarType(varWert) = vbDate Then\r\n        ErweitertZuDatum = varWert\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        strWert = CStr(varWert)\r\n        datTag = DateSerial(CInt(<span style=\"color:blue;\">Mid<\/span>(strWert, 7, 4)), _\r\n            CInt(<span style=\"color:blue;\">Left<\/span>(strWert, 2)), CInt(<span style=\"color:blue;\">Mid<\/span>(strWert, 4, 2)))\r\n        datZeit = TimeSerial(CInt(<span style=\"color:blue;\">Mid<\/span>(strWert, 12, 2)), _\r\n            CInt(<span style=\"color:blue;\">Mid<\/span>(strWert, 15, 2)), CInt(<span style=\"color:blue;\">Mid<\/span>(strWert, 18, 2)))\r\n        ErweitertZuDatum = datTag + datZeit\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: ErweitertZuDatum wandelt den Text eines erweiterten Datums um<\/span><\/b><\/p>\n<p>Die Funktion schneidet die einzelnen Teile aus dem Text und setzt sie mit <b>DateSerial<\/b> und <b>TimeSerial<\/b> zusammen. Die Sekundenbruchteile entfallen, der Wert ist auf die Sekunde genau und unabh&auml;ngig von den Regionaleinstellungen. Der Aufruf mit dem Text aus dem Abschnitt <b>Recordset und CDate bei datetime2<\/b> liefert den 2. Oktober 2026, 8:30:15 Uhr.<\/p>\n<p>Die zweite M&ouml;glichkeit ist eine Abfrage, die nur Funktionen verwendet, die mit dem Feld funktionieren. Die Abfrage setzt aus <b>Year<\/b>, <b>Month<\/b> und <b>Day<\/b> ein Datum und aus <b>Hour<\/b>, <b>Minute<\/b> und <b>Second<\/b> eine Uhrzeit zusammen:<\/p>\n<pre>SELECT DateSerial(Year(ZDateTime2_3),\r\n  Month(ZDateTime2_3), Day(ZDateTime2_3)) +\r\n  TimeSerial(Hour(ZDateTime2_3),\r\n  Minute(ZDateTime2_3), Second(ZDateTime2_3))\r\nFROM dbo_tblZeitstempel;<\/pre>\n<p>Das Ergebnis ist ein normales Datum\/Uhrzeit, mit dem <b>Format<\/b> und die &uuml;brigen Funktionen arbeiten. Die Abfrage l&auml;sst sich einmal als gespeicherte Abfrage anlegen.<\/p>\n<p>Die dritte M&ouml;glichkeit liegt im SQL Server. Die Sicht <b>vwZeitstempel<\/b> wandelt die <b>datetime2<\/b>-Spalten mit <b>CAST<\/b> in <b>datetime<\/b> um. Verkn&uuml;pft Access die Sicht, kommen alle Spalten als <b>Datum\/Uhrzeit<\/b> an, auch bei eingeschalteter Option.<\/p>\n<p><b>DLookup<\/b> und <b>Format<\/b> funktionieren dann wie in Konstellation 1. Die Umwandlung hat Nachteile: Der Typ <b>datetime<\/b> hat Schritte von etwa 3 Millisekunden und beginnt erst im Jahr 1753, und die Sicht meldet einen Fehler, sobald ein Wert davor liegt.<\/p>\n<p>Die vierte M&ouml;glichkeit sind Pass-Through-Abfragen. Sie reichen den Text unver&auml;ndert an den Server weiter und liefern das Ergebnis, wie im ersten Teil der Reihe, <b>T-SQL, Teil 1: Von Jet-SQL zu T-SQL<\/b>, beschrieben. In unserem Test kam ein <b>datetime2<\/b>-Feld &uuml;ber eine Pass-Through-Abfrage als normales Datum an.<\/p>\n<p>Alternativ richten wir die Anbindung so ein, dass der erweiterte Typ nicht entsteht, wie die n&auml;chste Konstellation zeigt.<\/p>\n<h2>Konstellation 3: datetime2 bei ausgeschalteter Option<\/h2>\n<p>Schalten wir die Option aus und verkn&uuml;pfen die Tabelle neu, kommen die <b>datetime2<\/b>-Felder als <b>Datum\/Uhrzeit<\/b> an. Die Funktion <b>FeldTypen<\/b> liefert f&uuml;r die Verkn&uuml;pfung <b>dbo_tblZeitstempelNormal<\/b> bei allen sechs Datumsfeldern den Typ 8.<\/p>\n<p>Die beschriebenen Fehler traten in unseren Tests nicht auf. <b>DLookup<\/b> liefert ein Datum, und <b>CDate<\/b>, <b>Nz<\/b> und <b>Format<\/b>, auch im <b>GROUP BY<\/b>, funktionieren.<\/p>\n<p>Zwei Einschr&auml;nkungen bleiben. Die erste betrifft das Lesen: Ein Feld vom Typ <b>datetime2(7)<\/b> liefert Access nur auf die Millisekunde genau.<\/p>\n<p>Hat das Feld in der Tabelle den Wert .1234567, steht in Access .123.<\/p>\n<p>Die zweite betrifft das Schreiben. Ein <b>Date<\/b>-Wert mit Sekundenbruchteilen in einem Feld vom Typ <b>datetime2(0)<\/b> l&auml;sst sich nicht speichern. Access meldet den Fehler 3146 mit dem Text <b>ODBC-Aufruf fehlgeschlagen<\/b>. In der Auflistung <b>DBEngine.Errors<\/b> steht die genauere Meldung des ODBC-Treibers:<\/p>\n<pre>Datetime field overflow. Fractional second\r\nprecision exceeds the scale specified in\r\nthe parameter binding.<\/pre>\n<p>Das Feld <b>datetime2(0)<\/b> speichert keine Sekundenbruchteile, und Access &uuml;bergibt sie trotzdem. Die Meldung stammt vom ODBC-Treiber, nicht vom Server. Ein <b>Date<\/b>-Wert mit ganzen Sekunden, wie ihn <b>Now<\/b> liefert, wird ohne Fehler gespeichert. In <b>datetime2(3)<\/b> und <b>datetime2(7)<\/b> funktioniert die Eingabe mit Millisekunden ohne Fehler.<\/p>\n<p>Die Funktion <b>NowExtended<\/b> liefert bei ausgeschalteter Option keinen Sekundenbruchteil mehr, die Felder erhalten in unserem Test den Wert mit <b>.0000000<\/b>.<\/p>\n<p>F&uuml;r Spalten, in die Access Zeitstempel mit Millisekunden schreibt, eignet sich daher <b>datetime2(3)<\/b> besser als <b>datetime2(0)<\/b>.<\/p>\n<h2>Option umstellen und neu verkn&uuml;pfen<\/h2>\n<p>In der Oberfl&auml;che schalten wir die Option in den Access-Optionen unter <b>Aktuelle Datenbank<\/b> um. Danach m&uuml;ssen wir die betroffenen Tabellen neu verkn&uuml;pfen, entweder im <b>Tabellenverkn&uuml;pfungs-Manager<\/b> oder durch L&ouml;schen und erneutes Anlegen der Verkn&uuml;pfung.<\/p>\n<p>Wie wir Tabellen per VBA verkn&uuml;pfen, haben wir im Beitrag <b>SQL Server: Tabellen per VBA verkn&uuml;pfen (www.vbentwickler.de\/485)<\/b> gezeigt.<\/p>\n<p>Auch die Option l&auml;sst sich per VBA umstellen. Sie ist eine Eigenschaft der Datenbank mit dem Namen <b>Use DateTime2 for linking and importing data<\/b>. Die Prozedur <b>DateTime2OptionSetzen<\/b> setzt sie und legt sie an, wenn sie in der Datenbank noch nicht vorhanden ist (siehe Listing 4).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>DateTime2OptionSetzen(blnErweitert<span style=\"color:blue;\"> As Boolean<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n    <span style=\"color:blue;\">Dim <\/span>prp<span style=\"color:blue;\"> As <\/span>DAO.Property\r\n    <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n    On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n    db.Properties(cstrOption) = blnErweitert\r\n    <span style=\"color:blue;\">If <\/span>Err.Number &lt;&gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n        Err.Clear\r\n        <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n        <span style=\"color:blue;\">Set<\/span> prp = db.CreateProperty(cstrOption, dbBoolean, blnErweitert)\r\n        db.Properties.Append prp\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: DateTime2OptionSetzen schaltet die Unterst&uuml;tzung von datetime2 ein oder aus<\/span><\/b><\/p>\n<p>Die Konstante <b>cstrOption<\/b> mit dem Namen der Eigenschaft und die Konstante <b>cstrVerbindung<\/b> mit der Verbindungszeichenfolge stehen am Anfang des Moduls.<\/p>\n<p>Beim Anlegen der Eigenschaft verwenden wir den Datentyp <b>dbBoolean<\/b>. In einer Datenbank, in der die Option &uuml;ber die Oberfl&auml;che umgeschaltet worden war, fanden wir sie mit dem Typ <b>Long<\/b>.<\/p>\n<p>Die Zuweisung an die vorhandene Eigenschaft funktioniert dann ohne &Auml;nderung.<\/p>\n<p>Nach dem &Auml;ndern der Eigenschaft holen wir mit <b>CurrentDb<\/b> ein neues Datenbankobjekt. Mit einem vorher geholten Objekt trat in unseren Tests der Fehler 3420 auf.<\/p>\n<p>Die Prozedur <b>TabelleVerknuepfen<\/b> verkn&uuml;pft eine Tabelle oder Sicht und setzt dazu zuerst die Option. Sie entfernt eine vorhandene Verkn&uuml;pfung gleichen Namens und legt sie neu an (siehe Listing 5). Die Option beh&auml;lt danach den zuletzt gesetzten Wert und gilt f&uuml;r alle weiteren Verkn&uuml;pfungen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TabelleVerknuepfen(strName<span style=\"color:blue;\"> As String<\/span>, strQuelle<span style=\"color:blue;\"> As String<\/span>, blnErweitert<span style=\"color:blue;\"> As Boolean<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n    <span style=\"color:blue;\">Dim <\/span>tdf<span style=\"color:blue;\"> As <\/span>DAO.TableDef\r\n    DateTime2OptionSetzen blnErweitert\r\n    <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n    On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n    db.TableDefs.Delete strName\r\n    <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n    <span style=\"color:blue;\">Set<\/span> tdf = db.CreateTableDef(strName)\r\n    tdf.Connect = cstrVerbindung\r\n    tdf.SourceTableName = strQuelle\r\n    db.TableDefs.Append tdf\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: TabelleVerknuepfen verkn&uuml;pft eine Tabelle mit oder ohne erweiterten Datentyp<\/span><\/b><\/p>\n<p>Der Aufruf <b>TabelleVerknuepfen &#8220;dbo_tblZeitstempelNormal&#8221;, &#8220;dbo.tblZeitstempel&#8221;, False<\/b> erzeugt die Verkn&uuml;pfung mit den Typen aus Konstellation 3.<\/p>\n<p>In unseren Tests stellte auch <b>RefreshLink<\/b> nach dem Umschalten der Option die Verkn&uuml;pfung auf den passenden Typ um, und zwar in beide Richtungen.<\/p>\n<h2>Welche Konstellation wann<\/h2>\n<p>Die Konstellationen lassen sich so zusammenfassen:<\/p>\n<ul>\n<li><b>date, smalldatetime und datetime:<\/b> laufen in unseren Tests unabh&auml;ngig von der Option ohne Fehler und ohne besondere Ma&szlig;nahmen<\/li>\n<li><b>datetime2 mit eingeschalteter Option:<\/b> <b>DLookup<\/b> und andere Dom&auml;nenfunktionen scheitern mit dem Fehler 13, <b>CDate<\/b>, <b>Format<\/b> und <b>Nz<\/b> in Abfragen mit dem Fehler 3071, die Rechnung mit <b>+ 1<\/b> mit dem Fehler 3464, Sekundenbruchteile gehen beim Schreiben verloren<\/li>\n<li><b>datetime2 mit ausgeschalteter Option:<\/b> die getesteten Funktionen laufen, das Lesen k&uuml;rzt auf Millisekunden, ein <b>Date<\/b>-Wert mit Sekundenbruchteilen in <b>datetime2(0)<\/b> scheitert<\/li>\n<\/ul>\n<p>F&uuml;r die Praxis ergeben sich diese Empfehlungen:<\/p>\n<ul>\n<li>Reine Datumswerte speichern wir als <b>date<\/b>.<\/li>\n<li>Zeitstempel f&uuml;r ein Frontend, das nur mit Access arbeitet, speichern wir als <b>datetime<\/b>.<\/li>\n<li>Zeitstempel, die auch andere Anwendungen nutzen oder die feiner als eine Millisekunde sein m&uuml;ssen, speichern wir als <b>datetime2<\/b>. In Access schalten wir dann die Option aus und verkn&uuml;pfen neu. Access liest die Werte dann nur auf die Millisekunde genau, die feinere Aufl&ouml;sung nutzen nur andere Anwendungen. Wenn Access Werte mit Millisekunden schreibt, verwenden wir <b>datetime2(3)<\/b>.<\/li>\n<li>Wer bereits <b>datetime2<\/b>-Spalten mit eingeschalteter Option hat, nutzt f&uuml;r Abfragen <b>ErweitertZuDatum<\/b>, die Funktionen <b>Year<\/b> und <b>Month<\/b>, eine Sicht mit <b>CAST<\/b> oder Pass-Through-Abfragen.<\/li>\n<\/ul>\n<p>Bei der Migration einer Access-Datenbank mit dem SQL Server Migration Assistant l&auml;sst sich in den Optionen einstellen, dass Datumsfelder als <b>datetime<\/b> statt als <b>datetime2<\/b> angelegt werden.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Wie sich ein Datumsfeld des SQL Servers in Access verh&auml;lt, h&auml;ngt vom Datentyp und von einer Option ab.<\/p>\n<p><b>date<\/b>, <b>smalldatetime<\/b> und <b>datetime<\/b> verhalten sich in Access unauff&auml;llig. <b>datetime2<\/b> kommt bei eingeschalteter Option als <b>Datum\/Uhrzeit, erweitert<\/b> an, und dann scheitern <b>DLookup<\/b> und viele Funktionen, oder sie liefern ein falsches Datum, wie <b>CDate<\/b> mit vertauschtem Tag und Monat.<\/p>\n<p>Bei ausgeschalteter Option und nach dem erneuten Verkn&uuml;pfen verh&auml;lt sich auch <b>datetime2<\/b> bis auf zwei Einschr&auml;nkungen, die Millisekunden beim Lesen und <b>datetime2(0)<\/b> beim Schreiben, wie ein normales Datumsfeld. Die Option l&auml;sst sich in der Oberfl&auml;che und per VBA umstellen.<\/p>\n<p>Wie sich der Datentyp <b>Datum\/Uhrzeit, erweitert<\/b> in einer reinen Access-Datenbank verh&auml;lt, beschreibt der Beitrag <b>Probleme mit dem Datentyp Datum\/Uhrzeit erweitert<\/b>.<\/p>\n<p>Wie wir mit T-SQL aus Access auf den SQL Server zugreifen und welche Unterschiede zwischen Access-SQL und T-SQL bestehen, zeigt der erste Teil der Reihe, <b>T-SQL, Teil 1: Von Jet-SQL zu T-SQL<\/b>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wir verkn&uuml;pfen eine Tabelle des SQL Servers mit Access, &ouml;ffnen den Direktbereich und lesen mit DLookup ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung Typen unvertr&auml;glich. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f&uuml;r Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662026,66042026,44000006],"tags":[],"yst_prominent_words":[],"class_list":["post-55000521","post","type-post","status-publish","format-standard","hentry","category-662026","category-66042026","category-SQL_Server_und_Co"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"Wir verkn\u00fcpfen eine Tabelle des SQL Servers mit Access, \u00f6ffnen den Direktbereich und lesen mit DLookup ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung Typen unvertr\u00e4glich. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f\u00fcr Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Andr\u00e9 Minhorst\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"SQL Server: datetime und datetime2 in Access - Visual Basic Entwickler\" \/>\n\t\t<meta property=\"og:description\" content=\"Wir verkn\u00fcpfen eine Tabelle des SQL Servers mit Access, \u00f6ffnen den Direktbereich und lesen mit DLookup ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung Typen unvertr\u00e4glich. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f\u00fcr Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-18T13:21:50+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"-001-11-30T00:00:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"SQL Server: datetime und datetime2 in Access - Visual Basic Entwickler\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Wir verkn\u00fcpfen eine Tabelle des SQL Servers mit Access, \u00f6ffnen den Direktbereich und lesen mit DLookup ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung Typen unvertr\u00e4glich. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f\u00fcr Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#blogposting\",\"name\":\"SQL Server: datetime und datetime2 in Access - Visual Basic Entwickler\",\"headline\":\"SQL Server: datetime und datetime2 in Access\",\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"..\\\/fileadmin\\\/_temp_\\\/2026_04\\\/pic_521_001.png\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#articleImage\"},\"datePublished\":\"2026-08-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"inLanguage\":\"de-DE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#webpage\"},\"articleSection\":\"2026, 4\\\/2026, SQL Server und Co.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/#listItem\",\"name\":\"2026\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/#listItem\",\"position\":2,\"name\":\"2026\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/4\\\/2026\\\/#listItem\",\"name\":\"4\\\/2026\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/4\\\/2026\\\/#listItem\",\"position\":3,\"name\":\"4\\\/2026\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/4\\\/2026\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#listItem\",\"name\":\"SQL Server: datetime und datetime2 in Access\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/#listItem\",\"name\":\"2026\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#listItem\",\"position\":4,\"name\":\"SQL Server: datetime und datetime2 in Access\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/4\\\/2026\\\/#listItem\",\"name\":\"4\\\/2026\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/cropped-header_vbe-1.png\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#organizationLogo\",\"width\":664,\"height\":225},\"image\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Andr\\u00e9 Minhorst\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#webpage\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/\",\"name\":\"SQL Server: datetime und datetime2 in Access - Visual Basic Entwickler\",\"description\":\"Wir verkn\\u00fcpfen eine Tabelle des SQL Servers mit Access, \\u00f6ffnen den Direktbereich und lesen mit DLookup ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung Typen unvertr\\u00e4glich. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f\\u00fcr Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/SQL_Server_datetime_und_datetime2_in_Access\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"datePublished\":\"2026-08-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"SQL Server: datetime und datetime2 in Access - Visual Basic Entwickler","description":"Wir verkn\u00fcpfen eine Tabelle des SQL Servers mit Access, \u00f6ffnen den Direktbereich und lesen mit DLookup ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung Typen unvertr\u00e4glich. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f\u00fcr Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.","canonical_url":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#blogposting","name":"SQL Server: datetime und datetime2 in Access - Visual Basic Entwickler","headline":"SQL Server: datetime und datetime2 in Access","author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"},"image":{"@type":"ImageObject","url":"..\/fileadmin\/_temp_\/2026_04\/pic_521_001.png","@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#articleImage"},"datePublished":"2026-08-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00","inLanguage":"de-DE","mainEntityOfPage":{"@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#webpage"},"isPartOf":{"@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#webpage"},"articleSection":"2026, 4\/2026, SQL Server und Co."},{"@type":"BreadcrumbList","@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/#listItem","position":1,"name":"Home","item":"https:\/\/vbentwickler.de\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/#listItem","name":"2026"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/#listItem","position":2,"name":"2026","item":"https:\/\/vbentwickler.de\/category\/2026\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/#listItem","name":"4\/2026"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/#listItem","position":3,"name":"4\/2026","item":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#listItem","name":"SQL Server: datetime und datetime2 in Access"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/#listItem","name":"2026"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#listItem","position":4,"name":"SQL Server: datetime und datetime2 in Access","previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/#listItem","name":"4\/2026"}}]},{"@type":"Organization","@id":"https:\/\/vbentwickler.de\/#organization","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","url":"https:\/\/vbentwickler.de\/","logo":{"@type":"ImageObject","url":"https:\/\/vbentwickler.de\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#organizationLogo","width":664,"height":225},"image":{"@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author","url":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","width":96,"height":96,"caption":"Andr\u00e9 Minhorst"}},{"@type":"WebPage","@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#webpage","url":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/","name":"SQL Server: datetime und datetime2 in Access - Visual Basic Entwickler","description":"Wir verkn\u00fcpfen eine Tabelle des SQL Servers mit Access, \u00f6ffnen den Direktbereich und lesen mit DLookup ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung Typen unvertr\u00e4glich. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f\u00fcr Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/vbentwickler.de\/#website"},"breadcrumb":{"@id":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/#breadcrumblist"},"author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"creator":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"datePublished":"2026-08-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00"},{"@type":"WebSite","@id":"https:\/\/vbentwickler.de\/#website","url":"https:\/\/vbentwickler.de\/","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","inLanguage":"de-DE","publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","og:type":"article","og:title":"SQL Server: datetime und datetime2 in Access - Visual Basic Entwickler","og:description":"Wir verkn\u00fcpfen eine Tabelle des SQL Servers mit Access, \u00f6ffnen den Direktbereich und lesen mit DLookup ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung Typen unvertr\u00e4glich. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f\u00fcr Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.","og:url":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/","og:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","og:image:secure_url":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","article:published_time":"2026-10-18T13:21:50+00:00","article:modified_time":"-001-11-30T00:00:00+00:00","twitter:card":"summary_large_image","twitter:title":"SQL Server: datetime und datetime2 in Access - Visual Basic Entwickler","twitter:description":"Wir verkn\u00fcpfen eine Tabelle des SQL Servers mit Access, \u00f6ffnen den Direktbereich und lesen mit DLookup ein Datum aus der ersten Zeile. Bei einem Feld liefert der Aufruf den Wert, bei einem anderen scheitert derselbe Aufruf mit der Meldung Typen unvertr\u00e4glich. Beide Felder enthalten ein Datum mit Uhrzeit. Der Unterschied liegt im Datentyp: Der SQL Server kennt mehrere Datentypen f\u00fcr Datum und Uhrzeit, und Access bindet sie je nach Einstellung unterschiedlich ein. Welche Konstellationen ohne Probleme laufen, welche Fehler auftreten und wie wir die Anbindung einrichten, zeigt dieser Beitrag.","twitter:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png"},"aioseo_meta_data":{"post_id":"55000521","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2026-10-18 14:16:31","updated":"2026-10-18 14:16:31","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2026\/\" title=\"2026\">2026<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/\" title=\"4\/2026\">4\/2026<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tSQL Server: datetime und datetime2 in Access\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/vbentwickler.de\/"},{"label":"2026","link":"https:\/\/vbentwickler.de\/category\/2026\/"},{"label":"4\/2026","link":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/"},{"label":"SQL Server: datetime und datetime2 in Access","link":"https:\/\/vbentwickler.de\/SQL_Server_datetime_und_datetime2_in_Access\/"}],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000521"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000521\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000521"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}