Newsgroup: it.comp.appl.access
Titolo: Funzione IIF

Ho un campo in un report che mi deve visualizzare da una query il CAMPO2
soltanto se il CAMPO1 è vuoto, altrimenti mi deve visualizzare il CAMPO1:
nel campo del report ho generato l'espressione:
=IIf(IsNull([CAMPO1]);[CAMPO1];[CAMPO2])
Ma non funziona....il CAMPO1 non viene mai visualizzato mentre il CAMPO2 se
esiste si...
dove sbaglio?
Grazie!!!

 =IIf(IsNull([CAMPO1]);[CAMPO1];[CAMPO2])
Prova con:
    =IIf(IsNull([CAMPO1]);[CAMPO2];[CAMPO1])
Ciao. Claudio.

> "KeRub" news:7naq9.23913$%
M1.6...@twister2.libero.it
:

        Nz([CAMPO1];[CAMPO2])
-oppure-
        =IIf(IsNull([CAMPO1]);[CAMPO2];Nz([CAMPO1];""))
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------


ha scritto:

--------------------------------
Inviato via 
http://usenet.libero.it

 ha scritto nel messaggio
news:aocm80$jspsp$1...@ID-52090.news.dfncis.de...


NON VA
"Claudio" <cld@NOSPAM&COsupereva.it> ha scritto nel messaggio
news:G9bq9.39852$Fz.11...@news1.tin.it...


 ha scritto nel messaggio
news:80Z93Z79Z61Y10...@usenet.libero.it...


 >     =IIf(IsNull([CAMPO1]);[CAMPO2];[CAMPO1])
Non gridare, e scrivi dopo il quoting.
Perché non va? La tua formula iniziale è errata come concetto (il secondo
argomento è quello restituito dalla funzione se la condizione del primo è
verificata). Prima si comportava erroneamente (coerentemente con l'errore), ma
adesso qual é il problema? Che cosa restituisce un'istruzione del tipo:
MsgBox "'" & Nz(CAMPO1, "Null") & "'" & CAMPO1.ControlType
Ciao. Claudio.

"Claudio" <cld@NOSPAM&COsupereva.it> ha scritto nel messaggio
news:z8vq9.53272$cS4.2...@news2.tin.it...

Scusa ma mica volevo essere incazzato.....si trovava già in maiuscolo e così
ho scritto...
La formula che ho utilizzato me l'hanno suggerita
=IIf(IsNull([CAMPO1]);[CAMPO1];[CAMPO2]), mentre la tua
=IIf(IsNull([CAMPO1]);[CAMPO2];[CAMPO1]) mi esce scritto direttamente
#Errore.....ha importanza se i campi sono in formato testo?

 #Errore.....ha importanza se i campi sono in formato testo?
No, non ha nessuna importanza. Però evidentemente manca qualche informazione.
Prova a scrivere:
=Nz([CAMPO1];"Ciao bello")
E' solo una prova, per capire se non hai qualche problema sul CAMPO2. Dimmi che
ti scrive.
Ciao. Claudio.

Ciao,
non riesco a far lavorare  questa formula (in origine consigliata da
Roberto)
Inserisco la casella di testo nella maschera,
 che contiente le caselle combinate : Livello, Profilo e Fascia .
ID   Profilo         Livello     Fascia
1     Impiegato         1                1
Vorrei che quando seleziono il Dipendente Pippo, che è di Profilo Impiegato,
di Livello 1, di Fascia 1
mi esca l'ID 1
Così in origine controllo, scrivo :
=IIf(IsNull ([Profilo]);Null;IIf (IsNull ( [Fascia] ) ; Null ; IIf(Isnull
[Livello]);Null;IIf(IsNull (DLookUp ("[Id]";"[Paga]";"Livello=" & [Livello]
& "And Profilo=''' & [Profilo] & ''' And Fascia =" & [Fascia])); "Non
esiste";DlookUp ("[Id]"; "[Paga]";  ''Livello='' & [Livello] & '' And
Profilo=''' & ''' And Fascia='' & [Fascia]))))
L'errore che mi dà è : Errore di sintassi nell'espressione. E' possibile che
è stato immesso un operando senza un operatore.
grazie
--
------

> "Enzo" news:aoga4b$l2g29$
1...@ID-24065.news.dfncis.de
:

    Gli errori presenti nella tua formula sono numerosi ma e' quasi
impossibile non commetterli se non si segue una opportuna strategia nella
costruzione della formula. Per esempio io uso questa:
IIf
(
  IsNull( [Profilo] )
; Null
; IIf
  (
    IsNull( [Fascia] )
  ; Null
  ; IIf
    (
      IsNull( [Livello] )
    ; Null
    ; IIf
      (
        IsNull
        (
          DLookUp
          (
            "[Id]"
          ; "Paga"
          ; "[Livello]" & "=" & [Livello]
          & " And "
          & "[Profilo]" & "=" & """" & [Profilo] & """"
          & " And "
          & "[Fascia]"  & "=" & [Fascia]
          )
        )
      ; "Non esiste"
      ; DlookUp
        (
          "[Id]"
        ; "Paga"
        ; "[Livello]" & "=" & [Livello]
        & " And "
        & "[Profilo]" & "=" & """" & [Profilo] & """"
        & " And "
        & "[Fascia]"  & "=" & [Fascia]
        )
      )
    )
  )
)
che potresti pero' anche scrivere (se non sbaglio: fammi sapere, grazie):
Nz
(
  DLookUp
  (
    "[Id]"
  ; "Paga"
  ; "[Livello]" & "=" & Nz([Livello];"NULL")
  & " And "
  & "[Profilo]" & "=" & """" & [Profilo] & """"
  & " And "
  & "[Fascia]"  & "=" & Nz([Fascia];"NULL")
  )
; "Non esiste"


 wrote in
news:aoga4b$l2g29$
1...@ID-24065.news.dfncis.de
: 

  Hai fatto un po' di confusione con gli spazi e gli apici doppi. 
  Così dovrebbe andare:
=IIf(IsNull([Profilo]); Null; IIf(IsNull([Fascia]); Null; IIf(Isnull
([Livello]); Null; IIf(IsNull(DLookUp("[Id]";"[Paga]";"Livello=" & 
[Livello] & " And Profilo='" & [Profilo] & "' And Fascia =" & [Fascia])); 
"Non esiste"; DlookUp ("[Id]"; "[Paga]"; "Livello=" & [Livello] & " And 
Profilo='" & [Profilo] & "' And Fascia=" & [Fascia])))) 
  Ciao.
--
http://digilander.libero.it/winses

 ha scritto nel messaggio
news:aoga4b$l2g29$1...@ID-24065.news.dfncis.de...

Io non la ho scritta come l'hai postata tu, prova con:
=IIf(IsNull([Profilo]);Null;IIf(IsNull([Fascia]);Null;IIf(IsNull([Livello]);
Null;IIf(IsNull(DLookUp("[ID]";"[Paga]";"Livello =" & [Livello] & " And
Profilo=" & Chr$(34) & [Profilo] & Chr$(34) & " And Fascia=" &
[Fascia]));"Non esiste"; DLookUp("[ID]"; "[Paga]"; "Livello =" & [Livello] &
" And Profilo=" & Chr$(34) & [Profilo] & Chr$(34) & " And Fascia=" &
[Fascia])))))
e stai attento che prima e dopo le parole And ci sia uno spazio.
Copia bene! ;-))
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 )
neanche questa funziona......da sempre #Errrore
Spero che non mi ammazzi.........ma nel  primo messaggio ho omesso di dire
che il valore ID si trova nella
tabella Paga.........e che Livello, Profilo, e Fascia sono caselle combinate
della tabella "Scegli tre parole".
ma forse non cambia niente ??
grazie x l'aiuto.

 e stai attento che prima e dopo le parole And ci sia uno spazio.
Controllato Nisbaaaaa :((
Non c'entra niente quello che ho scritto nell'altro post ? ( ti prego non mi
ammazzare....io fino a 3 settimane fa gestivo tutto con 5 cartelle di lavoro
Excel..lo so debbo dimenticarlo... )
Già che mi trovo.....:)
Riepilogo per chi non avesse seguito le puntate precedenti :
grazie a Roberto ho impostato un database per gestire i dati anagrafici e la
pianta organica del nostro personale,
vi sono 4 tabelle : Anagrafico, Paga, Storico, Scegli tre Parole.
Ed un unica maschera (Ponte) nella quale ho impostato tutte le query
possibili ed immaginabili.
Ho due pulsanti di comando : "Aggiorna" e "Copia nello Storico".
Con il primo "aggiorno" la tabella Anagrafico quando effettuo dei
cambiamenti, e con "Copia nello Storico" copio lo stesso record modificato
nello Storico. Mi son detto in effetti basta avere un solo pulsante che
faccia tutte e due le operazioni, ma non sono riuscito a crearlo.
Ho tentato di creare una macro :che aggiornasse la maschera, e poi che
aprisse la query con la quale copio il record nello storico. Ma non va.
Ho provato più volte, mi sono arrabbiato e per "sfogare" questa rabbia, ho
cliccato un pò più a lungo sul pulsante "Copia nello storico", mi è partita
la clessida, e quando sono andato a vedere cosa era successo nello Storico
mi sono ritrovato con circa 15.000 record in più [partivo da 167 :)]. Mi
chiedo, visto che il database è destinato ad un'altra persona, come faccio
ad evitare che in momenti di "rabbia" di quest'altra persona, succeda la
stessa cosa ? e sopratutto come faccio a farlo cliccare su un unico pulsante
?
p.s.
grazie x l'aiuto....sta venendo un bel database.

 ma forse non cambia niente ??
    Chi puo' dirlo?...
    Ma vedo che adesso sei nuovamente nelle mani di Roberto, col quale avevi
iniziato il discorso, e mi limitero' a leggervi.


 PARTITA I, funziona......spiegami perchč
Non lo so, a me funziona anche con CODICE FISCALE e PARTITA IVA. Ho provato per
essere sicuro. Win2K ITA & A2K ITA.
Ciao. Claudio.

         Nz([CAMPO1];[CAMPO2])
Lo hai mai provato come origine controllo?
Ciao. Claudio.

 Lo hai mai provato come origine controllo?
    Si'. Perche'?


 grazie x l'aiuto....sta venendo un bel database.
Sono contento per te.


     Si'. Perche'?
Perché ho provato, e sebbene funzioni perfettamente da codice, se lo
inserisco in un origine controllo di un report restituisce #Errore, ma
solo quando il secondo argomento è un'altro controllo (e quando il primo
argomento è Null). Se il secondo argomento è una stringa funziona bene
(Es. Nz(Campo1;"Vuoto").
Per questo mi chiedevo se l'avevi provata...
Ciao. Claudio.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Per questo mi chiedevo se l'avevi provata...
    Capito. In tal caso potresti usare:
        =Nz([CAMPO1];Nz([CAMPO2];Null))


 risolto.
Son riuscito ad eliminare tutte e due i pulsanti :)
...mettendo nella finestra Proprietà della Maschera, alla voce After
Update il nome della macro che fa partire la query di accomodamento.
ma rimane un problema :
se inserisco un nuovo record dalla mascera (per inserire un nuovo
dipendente),
non viene copiato nello Storico.....
grazie e buon week-end a tutti ......domani SCIOPERO !!!

 grazie e buon week-end a tutti ......domani SCIOPERO !!!
--


 ha scritto nel messaggio

Poteva anche darsi che Campo2 fosse anche il nome del controllo dova hai
messo l'istruzione iif
Sib


lo inserisci nel codice Vba della maschera....o in un modulo a se ?
Cosa scrivi nella finestra proprietà della maschera alla voce AfterUpdate?

         =Nz([CAMPO1];Nz([CAMPO2];Null))
Hai un'idea del motivo per cui succede questo? In teoria la funzione
Nz([CAMPO2];Null) è un nonsenso logico... dovrebbe essere equivalente a
[CAMPO2].
Ciao. Claudio.

 Cosa scrivi nella finestra proprietà della maschera alla voce AfterUpdate?
Io non ci scrivo nulla, ma Access, dopo che io ho generato il codice VBA, ci
scrive da solo [Routine evento]; io clicco con il mouse sui tre puntini
(...)  che si evidenziano spostando il puntatore del mouse sul margine
destro della casella della proprietà Dopo aggiornamento e genero quanto
scritto sopra.


 [CAMPO2].
    La logica c'entra poco con l'informatica. E' piu' importante leggere il
manuale di riferimento. ;-))))
    Cerca la pagina:
        Informazioni preliminari sulle costanti di Microsoft Access
dove, in fondo, in fondo, in fondo e' scritto:
************************************************************
Costanti definite dal sistema
Le costanti definite dal sistema True, False e Null possono essere
utilizzate ovunque in Microsoft Access. È possibile ad esempio utilizzare
True nella seguente espressione di condizione della macro. La condizione
viene soddisfatta se l'impostazione della proprietà Visible per la maschera
Impiegati corrisponde a True.
Forms!Impiegati.Visible = TrueLa costante Null può essere utilizzata ovunque
in Microsoft Access. È possibile ad esempio utilizzare Null per impostare la
proprietà DefaultValue per un controllo di maschera utilizzando la seguente
espressione:
=Null
************************************************************
    Come vedi quel Null che abbiamo usato nella formula non e' la stessa
cosa del Null come valore del campo.


 manuale di riferimento. ;-))))
Boh? Quindi secondo te Access si comporta con coerenza anche in questo
frangente?!
Tu stesso hai dato come risposta a KeRub una soluzione più che logica, che
all'atto pratico si rivela non funzionante. E continui a difenderlo a spada
tratta!
Credo proprio che tu sia innamorato ;-)
Ciao. Claudio.

 Credo proprio che tu sia innamorato ;-)
    Io? Di un software? Ci son cascato anch'io. Pero' ormai son libero e
disponibile e non prendo piu' scottature. Io non m'innammoro piu'. Del
software.


 software.
Allora non sei più disponibile...
Ciao. Claudio.

 discussione, a noi tanto cari. Tutto serve a qualcosa.
    Concordo. :-))))


 scritto sopra.
lo so che possa somigliare ad una barzelletta, ma ecco quello che accade :
ho inserito il modulo di classe, da cui faccio partire la query di
accomodamento;
inserisco nella proprietà della maschera la stessa espressione usata nel
modulo;
provo a vedere se funziona = nisba, il record nuovo non viene copiato nello
storico;
allora sono andato nella query di accomodamento e ho cambiato la proprietà
join in :
Includi tutti i record di "Anagrafico" e solo i record di "Storico" in cui i
campi collegati sono uguali. (in pratica la seconda possibilità offerta)
così funziona, forse anche troppo bene :
l'ultimo  record  modificato viene copiato 2 volte nello storico
Perchè ??
se invece inserisco un nuovo record dalla maschera nella tabella Anagrafico,
un solo record viene copiato nella tabella Storico.
Questo è il codice Sql della query di accomodamento :
INSERT INTO Storico ( DataVariazione, Matricola, Nominativo, [Luogo di
nascita], [Data di nascita], Sesso, [Data Assunzione], Livello, Profilo,
Contratto, Al, [Lab/Sett/Ufficio/Servizio], [Codice Fiscale], Coordinatore,
Fascia, [Data Ultima Fascia], [Titolo di studio], Area, [Id Retribuzione] )
SELECT Forms!Ponte!DataVariazione AS DataVariazione, Anagrafico.Matricola,
Anagrafico.Nominativo, Anagrafico.[Luogo di nascita], Anagrafico.[Data di
nascita], Anagrafico.Sesso, Anagrafico.[Data Assunzione],
Anagrafico.Livello, Anagrafico.Profilo, Anagrafico.Contratto, Anagrafico.Al,
Anagrafico.[Lab/Sett/Ufficio/Servizio], Anagrafico.[Codice Fiscale],
Anagrafico.Coordinatore, Anagrafico.Fascia, Anagrafico.[Data Ultima Fascia],
Anagrafico.[Titolo di studio], Anagrafico.Area, Anagrafico.[Id Retribuzione]
FROM Anagrafico LEFT JOIN Storico ON Anagrafico.Matricola =
Storico.Matricola
WHERE (((Anagrafico.Matricola)=[Forms]![Ponte]![Matricola]));
Test :
 eseguo la query di Accomodamento, dalle finestra delle query,  inserisco
una matricola esistente nella tabella Anagrafico il record viene duplicato
nello Storico, se inserisco una matricola inesistente non viene inserito
nulla.
Riconosco  di essere un pò imbranato , ma sembra che qualcosa non quadri di
per se ?
Consigli ?
ciao

 ciao


per ora ti dico solo che  sei un Santo.......e tutto il bene che semini sarà
ricompensato.......
ciao

 altri.
hai ragione, scusa.
Qui termina  il 90 % del mio database................ancora grazie !
ciao
p.s.
nessun suggerimento x  per il thread "Idee per Quey con Date",
io sono  riuscito  a fare solo elaborazioni mensili in base al personale in
servizio, ma nessun eleborazione annuale.