Newsgroup: it.comp.appl.access
Titolo: problemi con funzione IIf e maggiore o minore in query

lavoro in una query parametrica, il parametro proviene da una combo in
un form.
il problema è il seguente:
nella combo ho tre valori 0,2,99
con il valore 99 vorrei vedere tutti i recordi con valore 0 e 2. Il
campo della tabella su cui opero è numerico
nella query ho scritto il seguente criterio
IIf([forms]![prova]![combo1]=99;<3;[forms]![prova]![combo1])
il bello (o brutto) è che non mi seleziona nulla, mentre se nel
criterio scrivo solo <3 la selezione funziona. La sintassi IIf dovrebbe
essere corretta: ho provato sostituendo ...;<3;... con ...;2;... ed
effettivamente esegue la selezione con il criterio 2
Grazie per ogni consiglio
Sam

 ha scritto nel messaggio
news:1169639189.2...@s48g2000cws.googlegroups.com...





Grazie per ogni consiglio
Sam
like IIf([forms]![prova]![combo1]=99;"*";[forms]![prova]![combo1])
cioè se è 99 tutto, altrimenti combo1
oppure, ma più complessa:
IIf([forms]![prova]![combo1]=99;0;[forms]![prova]![combo1]) OR
IIf([forms]![prova]![combo1]=99;2;[forms]![prova]![combo1])
così se è 99 il criterio diventa 0 OR 2 se non lo è sarà [combo1] OR
[combo1]
Antonio


Funziona!
Grazie Antonio, anche se non capisco perchè non prende < o > nell IIf
Ciao
Sam

 ha scritto nel messaggio
news:1169644021.5...@q2g2000cwa.googlegroups.com...


aha!!!
questi sono quei casi in cui finalmente hanno un senso le lezioni di TAMC
sulle grammatiche e la notazione EBNF
Allora, cito dall'help sulla funzione IIF:
Sulla base della valutazione di un'espressione, restituisce una delle due
parti di un'espressione.
Sintassi
IIf(expr, truepart, falsepart)
La sintassi della funzione IIf è composta dai seguenti argomenti
predefiniti:
Parte Descrizione
expr Obbligatoria. Espressione che si desidera valutare.
truepart Obbligatoria. Valore o espressione restituita se expr è True.
falsepart Obbligatoria. Valore o espressione restituita se expr è False.
Allora. ragioniamo su truepart tanto è come la falsepart.
Dice che è un valore o un'espressione.
< 3 secondo te è un valore? Direi proprio di no, perchè l'operatore < è
binario non unario.
Espressione... che cos'è un'espressione?
Dall'help:
espressione
Combinazione di parole chiave, operatori, variabili e costanti che
restituiscono una stringa, un numero o un oggetto. Un'espressione può
eseguire un calcolo, manipolare caratteri o eseguire prove sui dati.
Anche in questo caso < 3 non è un'espressione. Lo sarebbe se fosse solo 3,
oppure x < 3 o 5 < 3 (quest'ultima restituisce false)
E quindi < 3 utilizzato dentro la iif è una sintassi errata.
Antonio

 E quindi < 3 utilizzato dentro la iif è una sintassi errata.
Ottimo Antonio, finalmente ho capito!
Ora però mi trovo di fronte ad un'altro problemino, modificando la
ricerca di prima ha digitato la seguente stringa:
Like
IIf([Forms]![prova]![combo1]=99;"*";(IIf([Forms]![prova]![combo1]=2;1;[Forms]![prova]![combo1])
Or IIf([Forms]![prova]![combo1]=2;2;[Forms]![prova]![combo1])))
cioè se ho il valore 99 prendi tutti, se ho 2, prendi sia 1 che 2, se
0 prendi 0
perchè non funzia? Va bene solo con 99
Ciao
Sam

 ha scritto nel messaggio
news:1169650057....@h3g2000cwc.googlegroups.com...





hai scritto
like iif(x = 99 ;"**" ; iif(x = 2 ; 1 ; x) OR iif(x = 2 ; 2 ; x)
se è 99 viene
like "*" or 99 dovrebbe valutare prima il like poi l'OR quindi siccome 99 è
compreso dentro "*" corrisponde a "*"
se è 2 viene
like 1 OR 2
mo', se tanto mi da tanto, viene valutata prima la OR quindi 1 OR 2 => true
OR true => true
pertanto ti viene like true che non ci fai niente
se è 0 viene
like 0 OR 0 quindi 0 OR 0 => false
pertanto ti viene like False che non ci fai niente
se mettessi il like anche sulla seconda espressione verrebbe
like iif(x = 99 ;"**" ; iif(x = 2 ; 1 ; x) OR like iif(x = 2 ; 2 ; x)
99
like "*" OR like 99 => like "*"
2
like 1 OR like 2 OK
0
like 0 OR like 0 OK
e dovrebbe andare
Antonio

> like iif(x = 99 ;"**" ; iif(x = 2 ; 1 ; x) OR like iif(x = 2 ; 2 ; x)
un altro centro!
infinitamente grato!!
Ciao
Sam

 ha scritto nel messaggio
news:1169657042....@s48g2000cws.googlegroups.com...

Uhm...
cuGGinette?
Antonio