Indicare ad una query tutto il periodo

di il
5 risposte

Indicare ad una query tutto il periodo

Buongiorno,
ho creato una maschera con delle combobox e delle textbox
Ora quando vado a compilare i dati mi aggiorna una sottomaschera che recupera i dati da una query.
due di queste textbox corrispondono al periodo.. dal - al...
Secondo il gentilissimo consiglio di un altro utente mi ha fatto generare il codice secondo la funzione between casella di testo and casello di testo.

Pero mi sono reso conto che se facessi : casella di testo dal = ( vuoto ) e la casella di testo =01/01/2050 non mi restituisce nulla, invece se mettessi dal= 01/01/1900 al 01/01/2050 mi restituisce dei valori.
Pensavo, come posso dire ad access che se la textbox = nulla deve mettere tutti ??

5 Risposte

  • Re: Indicare ad una query tutto il periodo

    Per primo non si comprende come hai gestito con il "Between" il criterio... devi spiegaro meglio, magari dacci un Link da cui capire lo scenario.

    Se hai usato una Query Parametrica con i criteri... nonostante sicuramente funzioni, non è il modo più funzionale, soprattutto se devi filtrare in modo Flessibile Oggetti DatBound.
    Le query con criteri, hanno un'efficienza ridotta rispetto alle queries senza criteri, se poi ai criteri devi aggiungere la condizione di Implementazione del TUTTI... è un Nuovo Criterio, se questi fossero N si avrebbe una Query con efficienza molto scadente.
    Access in questo offre la possibilità di gestire la proprietà FILTER dell'oggetto DataBound che è una Form, in modo estremamente più funzionale avendo come principio il fatto che se un Criterio non serve... non si usa.

    Quindi dovrai basare la tua Form su una Tabella o Query senza alcun Criterio, poi costruirai la WHERE CONDITION in modo dinamico ed applicherai quella che corrisponde al necessario... e se nessun criterio è richiesto, li rimuovi.
    Esempio
    
    Dim strFilter As string
    If IsDate(Me!DataInizio) And IsDate(Me!DataFine) Then strFilter="CampoData Between " & clng(Me!DataInizio) & " AND " & clng(Me!DataFine)
    
    If Len(strFilter)>0 then
       Me.NomeSubForm.Form.Filter=strFilter
       Me.NomeSubForm.Form.FilterOn=True
    Else
       Me.NomeSubForm.Form.FilterOn=False
    End if
    Questa è una LOGICA FUNZIONALE... se poi i criteri diventano N la struttura da usare è la stessa con concatenazione
    
    Dim strFilter As string
    If IsDate(Me!DataInizio) And IsDate(Me!DataFine) Then strFilter="(CampoData Between " & clng(Me!DataInizio) & " AND " & clng(Me!DataFine) & ") AND "
    If Len(Me.ComboSelezione & vbNullstring)>0 Then strFilter="(CampoIdEsempio = " & Me!ComboSelezione & ") AND "
    .... ' ecc per tutti gli N criteri che si possono fare...
    
    If Len(strFilter)>0 then
       strFilter=Mid$(strFilter,1,len(strFilter)-5) ' uso [-5] per rimuovere " AND " finale di concatenazione del Criterio
       Me.NomeSubForm.Form.Filter=strFilter
       Me.NomeSubForm.Form.FilterOn=True
    Else
       Me.NomeSubForm.Form.FilterOn=False
    End if
  • Re: Indicare ad una query tutto il periodo

    Allora....
    Ho una query di nome costi_per_bailancio_specifico

    casellacombinata14 = corrisponde alla colonna lavorazione della query
    testo4 ( corrisponde a dal) = corrisponde alla colonna data della query
    testo6 ( corrisponde a al) = corrisponde alla colonna data della query
    casellacombinata16 = corrisponde alla colonna tipo di costo della query

    Come devo strutturare la macro ?
    Io avevo cliccato su genera evento sulla colonna data della query e li messo il between.

    Cosa intendi per: proprietà FILTER dell'oggetto DataBound che è una Form?
  • Re: Indicare ad una query tutto il periodo

    Danilo... guarda che ti ho fornito il codice funzionante(devi solo mettere i nomi specifici del tuo applicativo)... che tipo di dubbio ti viene...?
  • Re: Indicare ad una query tutto il periodo

    Mi sorge il dubbio su questa riga :
    strFilter="CampoData Between " & clng(Me!DataInizio) & " AND " & clng(Me!DataFine)

    come faccio a dire che strFilter corrisponde a quella precisa query? E Che il filtro deve andare proprio nella colonna data di quella query?
  • Re: Indicare ad una query tutto il periodo

    Quello che dici non ha alcun senso... la proprietà FILTER viene applicata alla Maschera che ha già la definizione dell'Origine... come ti ho spiegato prima.
    Non volendo fare una lezione di cosa sia l'uso di FILTER in contrapposizione all'uso di QUERY parametriche, ti rimando alla lettura su un Libro di Base.
Devi accedere o registrarti per scrivere nel forum
5 risposte