[RISOLTO] Funzione iif nel criterio di una query per visualizzare tutti i valori non nulli

di il
4 risposte

[RISOLTO] Funzione iif nel criterio di una query per visualizzare tutti i valori non nulli

Un saluto a tutti... E' da un po che non scrivo nel forum (sebbene continui a leggerne i contenuti)...

Ho un problema con un criterio da applicare ad un campo di tipo numerico all'interno di una query. In particolare vorrei utilizzare la funzione iif per filtrare i record in base ad un valore selezionato in una combobox.

La combobox si trova in una maschera non associata che, al suo interno, ha una sotto maschera avente per origine dati la query in argomento (che è basata su una sola tabella)

Nella funzione iif ho passato i seguenti parametri:
Condizione: [Maschera]![ComboBox]=1
Parte Vera: is not null (automaticamente corretto da access in [Tabella]![Campo] is not null
Parte Falsa: [Tabella]![Campo]

La sotto maschera viene aggiornata da codice VBA nell'evento Change della combobox

Esito della query:
I valori selezionabili nella combo vanno da 1 a 10.
Se seleziono i valori dal 2 al 10 (parte falsa) la base dati mi viene correttamente filtrata visualizzandomi solo i record che nel "Campo" hanno il valore della combo.
Se invece seleziono il valore 1 nella combo (parte vera) non mi elenca tutti i valori non nulli (come vorrei)... il set di dati risulta vuoto!!!

Cosa sbaglio?

Grazie.

4 Risposte

  • Re: [RISOLTO] Funzione iif nel criterio di una query per visualizzare tutti i valori non nulli

    Capito NULLA.
    Se selezioni 1 vuoi i Nulli
    Se selezioni 2 vuoi gli altri...?

    IIF([Maschera]![ComboBox]=1;NomeCampo=Null;NomeCampo Not IsNull)
  • Re: [RISOLTO] Funzione iif nel criterio di una query per visualizzare tutti i valori non nulli

    Provo a semplificare andando diritto al problema.

    1) Creare una “tabella1” con i campi ID (numerazione automatica) e Valore (Testo Breve);
    Inserire 10 record così da ottenere qualcosa di simile;
    Tabella1
    ID Valore
    1 A
    2 B
    3 C
    4 D
    5 E
    6 F
    7 G
    8 H
    9 I
    10 L

    2) Creare una “query1” con seguente predicato SQL
    SELECT Tabella1.ID, Tabella1.Valore FROM Tabella1 WHERE (((Tabella1.ID)=IIf([inserisci valore]=1,([Tabella1].[ID]) Is Not Null,[inserisci valore])));
    
    Cuore del problema:
    Io vorrei che inserendo 1 mi escano tutti e 10 i Record (questa parte non funziona)
    mentre inserendo uno qualsiasi degli altri numeri (da 2 a 10) mi esca solo il record con valore ID corrispondente… (questa parte funziona)

    grazie.
  • Re: [RISOLTO] Funzione iif nel criterio di una query per visualizzare tutti i valori non nulli

    Sono curioso di capire perché invece di gestire la cosa come si dovrebbe fare normalmente anche a livello intuitivo tu abbia scelto questa opzione..?

    Di norma... se nella combobox non si inserisce NULLA si prendono tutti i valori altrimenti si filtra per il valore inserito...

    Il criterio va scritto cosi
    
    NomeCampo=Maschera!NomeMaschera!NomeCombo OR Maschera!NomeMaschera!NomeCombo=1
    
    Con questo se selezioni 1 li prende tutti altrimenti il valore selezionato.

    @ALEX
  • Re: [RISOLTO] Funzione iif nel criterio di una query per visualizzare tutti i valori non nulli

    Grazie @ALEX, a volte ci si perde anche nelle cose più banali comunque sei stato, ad ogni modo, motivo di riflessione.

    Probabilmente sono stato poco chiaro nell’esposizione del problema…

    Quello che volevo ottenere era selezionare un determinato valore nella combobox per filtrare la sottomaschera in maniera tale da vedere solo i record che hanno il “campo filtro” uguale al valore selezionato e, viceversa, visualizzare tutti i record quando nella combobox seleziono la voce “Tutti” (ovvero il campo con valore ID = 1)…

    Ad ogni modo l’errore è che mi ostinavo a mettere nella parte vera della funzione iif “tutti i valori non nulli” mentre avrei dovuto semplicemente visualizzarli tutti

    Ho risolto così:
    SELECT Tabella1.ID, Tabella1.Valore FROM Tabella1 WHERE (((Tabella1.ID)=IIf([inserisci valore]=1;[Tabella1].[ID];[inserisci valore])));
    ovviamente al posto del campo [inserisci valore] ho richiamato il valore della combobox nella maschera ovvero [Maschera]![NomeMaschera]![NomeCombo]

    Grazie di tutto.
Devi accedere o registrarti per scrivere nel forum
4 risposte