2009-06-09 9 views
5

Piszę wiele skryptów, aby zaktualizować wiele tabel Access. Chciałbym dodać kolumnę do każdego, który ma pole o nazwie "date_created", które jest znacznikiem czasu, gdy tworzony jest rekord. Robiąc to poprzez widok tabeli jest prosty, wystarczy ustawić DefaultValue = now(). Jak jednak to zrobić w sql?Microsoft Access DateTime Domyślnie teraz za pośrednictwem SQL

To jest moja obecna próba tabel, które już mają kolumnę. W tym przykładzie użyto "tblLogs".

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now() 

Dzięki za pomoc!

Aktualizacja - czy istnieje sposób, aby to zrobić w VBA?

Update 2 - Testowane wszystkie odpowiedzi i brzmienie onedaywhen jest najkrótsza i najbardziej dokładne

CurrentProject.Connection.Execute _ 
    "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;" 
+1

Now() jest głupie funkcji użyć, jeśli chcesz DATA. To, czego naprawdę chcesz, to ustawić domyślną wartość Date(). –

+0

Mówią "DateTime ... znacznik czasu, kiedy tworzony jest rekord", dla którego funkcja NOW() jest najbardziej odpowiednia. – onedaywhen

+0

OK, dokładniejsze byłoby koordynowanie nazwy pola i wprowadzanych danych, ale nazywanie tego "głupim" jest niegrzeczne. Konstruktywna informacja zwrotna nie powinna być protekcjonalna ani zawierać żadnych obelg. – JeffO

Odpowiedz

6

Jestem przy założeniu:

  • docelową bazą danych jest silnik ACE lub Jet, zamiast SQL Server;
  • chcesz ustawić datę i w standartowym SQL (nie jest to obsługiwane bezpośrednio przez ACE/Jet) i nie należy mylić z typem danych SQL Server: TIMESTAMP;
  • chcesz uzyskać odpowiedź za pomocą SQL DDL.

Jeśli utworzono tabelę przy użyciu tego SQL DDL:

CREATE TABLE tblLogs 
(
    date_created DATETIME NOT NULL 
); 

następnie następujące SQL DDL by dodać DEFAULT swój wymagać: składnia/Jet SQL

ALTER TABLE tblLogs ALTER 
    date_created DATETIME DEFAULT NOW() NOT NULL; 

Powyższy ACE Smak trybu zapytań ANSI-92. Aby użyć tego za pośrednictwem interfejsu MS Access (na przykład widoku SQL obiektu zapytania) zobacz Microsoft Office Access: About ANSI SQL query mode (MDB). Aby to zrobić programowo za pomocą SQL DDL wymaga (AFAIK) korzystania z OLE DB, który w VBA wymaga (AFAIK) korzystania z ADO. DAO zawsze używa składni trybu zapytań ANSI-89, której składnia SQL DDL nie obsługuje wersji DEFAULT.

Jeśli używasz Access (zamiast ACE/Jet standalone), można użyć pojedynczej linii VBA (ADO) Kod:

CurrentProject.Connection.Execute "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;" 
2

zamiast teraz() można użyć getdate(). Nie mogę sprawdzić innej części składni (tutaj nie ma sql i rzadko zmieniam tabele :)), ale powinien być mniej więcej taki sam.

edytuj: Wygląda na to, że SQL nie pozwala tak łatwo zmienić wartości domyślne. Spójrz na this page, gdzie podano praktyczny przykład - musisz zmienić ograniczenia, ponieważ MSSQL traktuje jako domyślne ograniczenia. Przepraszam za dezinformację.

+0

I Dziękuję za odpowiedź: Funkcja GetDate() zostanie przywrócona dzisiaj, ale nie jest dokładna jako druga i będzie prawie taka sama jak Now(), o ile mi wiadomo: –

+0

getdate() zwraca pełną wersję Nie martw się, – Arvo

+0

Wygląda na to, że MSSQL jest nieco trudniejszy z domyślnymi ustawieniami - musisz upuścić/stworzyć konkretne ograniczenia, edytowałem swoją odpowiedź, aby to odzwierciedlić – Arvo

0

W SQL Server byłoby:

ALTER TABLE tblLogs ALTER COLUMN DATE_CREATED DEFAULT getDate()

-1

Proponuję, aby utworzyć lub tabele restrukturyzacji Jet, należy użyć DAO zamiast DDL. Oferuje możliwość kontrolowania właściwości, których brakuje w implementacji DDL przez Jet. Pomoc dotycząca programu Access powinna dostarczyć ci tego, czego potrzebujesz.

+0

Te "właściwości, których brakuje w implementacji DDL przez DD" są raczej niejasne (czy * ty * używasz ich nigdy!) I zdecydowanie nie zawierają DEFAULT! Ale OP poprosił również o trochę VBA, więc co powiesz na to, że umieścisz wiele linii równoważnego kodu DAO, aby sprawdzić, czy wolą go do pojedynczej linii SQL DDL, czy do pojedynczej linii kodu Access + ADO? :) – onedaywhen

+0

Nie tworzę tabel w kodzie jakiejkolwiek postaci. Nie widzę sensu. –

+0

Niezależnie od tego, jak tworzysz tabele, czy kiedykolwiek używałeś wyraźnie tych "właściwości, których brakuje w implementacji DDL przez Jet?" – onedaywhen

Powiązane problemy