Filtrare maschera continua con più filtri contemporaneamente

di BingSula il
10 risposte

Buonasera a tutti, 

usando Access 2003, avrei bisogno di filtrare una maschera continua inserendo più filtri contemporaneamente. 

Ora uso (e funziona) delle caselle di testo in cui inserisco una parte di testo da cercare e clicco su un pulsante dove c'è questo codice:

Dim strWhere As String

   If Not IsNull(Me.Testo18) Then

        strWhere = strWhere & "([rag soc] Like ""*" & Me.Testo18 & "*"") "

            End If

        Me.Filter = strWhere

        Me.FilterOn = True

Questo suddetto codice sta in ogni pulsante relativo ad ogni casella di testo (ragione sociale, comune, indirizzo ecc..) ma funziona solo se filtro sempre una cosa alla volta. 

Vorrei invece avere un unico pulsante che vada ad applicare un filtro leggendo il contenuto di tutte le caselle di testo (vuote comprese) in modo da applicare più variabili e non sempre una alla volta. E' possibile?

Grazie

10 Risposte

  • Grazie Antony73. Ho risolto così prendendo spunto dal tuo post. 

    Private Sub Comando15_Click()

    Dim strWhere As String
       If Not IsNull(Me.Testo9) Then
           strWhere = strWhere & "([ragsoc] Like ""*" & Me.Testo9 & "*"") And "
       End If
       
       If Not IsNull(Me.Testo11) Then
           strWhere = strWhere & "([indirizzo] Like ""*" & Me.Testo11 & "*"") "
       End If
           
           Me.Filter = strWhere
           Me.FilterOn = True

    End Sub

  • Se si verifica la condizione:

    IsNull(me.testo11)=true

    Cosa credi che succeda?

  • Azz, hai ragione, ho appena riprovato e mi restituisce errore. Non so perché ma giuro che mi sembrava funzionasse.. come faccio ora? Alla fine vorrei solo replicare l'istruzione per ogni casella di testo solo che non riesco a farlo.. Forse così pare funzionare..

    Dim strWhere As String

        If Not IsNull((Me.Testo9) & Not IsNull(Me.Testo11)) Then

            strWhere = strWhere & "([ragsoc] Like ""*" & Me.Testo9 & "*"") And "

            strWhere = strWhere & "([indirizzo] Like ""*" & Me.Testo11 & "*"") "

        End If

    Me.Filter = strWhere

    Me.FilterOn = True

    Grazie

  • Così non funzionerà mai. Della discussione che ti ho indicato hai letto solo una parte, ma non hai capito il senso. Ti consiglio di concentrarti sul motivo di usare la funzione Mid().

  • Però funziona, almeno sembra da un po' di prove che ho fatto..

  • Fai come ti pare.

  • Hm… con il dovuto rispetto, la seconda soluzione è peggio della prima. Con la prima si genera errore solo in una condizione, con la seconda generi errore in tre condizioni.

    AND lo devi mettere all inizio della seconda concatenazione e non alla fine della prima.

    Inoltre devi anche decidere cosa fare se uno dei valori è null. In entrambi i codici in cado di null la query non restituisce nessun valore.

  • Questo succede quando si prende spunto da qualcosa senza capire il contenuto.

Devi accedere o registrarti per scrivere nel forum
10 risposte