Die Data Access Objects (DAO) LastUpdated-Eigenschaft gibt falsche Datums- und Uhrzeitangaben in der Microsoft Access-Datenbank zurück.


Erweitert: Erfordert Expertencodierung, Interoperabilität und Mehrbenutzerkenntnisse.Dieser Artikel gilt nur für eine Microsoft Access-Datenbank (.mdb).

Problembeschreibung


Die Eigenschaft Data Access Objects (DAO) LastUpdated gibt falsche Datums- und Uhrzeitangaben für Microsoft Access-Formulare, -Berichte, -Makros und -Module zurück.

Ursache


Microsoft Access benachrichtigt das Microsoft Jet-Datenbankmodul nicht über die Änderung von Access-spezifischen Objekten (Formulare, Berichte, Makros und Module); Daher wird die DateUpdate-Spalte in der MSysObjects-Tabelle nie auf das richtige Datum und die richtige Uhrzeit aktualisiert. Das gleiche Verhalten gilt für Microsoft Access 2007, das die Microsoft Access-Datenbankmodul verwendet.

Status


Microsoft hat bestätigt, dass dies ein Problem in den Microsoft-Produkten ist, die am Anfang dieses Artikels aufgeführt sind.

Weitere Informationen


Die von DER DAO bereitgestellte LastUpdated-Eigenschaft gibt das richtige Datum/Uhrzeit für Datenbankmodulobjekte (Tabellen, Abfragen und Beziehungen) zurück, gibt jedoch nur das Erstellungsdatum zurück, nicht das datum der letzten Änderung für Microsoft Access-spezifische Objekte (Formulare, Berichte, Makros und Module). Vor Microsoft Access 2000 verwendete Microsoft Access eine Jet-Datenbankdatei (.mdb), um sowohl Datenbankobjekte (Tabellen, Abfragen und Beziehungen) als auch die Microsoft Access-spezifischen Objekte (Formulare, Berichte, Makros und Module) zu speichern. Microsoft Access hat seine spezifischen Objekte in Jet-Systemtabellen gespeichert, insbesondere in den Tabellen MSysObjects und MSysModules (oder MSysModules2). Die DateUpdate-Spalte in der MSysObjects-Tabelle ist für das Speichern des letzten Änderungsdatums eines Objekts verantwortlich und ist die Spalte, die die DAO LastUpdated-Eigenschaft verwendet, um das letzte Änderungsdatum eines Objekts zurückzugeben. Wenn ein Benutzer ein Objekt in früheren Versionen geändert und gespeichert hat, hat Microsoft Access das Jet-Datenbankmodul darüber informiert, dass das Objekt geändert wurde, und Jet hat die Spalte DateUpdate auf das aktuelle Datum und die aktuelle Uhrzeit aktualisiert. Microsoft Access 2000 führte Access-Projektdateien (.adp) ein, die die Möglichkeit haben, eine direkte Verbindung mit Microsoft SQL Server-Datenbanken herzustellen, ohne das Jet-Datenbankmodul zu verwenden. Da ADP-Dateien nicht das Jet-Datenbankmodul (oder das Access-Datenbankmodul) verwenden, konnte Access nicht dasselbe Speicherformat verwenden, das zuvor in Jet-Datenbanken für Access-spezifische Objekte verwendet wurde. Sie musste in einem neuen OLE-Dokumentspeicherformat gespeichert werden, auf das sowohl in Jet-Datenbanken als auch in Access-Projekten zugegriffen werden kann. Wenn der Benutzer zunächst ein neues Microsoft Access-spezifisches Objekt erstellt, z. B. ein Formular, gibt das Datenbankmodul immer noch das aktuelle Datum und die aktuelle Uhrzeit in die Spalten DateCreate und DateUpdate in der Tabelle MSysObjects ein. Wenn der Benutzer das Objekt jedoch ändert und speichert, benachrichtigt Microsoft Access das Datenbankmodul nicht. Daher bleibt die DateUpdate-Spalte immer gleich. Darüber hinaus haben Sie möglicherweise bemerkt, dass das Datenbankfenster (in Versionen vor Access 2007) und der Navigationsbereich in Access 2007 oder Access 2010 das richtige Datum und die richtige Uhrzeit für die letzte Änderung eines Objekts anzeigen. Dies liegt daran, dass Microsoft Access einen eigenen internen Mechanismus zum Speichern des erstellten Datums und des geänderten Datums verwendet, unabhängig vom Datenbankmodul. Leider macht Microsoft Access diese Informationen in seinem Objektmodell nicht verfügbar. Daher gibt es keine programmgesteuerte Möglichkeit, zu diesen Informationen in Microsoft Access zu gelangen.

Schritte zum Reproduzieren des Verhaltens

  1. Starten Sie Microsoft Access, und erstellen Sie dann eine neue, leere Datenbank.
  2. Erstellen Sie ein neues, leeres Formular in der Entwurfsansicht.
  3. Fügen Sie dem Formular ein Textfeld hinzu.
  4. Speichern Sie das Formular als frmLastUpdated, und schließen Sie es dann.
  5. Wählen Sie unter Access 2003 und früheren Versionen von Access das Menü Ansicht aus, und klicken Sie auf Details. Klicken Sie in Access 2007 oder Access 2010 mit der rechten Maustaste auf die Kategorie-Kopfzeile im Navigationsbereich auf der linken Seite, und klicken Sie auf Nach Details anzeigen. Dadurch werden die geänderten und erstellten Datumsangaben für jedes Objekt angezeigt. Beachten Sie, dass sowohl die Spalten Geändert als auch Erstellt für das Formular frmLastUpdated auf das gleiche Datum und dieselbe Uhrzeit festgelegt sind.
  6. Drücken Sie STRG+G, um das Direktfenster im Visual Basic-Editor zu öffnen. (In Access 2007 oder Access 2010 müssen Sie zuerst den Inhalt aktivieren, oder die Datenbank muss sich an einem vertrauenswürdigen Speicherort befinden.)
  7. Geben Sie die folgende Zeile in das Direktfenster ein, und drücken Sie dann DIE EINGABETASTE:
    ?CurrentDb.Containers("Forms").Documents("frmLastUpdated").LastUpdated
    Beachten Sie, dass das zurückgegebene Datum und die Uhrzeit den Spalten Geändert und Erstellt im Datenbankfenster entsprechen.
  8. Drücken Sie ALT+F11, um zurück zu Microsoft Access zu wechseln.
  9. Öffnen Sie das Formular frmLastUpdated in der Entwurfsansicht.
  10. Fügen Sie dem Formular ein zweites Textfeld hinzu, und speichern und schließen Sie es dann. Beachten Sie, dass die Spalte Geändert im Fenster Datenbank ein aktualisiertes Datum und eine aktualisierte Uhrzeit für das Formular enthält.
  11. Wiederholen Sie die Schritte 7 und 8.
Hinweis Die LastUpdated-Eigenschaft gibt weiterhin das ursprüngliche Datum und die ursprüngliche Uhrzeit anstelle des neuen Datums und der neuen Uhrzeit zurück, die in der Spalte Geändert im Datenbankfenster angezeigt werden.