Filtrare con AND e/o OR

di il
4 risposte

Filtrare con AND e/o OR

Salve
Chiedo prioritariamente scusa per chiedere assistenza per un problema trattato molte volte, ma io non riesco a risolvere un dilemma che ritengo di semplice soluzione (almeno per chi ne capisce più di me).
Ho creato il mio primo DB di Access. In una maschera compare l’elenco generale che sto tentando di filtrare.
A tal fine ho creato varie caselle combinate contenenti l’oggetto del filtro. Una volta selezionati i riferimenti clicco su di un pulsante di comando e mi appare il contenuto esattamente filtrato come io voglio. Fin qui tutto semplicissimo, ma il mio problema è il seguente:
Il pulsante comando ha questo codice:

Private Sub Comando100_Click()
Me.Filter = "[Lavoro] = '" & CasellaCombinata45 & "' AND [Luogo] = '" & CasellaCombinata47 & "'"
Me.FilterOn = True

End Sub

Di conseguenza attivando il pulsante ottengo i “Lavoro” ed i “Luogo” richiesti.

Purtroppo con questo codice sono costretto a compilare tutte e due (in effetti sono più di due) caselle combinate del codice perché in caso contrario il risultato è nullo. Ovvero se volessi filtrare solo il “Lavoro” oppure solo il “Luogo” non otterrei nessun risultato.

Io invece vorrei che anche compilando UNA SOLA (o più) casella combinata ottenessi il relativo risultato
E’ come se ad “AND” si dovesse aggiungere anche “OR” … ma forse ho scritto una stupidaggine.
E allora come posso fare ?

Grazie

4 Risposte

  • Re: Filtrare con AND e/o OR

    Per una risposta corretta/adeguata/pertinente attendi l'aiuto di un utente più paziente ed esperto.
    Da parte mia, siccome si rischia di entrare in un labirinto di molte possibilità (più in là chiederai anche il Not…è capitato anche a me), io trovo molto comodo l'uso del “filtro in base a maschera” dove puoi combinare a tuo piacimento tutte le combinazioni possibili.

  • Re: Filtrare con AND e/o OR

    Grazie Osvaldo per il consiglio

    Comunque spero che qualcuno esperto mi dia una dritta. Non penso che per un professionista sia qualcosa di difficile.

  • Re: Filtrare con AND e/o OR

    Ciao,

    io sicuramente non sono pìù competente di Osvaldo ma provo a dare un contributo.

    Considera che indicativamente se hai N caselle combinate da usare come filtro, ti servono N² condizioni in OR…

    In pratica devi contemplare tutte le possibili combinazioni delle tue caselle combinate tra Null e non. 

    Nel tuo caso di due caselle la condizione filtro dovrebbe  venire così:

    Me.Filter = "([Lavoro] = '[Maschere]![TuaMaschera]![CasellaCombinata45]' AND [Luogo] = '[Maschere]![TuaMaschera]![CasellaCombinata47]') OR " & _
    	    	"([Lavoro] = '[Maschere]![TuaMaschera]![CasellaCombinata45]' AND [Maschere]![TuaMaschera]![CasellaCombinata47] IS NULL) OR " & _
    			"([Maschere]![TuaMaschera]![CasellaCombinata45] IS NULL AND [Luogo] = '[Maschere]![TuaMaschera]![CasellaCombinata47]') OR " & _
    			"([Maschere]![TuaMaschera]![CasellaCombinata45] IS NULL AND [Maschere]![TuaMaschera]![CasellaCombinata47] IS NULL)

    Ho scritto a braccia giusto per farti capire. è facile che mi sia incartato con gli apici

    Sostituisci [TuaMaschera] con il nome della tua form e testa

  • Re: Filtrare con AND e/o OR

    Ciao.

    Con una serie di select case o meglio degli if then, a seconda dei casi, crei la stringa di filtro aggiungendo gli elementi che vuoi filtrare, concatenandoli tra loro,poi passi tutto alla query o al filtro.

    Non esiste un modo univoco. Dipendedalle esigenze, amdalla quantita dei controlli da filtrare, dal tipo dei dati ed anche dalle esigenze dell utente che usa il programma.

    Raramente se si superano più di due condizioni da filtrare si può passare direttamente i dati usando una stringa diretta. Bisogna costruirla pezzetto per pezzetto.

Devi accedere o registrarti per scrivere nel forum
4 risposte