2009-06-09 25 views
5

Tôi đang viết một số tập lệnh để cập nhật nhiều bảng Access. Tôi muốn thêm một cột vào mỗi cột có một trường được gọi là "date_created", đó là dấu thời gian khi bản ghi được tạo. Làm điều này thông qua cách xem bảng đơn giản, chỉ cần đặt DefaultValue = now(). Tuy nhiên, làm thế nào tôi sẽ thực hiện điều này trong sql?Microsoft Access DateTime Mặc định Bây giờ qua SQL

Đây là nỗ lực hiện tại của tôi đối với các bảng đã có cột. Ví dụ này sử dụng "tblLogs".

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now() 

Cảm ơn sự giúp đỡ của bạn!

Cập nhật - Có cách nào để thực hiện việc này trong VBA không?

Cập nhật 2 - Thử nghiệm tất cả các câu trả lời và sau bởi onedaywhen là ngắn nhất và chính xác nhất

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

Now() là một hàm ngớ ngẩn để sử dụng nếu bạn muốn NGÀY. Những gì bạn thực sự muốn là đặt mặc định thành Date(). –

+0

Họ nói "DateTime ... timestamp của khi bản ghi được tạo ra", trong đó hàm NOW() là thích hợp nhất. – onedaywhen

+0

OK, sẽ chính xác hơn khi phối hợp tên của trường và dữ liệu được nhập, nhưng để gọi nó là "ngớ ngẩn" là thô lỗ. Phản hồi mang tính xây dựng không nên bị hạ thấp cũng không chứa bất kỳ lời lăng mạ nào. – JeffO

Trả lời

6

Tôi giả định:

  • cơ sở dữ liệu mục tiêu của bạn là ACE hoặc Jet động cơ, chứ không phải là SQL Server;
  • bạn muốn ngày thời gian tức là cái được gọi là CURRENT_TIMESTAMP trong SQL chuẩn (không được hỗ trợ trực tiếp bởi ACE/Jet) và không bị nhầm lẫn với loại dữ liệu TIMESTAMP của Máy chủ SQL;
  • bạn muốn có câu trả lời bằng cách sử dụng SQL DDL.

Nếu bạn đã tạo bảng bằng cách sử dụng này DDL SQL:

CREATE TABLE tblLogs 
(
    date_created DATETIME NOT NULL 
); 

thì DDL SQL sau sẽ thêm DEFAULT của bạn yêu cầu:

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

Các ACE trên/Jet SQL Cú pháp là ANSI-92 Kiểu chế độ truy vấn. Để sử dụng thông qua giao diện MS Access (ví dụ: xem SQL của đối tượng truy vấn), hãy xem Microsoft Office Access: About ANSI SQL query mode (MDB). Để làm điều này bằng cách sử dụng chương trình SQL DDL yêu cầu (AFAIK) việc sử dụng OLE DB, mà trong VBA yêu cầu (AFAIK) việc sử dụng ADO. DAO luôn sử dụng cú pháp Chế độ truy vấn ANSI-89, có cú pháp SQL DDL thiếu hỗ trợ cho DEFAULT.

Nếu bạn đang sử dụng Access (chứ không phải là ACE/Jet độc lập), bạn có thể sử dụng một dòng duy nhất của VBA (ADO) mã:

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

Thay vì bây giờ(), bạn có thể sử dụng getdate(). Không thể kiểm tra một phần khác của cú pháp (không có sql ở đây và tôi hiếm khi thay đổi bảng :)), nhưng nên được về cùng.

chỉnh sửa: Dường như SQL không cho phép thay đổi mặc định dễ dàng như vậy. Nhìn vào this page, trong đó ví dụ thực tế được cung cấp - bạn cần phải thay đổi các ràng buộc, bởi vì MSSQL coi các giá trị mặc định là những ràng buộc. Xin lỗi vì thông tin sai lạc.

+0

I GetDate() sẽ mang lại ngày hôm nay và không phải là chính xác thứ hai và sẽ gần giống như Now() theo như tôi biết. –

+0

getdate() trả về đầy đủ thời gian, đừng lo lắng. – Arvo

+0

Rõ ràng MSSQL hơi khó khăn hơn với mặc định - bạn phải thả/tạo những ràng buộc cụ thể. Tôi đã chỉnh sửa câu trả lời của mình để phản ánh điều này – Arvo

0

Trong SQL Server nó sẽ là:

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT getDate()

-1

Tôi đề nghị rằng để tạo ra hoặc bảng cơ cấu Jet, bạn sử dụng DAO thay vì DDL. Nó cung cấp khả năng kiểm soát các thuộc tính thiếu trong việc thực thi DDL của Jet. Trợ giúp Access sẽ cung cấp cho bạn những gì bạn cần về vấn đề này.

+0

Những "thuộc tính thiếu trong thực hiện của Jet của DDL" là khá mơ hồ (do * bạn * bao giờ sử dụng chúng ?!) Và chắc chắn không bao gồm DEFAULT! Nhưng OP cũng đã yêu cầu một số VBA vì vậy làm thế nào về bạn đăng nhiều dòng mã DAO tương đương của bạn để xem họ thích nó hoặc là một dòng duy nhất của SQL DDL hoặc dòng đơn của mã Access + ADO? :) – onedaywhen

+0

Tôi không tạo bảng trong mã dưới mọi hình thức. Tôi không thấy điểm. –

+0

Bất kể bạn tạo ra các bảng như thế nào, bạn có bao giờ sử dụng một cách rõ ràng các thuộc tính "thiếu sự thực thi của DDL" của Jet không? – onedaywhen

Các vấn đề liên quan