Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Regola Convalida

141 views
Skip to first unread message

Angelsoft

unread,
Aug 13, 2004, 2:21:44 PM8/13/04
to
Mi sono arenato in un problema banalissimo!

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


Maurizio Borrelli

unread,
Aug 13, 2004, 2:33:56 PM8/13/04
to
"Angelsoft" <ange...@libero.it> ha scritto nel messaggio
news:YE7Tc.39360$1V3.1...@twister2.libero.it...

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
--------


Angelsoft

unread,
Aug 13, 2004, 4:53:38 PM8/13/04
to

"Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel messaggio
news:fP7Tc.9655$B06....@news.edisontel.com...
No: purtroppo sembra non funzionare.

Grazie Angelo


giorgio...@tiscali.it

unread,
Aug 13, 2004, 6:52:32 PM8/13/04
to
"Angelsoft" <ange...@libero.it> wrote in message news:<YE7Tc.39360$1V3.1...@twister2.libero.it>...

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

giorgio...@tiscali.it

unread,
Aug 13, 2004, 7:28:39 PM8/13/04
to
"Angelsoft" <ange...@libero.it> wrote in message news:<YE7Tc.39360$1V3.1...@twister2.libero.it>...
[CUT]

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

Maurizio Borrelli

unread,
Aug 14, 2004, 2:59:05 AM8/14/04
to
"Angelsoft" <ange...@libero.it> ha scritto nel messaggio
news:mT9Tc.39476$1V3.1...@twister2.libero.it...

> "Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel
messaggio
> news:fP7Tc.9655$B06....@news.edisontel.com...
> > "Angelsoft" <ange...@libero.it> ha scritto nel messaggio
> > news:YE7Tc.39360$1V3.1...@twister2.libero.it...
> > > 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.
[...]

> > Apri quindi la finestra "Proprieta' tabella" e alla voce:
> > Valido se
> > assegna il valore:
> > [due] > [uno]
> No: purtroppo sembra non funzionare.

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:

Karl Donaubauer

unread,
Aug 14, 2004, 5:29:53 AM8/14/04
to
giorgio...@tiscali.it ha scritto:

> "Angelsoft" <ange...@libero.it> wrote in message
>> 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.
>
> 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])"
> -------------------------

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

Angelsoft

unread,
Aug 14, 2004, 6:31:48 AM8/14/04
to

> 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:
>
> [due] > [uno]
>
> --
> (Facci sapere se ed eventualmente come hai risolto. Grazie.)
>
> Ciao :o)
> Maurizio Borrelli, Microsoft MVP - Office Systems - Access
> --------
> ?SPQR(C)
> X
> --------
>
> Hai perfettamente ragione. Volevo semplicemente dire che mi dà lo stesso
tipo di errore.

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

Angelsoft

unread,
Aug 14, 2004, 6:54:17 AM8/14/04
to

<giorgio...@tiscali.it> ha scritto nel messaggio
news:fa6ba1b6.04081...@posting.google.com...

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

giorgio...@tiscali.it

unread,
Aug 14, 2004, 9:52:56 AM8/14/04
to
"Karl Donaubauer" <NoS...@donkarl.com> wrote in message news:<2o64d8F...@uni-berlin.de>...

> giorgio...@tiscali.it ha scritto:
> > "Angelsoft" <ange...@libero.it> wrote in message
[CUT]

> 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.

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

giorgio...@tiscali.it

unread,
Aug 14, 2004, 11:21:09 AM8/14/04
to
"Angelsoft" <ange...@libero.it> wrote in message news:<tbmTc.42625$OH4.1...@twister1.libero.it>...

> <giorgio...@tiscali.it> ha scritto nel messaggio
> news:fa6ba1b6.04081...@posting.google.com...
> > "Angelsoft" <ange...@libero.it> wrote in message
> news:<YE7Tc.39360$1V3.1...@twister2.libero.it>...
[CUT]

>
> 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

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

giorgio rancati

unread,
Aug 13, 2004, 6:41:55 PM8/13/04
to

"Angelsoft" <ange...@libero.it> ha scritto nel messaggio
news:YE7Tc.39360$1V3.1...@twister2.libero.it...

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


0 new messages