0

MS-Accessに少し問題があります。これは次のとおりです。

タイムスタンプ列のあるテーブルがあります(フィールドの形式はDate/Time、デフォルト値はですNow())。問題は、新しいレコードを作成するたびに、作成するレコードではなく、作成する次のレコードのタイムスタンプが設定されることです。

これは、レコード50を作成し、タイムスタンプがレコード51に設定されていることを意味します。1週間後に戻ってレコード51を作成すると、レコード51のタイムスタンプは1週間後になり、タイムスタンプはレコード52に設定されます。 、将来的に作成する予定です。

MS-Accessを起動し、いくつかのフィールドを含む新しいテーブルを作成し、そのうちの1つが日付/時刻であり、このフィールドのデフォルト値をに設定することで、問題を再現できますNow()

これは仕様によるものですか、それとも私は何か馬鹿げたことをしていますか?設計によるものである場合、MS-Accessで必要なタイプのタイムスタンプ(レコードの作成時に日付/時刻が設定されるタイプ)をどのように実装できますか?私が何か馬鹿げたことをしている場合、私は正確に何をしているのですか?

編集:以下は、新しく作成されたAccessテーブルのスクリーンショットです。

イニシャル

レコード1にテキストを追加すると、タイムスタンプがレコード2に設定されます。

2番

しばらく経過して、レコード2にデータを入れても、タイムスタンプは変更されません。レコード3にはタイムスタンプがあります。

第3

テーブルを閉じて開くと、(新しい)レコードのタイムスタンプは、テーブルを開くたびに更新されます。

それで

しばらく経過してレコードを更新すると、テーブルを開いたときにタイムスタンプが残ります。

ついに

4

1 に答える 1

1

コメントですでに明らかにされているように、この問題は、TimeStampフィールドのデフォルトとしてNow()が設定されたテーブルでの編集に起因します。

テーブルで編集するのではなく、フォームを作成することをお勧めします。見た目を似せたい場合は、データシートフォームを使用してください。次に、フォームのBeforeUpdateイベントに、次のようなコードを入力します。

Me!TimeStamp = Now()

ちなみに、フィールド名としてTimeStampは使用しません。SQL Serverなどの一部のRDBMSには、TimeStampと呼ばれるデータ型があります。データ型または予約語であるフィールド名の使用は避けるのが最善です。AccessデータベースをSQLServerに移動することは非常に一般的であり、移動しようとすると問題が発生する可能性があります。

代わりに、2つのフィールドを作成します。1つはDateTimeEnteredと呼ばれ、もう1つはDateTimeModifiedと呼ばれます。私は、これら2つのフィールドは、私が作成するほとんどすべてのテーブルで必要であると考えています。レコードの同期を実行したい場合は、少なくともDateTimeModifiedフィールドが必要です。

于 2012-09-28T03:53:05.973 に答える