Ho la necessità di inserire una tabella una convalida del tipo
Campo due > Maggiore del campo Uno (ovvero il numero immesso nel campo due
deve sempre essere superiore al compo uno)
Ho banalmente messo nella regola > [uno] ma mi viene detto:
Sintassi SQL non valida. Impossibile utilizzare piu colonne in un vincolo
CHECK a livello di colonna.
Cosa sbaglio?
Grazie Angelo
Ciao, Angelo.
Nella regola che hai immesso:
> [uno]
e' sottinteso "[due]". Ovvero:
[due] > [uno]
Scritto cosi' e' ancora piu' evidente che in tale regola le colonne
coinvolte sono due. Come ti avverte il messaggio di errore, non e' possibile
usare tale sintassi a livello di colonna... ma a livello di tabella si'.
Apri quindi la finestra "Proprieta' tabella" e alla voce:
Valido se
assegna il valore:
[due] > [uno]
--
(Facci sapere se ed eventualmente come hai risolto. Grazie.)
Ciao :o)
Maurizio Borrelli, Microsoft MVP - Office Systems - Access
--------
?SPQR(C)
X
--------
Grazie Angelo
Ciao Angeo,
come avrai capito dal messaggio d'errore una regola a livello di campo non
può riferirsi ad un'altro campo.
Se vuoi puoi aggiungere una regola a livello di tabella e verrà valutata nel
momento della scrittura del record.
Per aggiungere la regola devi usare il metodo Execute dell'oggetto
Connection,
------------------------
Currentproject.Connection.Execute _
"ALTER TABLE Tabella ADD CONSTRAINT CK_UNO_DUE CHECK ([UNO]>[DUE])"
-------------------------
Ciao Giorgio
ops, il server news di Tiscali fa oggi fa i capricci,non vedo i miei
messaggi e vedo solo adesso che Maurizio ti ha gia risposto.
Comunque (a parte l'errore di inversione [UNO]>[DUE]) se vuoi puoi
usare anche questo sistema
Ciao Giorgio
Ciao, Angelo.
E allora?... Che facciamo? Ci rassegnamo o ci dici che cosa ti porta a
dire che non funziona? Ottieni un messaggio di errore?... Vengono accettati
dati che dovrebbero essere invece rifiutati? Cosa succede, insomma?...
Ah... Hai letto cio' che ha scritto Giorgio? Perche' io ora non mi
raccapezzo piu' e puo' darsi che tu debba scrivere:
[uno] > [due]
invece di:
Questi Check Constraint di JET4 hanno il grande disavantaggio
di non essere visibili nella vis. struttura ed IMO sono raggionevoli
(è l'unica possibilità) solo nel caso di una regola che si riferisce
ad una tabella diversa.
Invece qui, come già scritto da Maurizio, basta una semplice
regola al livello di tabella se viene impostato giusta.
--
cu
Karl
*********
Access FAQ: www.donkarl.com/it
A tutt'ora non ho ancora capito qual'e' il problema vero ne il significato
del messaggio.
La mia necessità è quella di poter inserire una scorta minima e una massima
e ovviamente la scorta massima non può essere inferiore alla scorta minima.
Mi sembrava banalissimo ma cosi non è.
Adesso rileggo bene i vari post e poi vi faccio sapere se ho risolto.
Grazie mille
Angelo
Francamente sembra incredibile che a livello di convalida non si possa
inserire direttamente un riferimento su altri campi ma ho consultato alcuni
libri di access e sembra che a livello di tabella non si possa proprio fare
Ho risolto creandomi una scheda su cui le regole di convalida funzionano
perfettamente
Grazie a tutti Angelo
Ciao Karl
è vero che per questo caso basta mettere il Check nella proprietà
della tabella ma se hai più di una condizione è molto scomodo mettere
---------------
[DUE]>[UNO] AND [QUATTRO]>=[TRE] ...
---------------
perchè quando viene restituito il messaggio di errore chi usa il
programma non sa bene dove deve sistemare il dato.
mettendo invece diversi Check con il nome giusto si può indicare
subito dove il dato è sbagliato
-----------
ADD CONSTRAINT CK_Controllo_[DUE]_Maggiore_[UNO] ([DUE]>[UNO])
ADD CONSTRAINT CK_Controllo_[QUATTRO]_Maggiore_[TRE] ([QUATTRO]>[TRE])
ecc. ecc.
-----------
;-)
Ciao Giorgio
ciao, se provi l'esempio di Maurizio verdai che funziona solo che il
messaggio di errore viene notificato al momento della scrittura del
record.
Forse ti aspettavi la notifica al momento della variazione del campo
ma questo tipo di controllo si attiva solo sulla convalida a livello
di campo che può essere confrontato solo con una costante o una
subquery.
> Ho risolto creandomi una scheda su cui le regole di convalida funzionano
> perfettamente
Ciao Giorgio
Ciao Angeo,
come avrai capito dal messaggio d'errore una regola a livello di campo non
può riferirsi ad un'altro campo.
Se vuoi puoi aggiungere una regola a livello di tabella e verrà valutata nel
momento della scrittura del record.
Per aggiungere la regola devi usare il metodo Execute dell'oggetto
Connection,
------------------------
Currentproject.Connection.Execute _
"ALTER TABLE Tabella ADD CONSTRAINT CK_UNO_DUE CHECK ([UNO]>[DUE])"
-------------------------
Ciao Giorgio