Dodatkowo dodać regułę kolumna Validation (lub CHECK
ograniczenia) w celu zapewnienia „” timestamp kolumna jest aktualizowany, gdy stół jest aktualizowany inny niż za pośrednictwem formularza. SQL DLL (składnia trybie zapytania ANSI-92) będzie wyglądać mniej więcej tak:
CREATE TABLE MyTable
(
key_col INTEGER NOT NULL UNIQUE,
data_col INTEGER NOT NULL
)
;
ALTER TABLE MyTable ADD
my_timestamp_col DATETIME
DEFAULT NOW()
NOT NULL
;
ALTER TABLE MyTable ADD
CONSTRAINT my_timestamp_col__must_be_current_timestamp
CHECK (my_timestamp_col = NOW())
;
Innym podejściem przy użyciu Jet 4.0 (pre-Access 2007 czyli przed zabezpieczenia na poziomie użytkownika została usunięta z silnika) jest stworzenie 'helper' Jet SQL PROCEDURE
(Termin dostępu: zapisany obiekt zapytań zdefiniowany za pomocą instrukcji SQL 'Action', w odróżnieniu od zapytania SQL SELECT
), który automatycznie aktualizuje kolumnę 'timestamp', a następnie usuwa z tabeli 'update' i przyznaje im zamiast tego na PROC
np SQL DDL/DCL coś takiego:
CREATE PROCEDURE MyProc
(
arg_key INTEGER,
arg_new_data INTEGER
)
AS
UPDATE MyTable
SET data_col = arg_new_data,
my_timestamp_col = NOW()
WHERE key_col = arg_key
;
REVOKE UPDATE ON MyTable FROM PUBLIC
;
GRANT UPDATE ON MyProc TO PUBLIC
;
Zaletą jest tu wszystkie aktualizacje muszą przejść przez PROC
i dlatego jest pod kontrolą programisty; wadą jest Access/Jet SQL, że twój formularz będzie musiał również użyć PROC
, co oznacza zmianę paradygmatu z dala od standardowego podejścia "formularzy związanych z danymi", dla którego Access jest znany.
BeforeUpdate jest z pewnością poprawnym wydarzeniem do użycia, a nie OnDirty. –