Query con condizione

di il
3 risposte

Query con condizione

Gentilissimi, vorrei sottoporre la vostra attenzione su questo semplice problema:
ho una maschera con una casella di testo (X) e una casella di controllo (flag SI/NO)

Devo fare un filtro in base al valore stringa inserito in X

In pratica:
se il flag è falso il filtro agisce non tenendo conto della posizione della stringa all'interno del campo testo della tabella da filtrare,
se il flag è vero la query cerca ESATTAMENTE il testo inserito in X all'interno del campo testo della tabella da filtrare.

In termini di algoritmo:
If flag = falso
variabile = "*" & [Casella di testo.Value] & "*"
else
variabile = [Casella di testo.Value]
dove variabile è la stringa che passerei all'istruzione di selezione: Select * from Tabella where Tabella.Campo = variabile

Esempio:
Se casella di testo = "corso"
nel caso di flag falso, vengono filtrati anche i campi che contengono stringhe del tipo "corso di lingua inglese"
nel caso di flag vero, vengono filtrati solo i campi contenenti esattamente "corso".

Ora mi chiedo: nella routine evento in VBA, devo costruire la query interamente con il linguaggio SQL (Select …) o Access permette di costruire un parametro (parametro che sopra ho chiamato variabile) che poi posso passare al costruttore di query di Access nella riga dei Criteri?

Ringrazio per l’attenzione
Buona giornata

3 Risposte

  • Re: Query con condizione

    Perchè vai sulla Query che deve essere rivista...?
    Come sai i criteri che includono il JOLLY richiedono il LIKE al contrario quelli per ricerca esatta no...

    Io lascerei la Query come sta senza questo criterio, poi una riga di codice VBA per comporre il criterio da passare a FILTER(comodo soprattuttto se poi si stampa...)
    Ipotizzo un Button che applica il Filtro:
    
    Private Sub NomeButton_Click()
        Dim sWH     As String
        
        sWH = Replace(Me!NomeTextBoxCriterio, "'", "''")
        
        If Len(sWH) = 0 Then
            If Me.FilterOn Then Me.FilterOn = False
        Else
            Select Case Me!NomeCheckBox
                Case True:  sWH = "NomeCampo = '" & sWH & "'"
                Case Else:  sWH = "NomeCampo LIKE '*" & sWH & "*'"
            End Select
            Me.Filter = sWH
            If Not Me.FilterOn Then Me.FilterOn = True
        End If
    End Sub
  • Re: Query con condizione

    Quindi imposto il filtro nella routine e non utilizzo i Criteri nella griglia per la costruzione delle query, giusto?
  • Re: Query con condizione

    Ti ringrazio per il codice che a me può far comodo in quanto non avvezzo alla programmazione ... Buona giornata
Devi accedere o registrarti per scrivere nel forum
3 risposte