Filtrare gruppi di anni in una query

di il
4 risposte

Filtrare gruppi di anni in una query

Miei cari,più volte mi sono trovato davanti a questo problema ma l'ho sempre superato con un arzigogolo. Ora basta.
Mi piacerebbe sapere come si risolve. E vengo al dunque:
In una tabella ho tanti record che riferiscono a date sia ripetitive che diverse.
Nella maschera dove voglio visualizzare questi record, ho predisposto una casella combinata per selezionare di volta in volta l'anno di riferimento che mi interessa visionare, oppure TUTTI. Nella SELECT UNION che mi elenca gli anni infatti, ho messo in testa la parola "TUTTI" e poi tanti anni quanti sono presenti nella mia tabella.
Bene:
Estrarre solo i record relativi ad un solo anno o a TUTTI, non è un problema: nella query su Campo, relativo a dataIns ho messo: Espr1: year([dataIns]) e poi nei criteri,

Like iif([maschere]![M_Contributi_GE].[anno_rif]="TUTTI";"*";[maschere]![M_Contributi_GE].[anno_rif])

Punto.
Il problema che voglio risolvere è quello di estrarre gli anni a partire da quello selezionato nella combo a scendere, perciò se metto nei criteri:

Like iif([maschere]![M_Contributi_GE].[anno_rif]="TUTTI";"*"; <= [maschere]![M_Contributi_GE].[anno_rif])

succede che non si capisce più niente e niente gli va bene ad Access in qualunque minestra.

Posso avere una mano per favore su questo argomento?

saluti e grazie
antonio

4 Risposte

  • Re: Filtrare gruppi di anni in una query

    Vanno di moda i Filtri ultimamente...!

    TI rimando a questo 3D in quanto suggerisco un LINK che tratta in modo più funzionale come gestire i Criteri di selezione(Filtro).
    forum.masterdrive.it/access-79/codice-vba-per-filtrare-maschera-n-combo-box-95223/

    Chi ha poca pratica vede le cose in modo errato, e si trova a dover scrivere query estremamente poco efficienti per implementare Filtri complessi.
    Ti suggerisco di valutare l'uso della proprietà FILTER e, applicare i Criteri SE e SOLO SE servono... altrimenti il Recordset deve essere pulito... non con acrocchi con Asterischi per forzare un Criterio a non fare il suo lavoro.
  • Re: Filtrare gruppi di anni in una query

    Si Alex, mi conoscerai per aver poca esperienza ma anche se abbiamo sempre molta fretta, mi piace ritornare sulle cose e rifletterci sopra.
    Ho recepito il tuo messaggio e sono sicuro che la strada che indichi è quella giusta.
    E' da ieri che rifletto e provo e ti scrivo per portarti un pò di esiti.

    Devo prima fare un mea culpa. La storia non l'ho raccontata tutta.
    La mia prima selezione di un anno base o di "Tutti" gli anni che effettuo con la prima combo, mi serve per passarla ad un'altra combo allo scopo di farmi visualizzare pochi eventi (legati all'anno di riferimento) su cui effettuare una ulteriore selezione finale che mi elencherà nella maschera continua i dettagli.
    Come giustamente fai notare, su click della prima combo, (selezione dell'anno di riferimento), dovrei costruire una stringa "filtro".
    Mi sembra giusto e per me facile. Il problema che mi sorge però è questo, e non so se ti stupisco, ma io non so applicare un filtro ad una combo.
    Forse dovrei inserirlo nella SELECT della combo? ma non saprei come si accede alla proprietà di Origine Riga della combo.

    Scusami se non sono stato molto chiaro in prima battuta.
    saluti
    antonio
  • Re: Filtrare gruppi di anni in una query

    Non sono certo di aver correttamente interpretato la questione del Filtro alla Combo, ma se intendi che la 2° Combo viene filtrata in cascata alla selezione della 1°Combo... allora puoi vedere questo esempio:
    forum.masterdrive.it/access-79/controlli-bound-sincronizzati-in-cascata-45725/

    In ogni caso, si devi mettere un criterio nella Query SQL della 2° Combo.
  • Re: Filtrare gruppi di anni in una query

    Ho scovato una tua precedente soluzione su web dove proponevi di modificare il controlsource mediante l'impostazione di TAG.
    Purtroppo anche se nel tuo esempio si poteva applicare ad una combo, a me mi ha sempre lasciata la SELECT della riga vuota se non addirittura mi modificava la query della maschera ospite.

    Il mio scopo era quello di andare a modificare proprio l'origine riga di una sua combo. C'è anche da dire che il tuo codice non l'ho compreso appieno.

    Ho quindi adottato una soluzione che in fondo non è male. Nella query della combo2 ho utilizzato la riga Oppure (OR) dei criteri per ottenere la lista totale dei record quando nella combo1 seleziono "TUTTI".

    Quando nella combo1 seleziono un anno specifico, nella riga 1 dei criteri di combo2 individuo (con ">=") il range che mi interessa.
    Quando nella combo1 seleziono "TuTTI", nella riga 2 di combo2 (OPPURE), comprendo tutti gli anni

    In pratica la mia query diventa:

    SELECT ID_Eve, evento FROM Eventi
    WHERE (((Year([aperto]))<=[maschere]![M_Contributi_GE].[combo1]))
    OR (((Year([aperto])) Like IIf([maschere]![M_Contributi_GE].[combo1]="Tutti","*",False)));

    che per ora, anche se con l'amaro in bocca, mi soddisfa.

    grazie di tutto
    antonio cuomo
Devi accedere o registrarti per scrivere nel forum
4 risposte