7

多数のAccessテーブルを更新するためのスクリプトをいくつか作成しています。レコードが作成されたときのタイムスタンプである「date_created」というフィールドを持つ列をそれぞれに追加したいと思います。テーブルビューを介してこれを行うのは簡単です。DefaultValue=now()を設定するだけです。しかし、SQLでこれをどのように達成しますか?

これは、すでに列があるテーブルに対する私の現在の試みです。この例では「tblLogs」を使用しています。

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now()

ご協力いただきありがとうございます!

更新-VBAでこれを行う方法はありますか?

更新2-すべての回答とそれに続くものを、最短で最も正確な1日までにテストしました

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

4 に答える 4

8

私は仮定しています:

  • ターゲットデータベースは、SQL Serverではなく、ACEまたはJetエンジンです。
  • 日付時刻、つまりCURRENT_TIMESTAMP標準SQLで知られているもの(ただし、ACE / Jetでは直接サポートされていません)が必要であり、SQLServerのTIMESTAMPデータ型と混同しないようにする必要があります。
  • SQLDDLを使用して回答が必要です。

このSQLDDLを使用してテーブルを作成した場合:

CREATE TABLE tblLogs 
(
   date_created DATETIME NOT NULL
);

次に、次のSQLDDLがDEFAULTrequireを追加します。

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

上記のACE/Jet SQL構文は、ANSI-92クエリモードフレーバーです。MS Accessインターフェイス(クエリオブジェクトのSQLビューなど)を介してこれを使用するには、Microsoft Office Access:ANSI SQLクエリモード(MDB)についてを参照してください。SQL DDLを使用してプログラムでこれを行うには、OLE DBを使用する必要があり(AFAIK)、VBAではADOを使用する必要があります(AFAIK)。DAOは常にANSI-89クエリモード構文を使用しますが、そのSQLDDL構文はをサポートしていませんDEFAULT

(ACE / Jetスタンドアロンではなく)Accessを使用している場合は、1行のVBA(ADO)コードを使用できます。

CurrentProject.Connection.Execute "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;"
于 2009-06-10T07:33:50.670 に答える
2

now()の代わりに、getdate()を使用できます。構文の他の部分をチェックすることはできません(ここにはSQLがなく、テーブルを変更することはめったにありません:))が、ほぼ同じである必要があります。

編集:SQLではデフォルトの変更をそれほど簡単に許可していないようです。実用的な例が示されているこのページを見てください。MSSQLはデフォルトを制約として扱うため、制約を変更する必要があります。誤報でごめんなさい。

于 2009-06-09T20:19:37.553 に答える
0

SQL Serverでは、次のようになります。

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT getDate()

于 2009-06-09T20:21:28.300 に答える
-1

Jet テーブルを作成または再構築するには、DDL の代わりに DAO を使用することをお勧めします。Jet の DDL の実装に欠けているプロパティを制御する機能を提供します。Access ヘルプは、これについて必要なものを提供するはずです。

于 2009-06-10T03:52:26.340 に答える