Uso di criteri per filtrare record da query

di il
7 risposte

Uso di criteri per filtrare record da query

Miei cari, sono capitato in un vicolo chiuso.
Ho una query con la quale voglio filtrare i record di una tabella che hanno un campo di tipo data.
La query è associata alla maschera "M_Eventi"
Nei criteri del campo (che si chiama "chiuso") della query , faccio riferimento ad una casella di testo in cui inserisco a seconda del caso "Is Null" oppure "Is Not Null".
Nei criteri del campo "chiuso" ( di tipo data) ho inserito : Like [Maschere]![M_Eventi]![casella di testo].
Naturalmente non ho dimenticato di dare il comando Me.Requery dopo l'aggiornamento della casella di testo

Bene: non mi elenca nessun record!
Se tolgo "Like" mi dà errore.
Se provo a mettere manualmente Is Null oppure Is Not Null, tutto funziona regolarmente.
La cosa funziona perfettamente se (per debug) provo ad inserire con la stessa casella di testo, valori numerici nei criteri di altri campi numerici
Ho fatto diversi altri tentativi per debuggare, ma inutilmente, sapreste darmi qualche consiglio?
grazie antonio cuomo

7 Risposte

  • Re: Uso di criteri per filtrare record da query

    Prova a scrivere:
    [Maschere]![M_Eventi]![chiuso]
  • Re: Uso di criteri per filtrare record da query

    Ciao osvaldo, sempre in sella vedo.
    Allora: "chiuso" è il nome del campo in tabella e quindi è già nella query mentre "casella di testo" è la casella della maschera da cui devo prelevare la stringa di confronto.
    Se inverto non vado in loop?
  • Re: Uso di criteri per filtrare record da query

    Credo sia un problema di valore restituito dalla textbox.
    Mettendo il criterio a Null nel caso in cui la textbox restituisca un Nullstring il criterio fallirebbe.
    Quindi per prendere entrambi i valori, perché Null e Nullstring sono 2 valori differenti, puoi analizzare il len(textbox & "")>0
    Concatenare con la stringa nulla ha effetto di conversione in stringa e consentire sempre l'uso della funzione Len anche in caso di null
  • Re: Uso di criteri per filtrare record da query

    Per la verità, io faccio un doppio passaggio e mi spiego:
    Uso una combo per interfacciarmi con l'utente dove ho tre voci in elenco : "Aperti", "Chiusi" e "Tutti"
    Dopo la selezione, in VBA, analizzo il risultato ed inserisco nella textbox "casella di testo", il valore "Is Null" oppure "Is Not Null" oppure " * ".
    If Me!stato = "Aperti" Then Me!tipo_eve = "Is Null"

    Nella query ho modificato così, il criterio pensando di interpretare il tuo suggerimento ;
    Like IIf(Len([maschere]![M_Eventi]![tipo_eve] & "")>0;[maschere]![M_Eventi]![tipo_eve] & "";"")

    Ma ancora nulla di fatto
    Addirittura nessun record anche se nei criteri scrivo :
    Like IIf(Len([maschere]![M_Eventi]![tipo_eve])=0;Is Null;Is Null)
    Ho altro che potrei fare ?
  • Re: Uso di criteri per filtrare record da query

    antocuomo ha scritto:


    Ho una query con la quale voglio filtrare i record di una tabella che hanno un campo di tipo data.

    Nei criteri del campo (che si chiama "chiuso") della query , faccio riferimento ad una casella di testo in cui inserisco a seconda del caso "Is Null" oppure "Is Not Null".
    Nei criteri del campo "chiuso" ( di tipo data) ho inserito : Like [Maschere]![M_Eventi]![casella di testo].
    La funzione isdate() dovrebbe essere quello che cerchi ....
  • Re: Uso di criteri per filtrare record da query

    Non saprei come usarla max, vedi io non devo estrarre date particolari, ma solo record che hanno una data oppure non hanno una data in quel campo.
    Il fatto è che quando dico ad access di riferirsi ad una textbox della maschera, si gira dall'altra parte e non esegue nulla anche con la IIF che ho testato poco fa.
    E' un vero mistero.
  • Re: Uso di criteri per filtrare record da query

    Appurato che utilizzando la forma indiretta per filtrare da una query un campo di tipo data non è cosa facile in Access, vi propongo una mia soluzione rabberciata per ottenerlo ugualmente.

    Come già detto nella mia maschera, ho una combo che dialoga con l'operatore per fornire tre opzioni.
    Esse sono:
    Estrarre i record dove nel campo c'è una data.
    Estrarre i record dove nel campo non c'è una data
    Estrarre tutti i record indifferentemente.

    Dall'analisi della scelta, in VBA vado a scrivere nella textbox che ho chiamato "tipo_eve":
    "A" nel primo caso
    "B" nel secondo caso
    "AB" nel terzo caso

    Nella query, nella zona in alto dove c'è il nome del campo, ho scritto :
    Len([chiuso] & "")
    nei criteri del campo :
    IIf(InStr([Maschere]![M_Eventi]![tipo_eve];"A")>0;0)
    Or
    IIf(InStr([Maschere]![M_Eventi]![tipo_eve];"C")>0;10)

    Fra le tante, sicuramente migliori, questa è stata la mia soluzione, e mi soddisfa.

    saluti antonio
Devi accedere o registrarti per scrivere nel forum
7 risposte