De plus, ajoutez une colonne Règle de validation (ou CHECK
contrainte) pour assurer la colonne « timestamp » est mis à jour lorsque la table est mise à jour autre que via votre formulaire. La DLL SQL (ANSI-92 syntaxe mode de requête) ressemblerait à quelque chose comme ceci:
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())
;
Une autre approche lors de l'utilisation Jet 4.0 (pré-Access 2007 soit avant la sécurité au niveau de l'utilisateur a été retiré du moteur) est de créer un 'assistant' Jet SQL PROCEDURE
(Terme d'accès: Objet de requête stocké défini à l'aide d'une instruction SQL 'Action', distincte d'une requête SQL SELECT
) qui met automatiquement à jour la colonne 'timestamp' puis supprime les privilèges 'update' de la table et leur accorde à la place sur le PROC
par exemple quelque chose SQL DDL/DCL comme:
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
;
L'avantage est ici toutes les mises à jour doivent passer par l'PROC
et est donc sous le contrôle du promoteur; l'inconvénient est Access/Jet SQL est que votre formulaire devra également utiliser le PROC
, ce qui signifie un changement de paradigme de l'approche standard des «formulaires liés aux données» pour lequel Access est célèbre.
BeforeUpdate est certainement l'événement correct à utiliser, pas OnDirty. –