Funzione Iif problema su filtro maschera

di il
10 risposte

Funzione Iif problema su filtro maschera

Buon pomeriggio a tutti e buona festa dell'Immacolata.
Come da titolo, sto cercando di filtrare i dati di una maschera con la funzione iif, mi spiego.

Ho creato una tabella denominata "Eventi" dove vengono inseriti degli eventi quindi con campo di tipo data/ora denominato Data. Creato una maschera di tipo continua con queste informazioni.
Ho creato una tabella denominata "Intervalli" con campo Data1 e Data2. Creato una maschera con quei dati.

Ho infine creato una terza maschera denominata "Consultazione" contenente la maschera degli eventi e la maschera degli intervalli. Volevo a questo punto filtrare gli eventi in base agli intervelli ma aime, la maschera "Consultazione" appare vuota...

Ho creato una query dove compaiono tutti i campi della tabella "eventi" e nel campo "Data" ho inserito il seguente criterio:

>=IIf([Intervalli]![Data1] Is Null;[Eventi].[Data];[Intervalli].[Data1]) And <=IIf([Intervalli]![Data2] Is Null;[Eventi].[Data];[Intervalli].[Data2])

Nel caso in cui la tabella Intervalli risulti vuota, dovrebbe restituirmi tutti gli eventi, altrimenti solo quelli nel range date...ma dove sbaglio?

10 Risposte

  • Re: Funzione Iif problema su filtro maschera

    Fabio a parte la minuziosa descrizione che hai fatto ... non si capisce di cosa parli... come sono legate le tabelle... di conseguenza si fatica a darti un aiuto concreto.

    Quello che è evidente è che il criterio è sintatticamente impossibile possa andare... non ha senso come è scritto.
    Un criterio in un intervallo prevede:
    Campodata Between Datainiziale And DataFinale

    Intanto prova a farlo funzionare così...
  • Re: Funzione Iif problema su filtro maschera

    Ciao Alex, ti ringrazio per la risposta.
    Paradossalmente le tabelle non sono collegate ma il filtro funge e restituisce i valori negli intervalli di data filtrati da Data1 e Data2 ma il problema è che la tabella Eventi, non stampa a video record se quest'ultimi non sono valorizzati invece, vorrei che, se non valorizzati, mi restituisse tutti gli eventi senza filtri.

    Il problema è che ho preso spunto da un video tutorial dove spiega ed illustra la cosa...in realtà li funziona...per evitare problemi di pubblicità, se preferisci posso inviarti il link del video dove fa vedere che, 2 tabelle sono collegate tra loro e quella "Intervalli" serve solo per il filtro sulle date di quelle tabelle...

    In tutti i casi, come potrei ovviare alla cosa per filtrare le date inserendole in dei campi testo? provo ad impostare il codice come mi hai suggerito facendo dei controlli sul campo data?
  • Re: Funzione Iif problema su filtro maschera

    Non so cosa aggiungere... certo che se non relazioni le tabelle lo devi fare con cognizione di causa... se invece non lo fai tanto le queries funzionano ugualmente... direi che siamo molto lontani dal metodo adeguato... e siccome non posso insistere mi rimane da suggerirti di rifletterci.

    Il fatto che possa funzionare anche senza relazioni è evidente ma il problema è a monte.

    Buon lavoro.
  • Re: Funzione Iif problema su filtro maschera

    Ciao Alex, per esigenge avevo tralasciato questa funzione, ho risolto, come da te suggerito valutando altre soluzioni.

    Ho utilizzato un filtro "Me.filter" che va a filtrare i record in base alle date inserite nelle caselle di testo ed un "Me.Requery"
    Nel caso in cui le caselle di testo non siano valorizzate, come posso impostare un messaggio di avviso?
    Ho provato così ma..
    Private Sub btnUpFiltroData_Click()
            
         If txtFiltroDataDa Is Null Then
            MsgBox ("Inserire intervallo date, VbExclamation")
         Else
        ...ciclo filtro date..
    Ma se inserisco la condizione if mi da errore runtime mentre se tolgo l'if procede col filtrare i record. Il problema è che se clicco sul pulsante "btnUpFiltroData" e le caselle di testo non sono valorizzate, giustamente mi restituisce la lista vuota
  • Re: Funzione Iif problema su filtro maschera

    Forse questa sintassi è errata
    If txtFiltroDataDa Is Null Then
    Prova a scrivere così
    If IsNull(Me!txtFiltroDataDa) = True Then
  • Re: Funzione Iif problema su filtro maschera

    Grazie mille Osvaldo, non avevo dubbi, il codice funziona

    Se invece al codice "MsgBox ("Inserire intervallo date") volessi inserire in titolo al messaggio e renderlo di tipo esclamazione?

    Sto provando così ma non va..
    MsgBox("Inserire intervallo date",1,"Filtro data", ,vbExclamation)
  • Re: Funzione Iif problema su filtro maschera

    Leggi qui
    https://support.office.com/it-it/article/Funzione-MsgBox-e23511c8-4157-4e09-93a6-ba9f1749f4c0

    Attento, hai posto una domanda diversa dal titolo principale del thread che hai aperto. Per una domanda successiva (diversa dal contesto), apri un nuovo thread.
  • Re: Funzione Iif problema su filtro maschera

    Chiedo venia, ho risolto incatenando più if..
    Dim FiltroData As Integer
        FiltroData = MsgBox("Inserire intervallo date", 0 + 48, "Filtro data")
        
        If IsNull(Me!txtFiltroDataDa) = True Then
            If FiltroData = 1 Then
        Else
        ciclo filtro data
    grazie mille per la disponibilità
  • Re: Funzione Iif problema su filtro maschera

    Conoscendo la reale differenza che passa tra NULL e NULLSTRING, trovo il controllo del NULL non esaustivo.
    Se una variabile/controllo/campo ad esempio contiene NULLSTRING, il controllo ISNULL(Variabile) fallische giustamente...!

    Suggerisco quindi di migliorare il check verificando SEMPRE il NULLSTRING che ingloba invece entrambi...
    
    If Len(MioControllo & vbNullstring)>0 Then
    ....
    Else
    ....
    End if
    Questo sistema sfrutta il fatto che il controllo può contenere NULL ma la concatenazione con vbNullString ne forza il casting del dato che diventa Stringa da Variant... quindi lunghezza misurabile, e se contiene NullString=0.

    Fate voi...
  • Re: Funzione Iif problema su filtro maschera

    Esaustivo al massimo, ti ringrazio Alex.
Devi accedere o registrarti per scrivere nel forum
10 risposte