Query con iif

di il
27 risposte

Query con iif

Buongiorno a tutti

inizio con spiegare la situazione e poi il problema

ho una maschera in cui l'utente inserisce valori per tre campi “tipologia pratica” (una combo box), “stato pratica” (combo box) e “annualità” (text box) , cliccando sul pulsante “cerca” si apre un report basato su una query che preleva alcuni campi dalle tabelle

tipologia pratica è un campo obbligatorio quindi se l'utente non sceglie un'opzione, un messaggio avvisa che va effettuata la scelta.

stato pratica e annualità non sono obbligatori, quindi se l'utente specifica qualcosa la query deve prelevare solo i record che hanno stato pratica e annualità uguali a quelle inserite nella maschera, altrimenti se l'utente non specifica nulla, la query deve prelevare tutti i record (però rispettando sempre il criterio su tipologia pratica)

come posso specificare nella query tutto ciò? 

vi riporto qui quello che avevo fatto io ma non funziona e non so come impostare la query affinchè funzioni come detto sopra. 

potete aiutarmi? grazie

27 Risposte

  • Re: Query con iif

    Innanzitutto hai relazionato le tabelle prima di collegare le tabelle per creare la query?

  • Re: Query con iif

    17/04/2024 - Antony73 ha scritto:


    Innanzitutto hai relazionato le tabelle prima di collegare le tabelle per creare la query?

    si, ho creato tutte le relazioni

  • Re: Query con iif

    Vedo che stato pratica lo prelevi da una tabella.

    se selezioni stato pratica (per ipotesi da 1 a 10) cosa vuoi ottenere:

    tipo pratica: abc

    stato: 2

    tutte le pratiche abc allo stato 2 o allo stato 2 e superiori?

    piu' che like userei l'id (ti serve lo stato della pratica non gli stati che contengono %lavor% che porterebbe a piu' risultati

    if combo = 0 ; statopratica >0 ; statopratica=combo (statopratica => combo per vedere anche gli stati superiori)

    supposto che l'id = 0 sia “tutti”

    che errore ti da?

  • Re: Query con iif

    Anno: se casella_testo<> ‘’ anno=casella_testo

  • Re: Query con iif

    17/04/2024 - sihsandrea ha scritto:


    Vedo che stato pratica lo prelevi da una tabella.

    se selezioni stato pratica (per ipotesi da 1 a 10) cosa vuoi ottenere:

    tipo pratica: abc

    stato: 2

    tutte le pratiche abc allo stato 2 o allo stato 2 e superiori?

    piu' che like userei l'id (ti serve lo stato della pratica non gli stati che contengono %lavor% che porterebbe a piu' risultati

    if combo = 0 ; statopratica >0 ; statopratica=combo (statopratica => combo per vedere anche gli stati superiori)

    supposto che l'id = 0 sia “tutti”

    che errore ti da?

    non mi dà errore, semplicemente se nella maschera non seleziono qualcosa per lo stato e non inserisco l'annualità, allora mi dice che non ci sono risultati per la ricerca (è un messaggio che faccio comparire se non trova record, ma poichè i dati ci sono, doveva darmi i record e non farmi visualizzare il messaggio)

  • Re: Query con iif

    Quindi l'errore (bug) è nell'anno.

    O dai anno>01/01/1000 o bypassi l'anno cioè, nell' esempio postato, mette una condizione se la casella contiene una data altrimenti ignora il criterio.

  • Re: Query con iif

    17/04/2024 - sihsandrea ha scritto:


    Quindi l'errore (bug) è nell'anno.

    O dai anno>01/01/1000 o bypassi l'anno cioè, nell' esempio postato, mette una condizione se la casella contiene una data altrimenti ignora il criterio.

    le query non si basano sul campo anno, ma sul campo annualità che non è un campo data, ma un testo breve perchè mi serve così per fare altre cose, il campo anno invece è di tipo data ma non lo uso nelle query

  • Re: Query con iif

    18/04/2024 - fogliolina ha scritto:


    le query non si basano sul campo anno, ma sul campo annualità che non è un campo data, ma un testo breve perchè mi serve così per fare altre cose, il campo anno invece è di tipo data ma non lo uso nelle query

    un modo sbagliato di procedere… infatti hai un bug.

    supposto che il campo non sia null e appurato che non è un campo datetime.

    puoi solo attivare o disattivare il filtro

    se filtro =true allora annualità=caselladitesto senza mettere la condizione false che in questo caso ignora il criterio

    18/04/2024 - fogliolina ha scritto:


    mi serve così per fare altre cose,

    gli editbox non si pagano… io userei un altro editbox. magari un radiobutton che mostra la casella e attiva il filtro e, se la casella è vuota, avvisi l'utente.

  • Re: Query con iif

    18/04/2024 - sihsandrea ha scritto:


    18/04/2024 - fogliolina ha scritto:


    le query non si basano sul campo anno, ma sul campo annualità che non è un campo data, ma un testo breve perchè mi serve così per fare altre cose, il campo anno invece è di tipo data ma non lo uso nelle query

    un modo sbagliato di procedere… infatti hai un bug.

    supposto che il campo non sia null e appurato che non è un campo datetime.

    puoi solo attivare o disattivare il filtro

    se filtro =true allora annualità=caselladitesto senza mettere la condizione false che in questo caso ignora il criterio

    18/04/2024 - fogliolina ha scritto:


    mi serve così per fare altre cose,

    gli editbox non si pagano… io userei un altro editbox. magari un radiobutton che mostra la casella e attiva il filtro e, se la casella è vuota, avvisi l'utente.

    l'annualità c'è sempre nella tabella perchè è un campo obbligatorio. perdonami ma forse non sono stata abbastanza chiara nella spiegazione perchè dalla tua risposta ho capito che non hai capito come è impostato il tutto e cosa vorrei realizzare, è difficile spiegare a distanza soprattutto perchè non conoscete il mio progetto, quindi capisco che aiutarmi diventa un po' complicato

    io ho bisogno di un report delle pratiche, ogni pratica ha diverse informazioni tra cui la tipologia, lo stato e l'annualità, l'utente può decidere se fare la ricerca in questi modi

    1. solo per tipologia
    2. tipologia e stato pratica
    3. tipologia e annualità
    4. tipologia, stato pratica e annualità

    quindi nella query il criterio che cercavo di impostare era per i vari casi

    1. restituisci solo per tipologia selezionata e tutti stati pratica e annualità
    2. tipologia selezionata e stato pratica selezionato e tutte annualità
    3. tipologia selezionata e annualità inserita e tutti stati pratica
    4. tipologia e stato pratica selezionati e annualità inserita

    ora ho risolto in un altro modo: ho creato una query ad hoc per ogni caso, di conseguenza un report per ogni query e nel codice vba controllo cosa ha inserito l'utente per capire in quale caso si trova e chiamare il report corrispondente

    quindi ora ho queste query

    1. query per tipologia
    2. query per tipologia e stato pratica
    3. query per tipologia e annualita
    4. query per tipologi stato pratica e annualita

    ogni query ha i suoi criteri specifici per il caso e non più criteri per soddisfare più casi

  • Re: Query con iif

    Eri stata chiarissima. Forse non lo sono stato io.

    Non ti servono n query ma una query con n parametri.

    I parametri te li ho scritti. Lasciando invariati quelli che avevi scritto tu resta da variare quello dell'annualità se vuoi tutte le annualità.

    Importante è che hai risolto.

  • Re: Query con iif

    Nei criteri devi scrivere:

    • per tipologia
      • Nz([Forms]![maschera_report]![tipologiaPratica];[tipologia)]
    • per stato
      • Nz([Forms]![maschera_report]![statoPratica];[stato)]
    • per annualita
      • Nz([Forms]![maschera_report]![annualita];[annualita)]

    inoltre ti consiglierei di cambiare il nome anche al controllo di testo annualita in annualitaPratica per non confondere nel codice lo stesso controllo con il campo.

  • Re: Query con iif

    18/04/2024 - Stifone ha scritto:


    Nei criteri devi scrivere:

    • per tipologia
      • Nz([Forms]![maschera_report]![tipologiaPratica];[tipologia)]
    • per stato
      • Nz([Forms]![maschera_report]![statoPratica];[stato)]
    • per annualita
      • Nz([Forms]![maschera_report]![annualita];[annualita)]

    inoltre ti consiglierei di cambiare il nome anche al controllo di testo annualita in annualitaPratica per non confondere nel codice lo stesso controllo con il campo.

    non conoscevo questa funzione e l'ho cercata per capire come funziona, se ho capito bene la funziona valuta il primo argomento e se è null restituisce il secondo argomento, nel mio caso per pratica non c'è bisogno perchè ho già un controllo che obbliga l'utente a specificare qualcosa perchè quello è un parametro di ricerca obbligatorio, mentre gli altri due sono facoltativi, quindi prendo come esempio stato, qui se l'utente ha specificato qualcosa e quindi statoPratica della form ha un valore allora prende quello per la query altrimenti se è null prende stato della tabella che equivale a tutti i tipi di stato. 

    ho capito bene?

    ho provato, ma non funziona perchè mi restituisce che non ci sono pratiche che soddisfano la ricerca (invece ci sono perchè ho controllato), proprio come mi accadeva con l'iif, quindi credo che il secondo argomento così come è scritto non prende tutti i valori per stato pratica

  • Re: Query con iif

    Forse mi sono espresso male…

    condizioni che hai inserito:

    stato pratica….. tradotto: se campo stato pratica è vuoto allora mostra tutto altrimenti mostra per stato pratica.

    domanda: c'e' la possibilità che stato pratica sia vuoto? suppongo di no!

    allora la if deve solo prevedere il caso in cui serve uno specifico stato pratica.

    supponendo che la combo attinge ad una tabella statiavanzamento con:

    id       stato

    0         tutti

    1         inserita

    2         in elaborazione

    3         completata

    se combo<> tutti statopratica=combo

    diverso il discorso per l'annualità che non credo contenga null o ''

    supposto che sia un campo testo,

    se editboxannualità <>'' allora annualità=editbox

    in entrambi i casi: se hai un valore unico da cercare si attiva il filtro altrimenti è come se non ci fosse filtro.

    il filtro lo attivi al cambiamento valore della combo per lo stato

    all'evento click dell'editbox per l'annualità

    per l'editbox: premendo invio controlli 

    a) il testo è ''

    b) il testo è un anno valido

    se una delle due è verificata lanci il filtro altrimenti mandi un messaggio ‘il valore editbox non è un anno valido!’

    porti editbox a '' o all'ultimo valore inserito e non fai il requery.

  • Re: Query con iif

    17/04/2024 - fogliolina ha scritto:


    non mi dà errore, semplicemente se nella maschera non seleziono qualcosa per lo stato e non inserisco l'annualità, allora mi dice che non ci sono risultati per la ricerca (è un messaggio che faccio comparire se non trova record, ma poichè i dati ci sono, doveva darmi i record e non farmi visualizzare il messaggio)

    posso vedere questo codice?

Devi accedere o registrarti per scrivere nel forum
27 risposte