Newsgroup: it.comp.appl.access
Titolo: condizioni IIf e IsNull

Uso l'espressione:
=IIf(IsNull([aa]);0;(CDbl([aa]/[bb]))) .
Ha sempre funzionato ma adesso mi mancano dei valori nei campi [aa] e [bb] 
in modo discontinuo e compaiono #error.
Ho provato con IsNull([aa] or [bb];0 e IsNull([aa] and [bb];0  ma a seconda 
che manchi aa o bb a volte funziona a volte no.
C'è un modo per coniugare i due e togliere l'antiestetico #error ?
grazie 

[CUT]
Ciao,
l'OR va + che bene e cmq bb deve essere <>0 trattandosi di una divisione... 


l'errore avvie se non c'è valore
con or funziona se:
entrambi sono vuoti
entrambi hanno un valore
se bb ha un valore
mentre non va se aa è vuoto 

[CUT]
Vedi un'attimino la sintassi -> magari una parentesi tonda nel posto 
sbagliato... 


l'espressione è
=IIf(IsNull([bb] Or [aa]);0;(CDbl([aa]/bb])))
non segnala errori di sintassi
ma solo #error se aa è vuoto
grazie ciao 

[CUT]
Passo la palla -> se aspetti arriva qualcuno...
BBuona giornata :-) 

 ha scritto nel messaggio 
news:T8jPe.102338$fm.67...@news4.tin.it...

Prova con:
Result : IIf(IsNull([aa]) Or IsNull([bb]);0;[aa]/[bb]) in una Query
 Pippo=IIf(IsNull([aa]) Or IsNull([bb]),0,[aa]/[bb]) come origine  controllo 
di una maschera.
Fammi sapere, ciao cld

[CUT]
;-) 


Ciao,
funziona sia :
=IIf(IsNull([bb]) Or IsNull([aa]);0;(CDbl([aa]/bb])))
che
=IIf(IsNull([aa] Or [bb]="");0;(CDbl([aa]/bb]))) 

 =IIf(IsNull([aa] Or [bb]="");0;(CDbl([aa]/bb])))
Questo è concettualmente corretto:
  IIf(IsNull([bb]) Or IsNull([aa])...
E questo è concettualmente errato:
  IIf(IsNull([aa] Or [bb]="")...
perchè prima fa l'Or logico tra il valore del campo [aa] e il risultato
dell'espressione [bb]="", il che può restituire Null o False, e poi passa
tale valore a IsNull() che quindi restituisce True o False senza dare
errori, ma non credo sia quel che volevi quindi ti consiglio di usare la
prima forma. Attento che nel CDbl() manca una parentesi quadra prima di bb.
Ma teoricamente nessuna delle due può funzionare perchè secondo l'help
<F1> IIf() valuta sempre sia il secondo che il terzo argomento, pertanto
in caso [bb] fosse zero o null verrebbe comunque effettuato il calcolo
[aa]/[bb], restituendo un errore.
Per eliminare l'errore di divisione per zero ti consiglio questa formula:
  =IIf(Nz([aa];0)=0 Or Nz([bb];0)=0;0;CDbl([aa]/IIf(Nz([bb];0)=0;1;[bb])))
che usa Nz() per convertire i Null in zeri, e restituisce zero se [aa] o
[bb] sono zero o nulli, e [aa]/[bb] negli altri casi.
Ciao.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Namor
Assolutamente d'accordo sull'uso di Nz, nella fretta ho fatto solo un paio 
di prove, che hanno funzionato sia con 0 che con null per tutti e due i 
campi. Cia, Cld.
PS a cosaserve il secondo IIF ? 

GGAC & co ha scritto:


Serve ad eliminare l'errore di divisione per zero.
L'IIf non è un If...Then...Else che esegue uno o l'altro dei due blocchi
di istruzioni a seconda del risultato del test.
Come spiegato sull'help le due espressioni di un IIf() vengono sempre
valutate entrambe, pertanto nel caso in cui [bb] sia zero o nullo l'IIf
non si limita a restituire zero ed uscire, ma esegue comunque anche la
divisione [aa]/[bb] generando l'errore.
Da qui la necessità del secondo IIf() che, se [bb] fosse zero o nullo, lo
sostituirebbe con un uno in modo che l'espressione si trasformi in [aa]/1
e non dia errore.
Se [bb] è zero o null il primo IIf() restituisce zero, pur eseguendo anche
il calcolo [aa]/1 risultante dal secondo IIf().


Tutto chiaro, Denghiu.....Cld 

 wrote in message 
news:demk97$i1m$1...@news.newsland.it...

Grazie,
ma io mi sono un pò perso...
quest'altra come diventerebbe:
=IIf(IsNull([aa]) or IsNull([bb]) ;0;([aa]/(CDbl([bb])*24)))
ciao 

 ciao
E' la stessa di prima, c'è solo un *24 in più:
=IIf(Nz([aa];0)=0 Or Nz([bb];0)=0;0;CDbl([aa]/IIf(Nz([bb];0)=0;1;[bb]*24)))
