Właściwość LastUpdated obiektów DAO (Data Access) zwraca niepoprawne daty/godziny w bazie danych programu Microsoft Access


Zaawansowane: wymaga specjalistycznej kodowania, interoperacyjności i umiejętności wielu użytkowników.Ten artykuł dotyczy tylko bazy danych programu Microsoft Access (. mdb).

Symptomy


Właściwość LastUpdated obiektów DAO (Data Access) zwraca niepoprawne daty/godziny dla formularzy, raportów, makr i modułów programu Microsoft Access.

Przyczyna


Program Microsoft Access nie powiadamia aparatu bazy danych Microsoft Jet o modyfikacji obiektów specyficznych dla programu Access (Formularze, raporty, makra i moduły); w związku z tym Dateupdate kolumna w tabeli MSysObjects nigdy nie jest aktualizowany do poprawnej daty i godziny. Takie samo zachowanie dotyczy programu Microsoft Access 2007, który korzysta z aparatu bazy danych programu Microsoft Access.

Stan


Firma Microsoft potwierdziła, że jest to problem w produktach firmy Microsoft, które są wymienione na początku tego artykułu.

Więcej informacji


LastUpdated Właściwość dostarczonych przez DAO zwraca poprawną datę/godzinę dla obiektów aparat bazy danych (tabele, kwerendy i relacje), ale zwraca tylko Data utworzenia, nie Data ostatniej modyfikacji dla programu Microsoft Access określonych obiektów (Formularze, raporty, makra i moduły). Przed 2000 programu Microsoft Access, program Microsoft Access używany plik bazy danych (. mdb) Jet do przechowywania obiektów bazy danych (tabele, kwerendy i relacje), a także obiekty specyficzne dla programu Microsoft Access (Formularze, raporty, makra i moduły). Program Microsoft Access przechowywane jego określonych obiektów w tabelach systemu Jet, w szczególności MSysObjects i MSysModules (lub MSysModules2) tabel. Kolumna Dateupdate w tabeli MSysObjects jest odpowiedzialna za przechowywanie daty ostatniej modyfikacji obiektu i jest kolumną, której Właściwość DAO LastUpdated używa do zwrócenia daty ostatniej modyfikacji obiektu. Gdy użytkownik zmodyfikuje i zapisał obiekt we wcześniejszych wersjach, program Microsoft Access powiadomił aparat bazy danych Jet, że obiekt został zmodyfikowany, a Jet zaktualizował kolumnę Dateupdate do bieżącej daty i godziny. W programie Microsoft Access 2000 wprowadzono pliki projektu (. adp) programu Access, które mają możliwość bezpośredniego łączenia się z bazami danych programu Microsoft SQL Server bez użycia aparatu bazy danych Jet. Ponieważ pliki ADP nie korzystają z aparatu bazy danych Jet (lub aparatu bazy danych programu Access), program Access nie może używać tego samego formatu magazynu poprzednio używanego w bazach danych Jet dla obiektów specyficznych dla programu Access. Musiała przechowywać je w nowy format magazynu doc OLE, który jest dostępny w obu baz danych Jet i projektów programu Access. Gdy użytkownik początkowo tworzy nowy program Microsoft Access określonego obiektu, takich jak formularz), aparat bazy danych nadal przechodzi bieżącą datę i godzinę do Datecreate i dateupdate kolumn w tabeli MSysObjects. Jednak gdy użytkownik modyfikuje i zapisuje obiekt, program Microsoft Access nie powiadamia aparat bazy danych; w związku z tym Dateupdate kolumna zawsze pozostaje taka sama. Ponadto być może zauważyłeś, że okno bazy danych (w wersjach wcześniejszych niż Access 2007) i okienko nawigacji w programie Access 2007 lub Access 2010 wyświetla poprawną datę i godzinę ostatniej modyfikacji obiektu. Wynika to z faktu, że program Microsoft Access używa własnego wewnętrznego mechanizmu do przechowywania daty utworzenia i daty modyfikacji, niezależnie od aparatu bazy danych. Niestety program Microsoft Access nie ujawnia tych informacji w modelu obiektowym; w związku z tym nie istnieje sposób programistyczny, aby uzyskać dostęp do tych informacji w programie Microsoft Access.

Kroki prowadzące do odtworzenia problemu

  1. Uruchom program Microsoft Access, a następnie utwórz nową, pustą bazę danych.
  2. Utwórz nowy, pusty formularz w widoku Projekt.
  3. Dodaj pole tekstowe do formularza.
  4. Zapisz formularz jako Frmlastupdated, a następnie zamknij go.
  5. W programie Access 2003 i wcześniejszych wersjach programu Access wybierz menu Widok i kliknij przycisk szczegóły. W programie Access 2007 lub Access 2010 kliknij prawym przyciskiem myszy nagłówek kategorii w okienku nawigacji po lewej stronie i kliknij przycisk Wyświetl według szczegółów. Spowoduje to wyświetlenie zmodyfikowanych i utworzonych dat dla każdego obiektu. Należy zauważyć, że zarówno zmodyfikowane i utworzone kolumny dla formularza frmlastupdated są ustawione na tę samą datę i godzinę.
  6. Naciśnij kombinację CTRL + G, aby otworzyć okno bezpośrednie w edytorze Visual Basic. (W programie Access 2007 lub Access 2010 należy najpierw włączyć zawartość lub bazy danych musi być w zaufanej lokalizacji.)
  7. Wpisz następujący wiersz w oknie bezpośrednim, a następnie naciśnij ENTER:
    ?CurrentDb.Containers("Forms").Documents("frmLastUpdated").LastUpdated
    Należy zauważyć, że data i godzina zwracane odpowiada zmodyfikowane i utworzone kolumny w oknie bazy danych.
  8. Naciśnij kombinację ALT + F11, aby powrócić do programu Microsoft Access.
  9. Otwórz formularz frmLastUpdated w widoku Projekt.
  10. Dodaj drugie pole tekstowe do formularza, a następnie Zapisz i zamknij go. Należy zauważyć, że zmodyfikowana kolumna w oknie Baza danych zawiera zaktualizowaną datę i godzinę dla formularza.
  11. Powtórz kroki 7 i 8.
UwagaLastUpdated Właściwość nadal zwraca oryginalnej daty i godziny zamiast nowej daty i godziny wyświetlane w kolumnie zmodyfikowane w oknie bazy danych.