2009-06-09 17 views
5

Estoy escribiendo una serie de scripts para actualizar numerosas tablas de acceso. Me gustaría agregar una columna a cada uno que tenga un campo llamado "date_created" que es una marca de tiempo de cuando se crea el registro. Hacer esto a través de la vista de tabla es simple, simplemente configure DefaultValue = now(). Sin embargo, ¿cómo lo lograría en sql?Microsoft Access DateTime Default Ahora a través de SQL

Este es mi intento actual de tablas que ya tienen la columna. Este ejemplo usa "tblLogs".

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now() 

¡Gracias por su ayuda!

Actualización - ¿Habría alguna manera de hacer esto en VBA?

Actualización 2 - Probado todas las respuestas y la siguiente por onedaywhen es la getdate más corta y más precisa

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

ahora() es una función tonto para usar si desea que el FECHA. Lo que realmente quiere es establecer el valor predeterminado en Fecha(). –

+0

Dicen "DateTime ... marca de tiempo de cuando se crea el registro", para lo cual la función NOW() es la más adecuada. – onedaywhen

+0

OK, sería más preciso coordinar el nombre del campo y los datos que se ingresan, pero llamarlo "tonto" es grosero. La retroalimentación constructiva no debe ser condescendiente ni contener insultos. – JeffO

Respuesta

6

Asumo:

  • su base de datos de destino es el motor de la ECA o Jet, en lugar de SQL Server;
  • desea que la fecha y tiempo es decir, lo que se conoce como CURRENT_TIMESTAMP en SQL estándar (no soportado directamente por ACE/Jet, aunque) y que no debe confundirse con el tipo de datos de SQL Server TIMESTAMP;
  • desea una respuesta utilizando SQL DDL.

Si ha creado su tabla usando este SQL DDL:

CREATE TABLE tblLogs 
(
    date_created DATETIME NOT NULL 
); 

entonces la siguiente DDL SQL sería añadir el DEFAULT su requieren: Sintaxis/Jet SQL

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

Lo anterior ACE es Sabor del modo de consulta ANSI-92. Para usar esto a través de la interfaz de MS Access (por ejemplo, la vista SQL de un objeto Query), consulte Microsoft Office Access: About ANSI SQL query mode (MDB). Para hacer esto mediante programación utilizando SQL DDL, se requiere (AFAIK) el uso de OLE DB, que en VBA requiere (AFAIK) el uso de ADO. DAO siempre utiliza la sintaxis del modo de consulta ANSI-89, cuya sintaxis SQL DDL no admite DEFAULT.

Si está utilizando Access (en lugar de la ECA/autónomo Jet), se puede utilizar una sola línea de VBA código (ADO):

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

En lugar de ahora() se puede utilizar(). No puedo verificar otra parte de la sintaxis (no sql aquí y rara vez cambio las tablas :)), pero debería ser lo mismo.

editar: Parece que SQL no permite cambiar los valores predeterminados tan fácilmente. Mire this page, donde se proporciona un ejemplo práctico: necesita cambiar las restricciones, porque MSSQL trata los valores predeterminados como restricciones. Perdón por información errónea.

+0

I lo intenté y no funcionó. Gracias por responder GetDate() traerá de vuelta hoy y no exactamente el segundo y será casi igual a Now() por lo que sé. –

+0

getdate() devuelve full tiempo, no te preocupes. – Arvo

+0

Aparentemente MSSQL es un poco más difícil con los valores predeterminados - tienes que soltar/crear restricciones específicas. Edité mi respuesta para reflejar esto. – Arvo

0

En SQL Server sería:

ALTER TABLE ALTER tblLogs columna predeterminado DATE_CREATED getDate()

-1

que sugieren que para crear o reestructurar tablas Jet, se utiliza DAO en lugar de DDL. Ofrece la capacidad de controlar las propiedades que faltan en la implementación de DDL de Jet. La ayuda de Access debería proporcionarle lo que necesita sobre esto.

+0

Esas "propiedades que faltan en la implementación de DDL de Jet" son bastante oscuras (¿las usas * alguna vez ?!) y definitivamente no incluyen DEFAULT. Pero el OP también ha solicitado algunos VBA, ¿qué tal si publica sus muchas líneas de código DAO equivalente para ver si lo prefieren ya sea a la línea única de SQL DDL o a una sola línea de código Access + ADO? :) – onedaywhen

+0

No creo tablas en código de ninguna forma. No veo el punto. –

+0

Independientemente de cómo cree tablas, ¿alguna vez utiliza explícitamente las "propiedades que faltan en la implementación de DDL de Jet"? – onedaywhen

Cuestiones relacionadas