2009-06-09 78 views
5

我正在寫很多腳本來更新許多Access表。我想爲每個有一個名爲「date_created」的字段添加一個列,該字段是記錄創建時的時間戳。通過表視圖執行此操作非常簡單,只需設置DefaultValue = now()即可。但是,我將如何在sql中完成此操作?Microsoft Access DateTime默認現在通過SQL

這是我當前嘗試使用已有列的表。這個例子使用「tblLogs」。

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now() 

感謝您的幫助!

更新 - 有沒有辦法在VBA中做到這一點?

更新2 - 由onedaywhen測試所有的答案,以下是最短和最準確的

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

現在(是,如果你想使用一個愚蠢的功能日期。你真正想要的是將默認設置爲Date()。 – 2009-06-10 03:50:48

+0

他們說「創建記錄時的DateTime ...時間戳」,NOW()函數最適合。 – onedaywhen 2009-06-10 07:20:55

+0

好吧,調整字段名稱和輸入數據會更加準確,但稱它爲「愚蠢」是無禮的。建設性的反饋不應該是居高臨下,也不應含有任何侮辱。 – JeffO 2009-06-10 14:25:43

回答

6

我假設:

  • 目標數據庫是ACE或Jet引擎,而不是SQL服務器;
  • 你想要日期時間,即標準SQL中所謂的CURRENT_TIMESTAMP(不直接受ACE/Jet支持),不要與SQL Server的TIMESTAMP數據類型混淆;
  • 你想要一個使用SQL DDL的答案。

如果您使用此SQL DDL創建了表:

CREATE TABLE tblLogs 
(
    date_created DATETIME NOT NULL 
); 

那麼下面的SQL DDL將添加DEFAULT您的要求:

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

以上ACE /噴氣SQL語法ANSI-92查詢模式的味道。要通過MS Access接口使用它(例如查詢對象的SQL視圖),請參見Microsoft Office Access: About ANSI SQL query mode (MDB)。爲了以編程方式使用SQL DDL,需要(AFAIK)使用OLE DB,這在VBA中需要使用(AFAIK)ADO。 DAO總是使用ANSI-89查詢模式語法,其SQL DDL語法不支持DEFAULT

如果您使用的是Access(而不是ACE /噴氣獨立),您可以使用VBA(ADO)一行代碼:)

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

而不是現在(),您可以使用GETDATE()。無法檢查語法的其他部分(這裏沒有sql,我很少更改表:)),但應該大致相同。

編輯: 似乎SQL不允許輕鬆更改默認值。查看this page,其中提供了實際示例 - 您需要更改約束,因爲MSSQL將默認值視爲約束條件。對錯誤信息抱歉。

0

在SQL Server中這將是:

ALTER TABLE tblLogs ALTER COLUMN DATE_CREATED DEFAULT GETDATE()

-1

我建議創建或重組Jet表,您使用DAO,而不是DDL。它提供了控制Jet的DDL實現中缺少的屬性的能力。 Access的幫助應該爲你提供你所需要的。