Problema con i filtri

di il
10 risposte

Problema con i filtri

Buon giorno,

mi sono completamente bruciato il cervello ma... non riesco più ad applicare un filtro (cosa che ho fatto con successo diverse volte nell'ultimo mese).

Per semplificare al minimo ho creato una tabella con i campi: Marca, Tipo, Limitato al cui interno ho creato più record con gli stessi attributi (più veicoli BMW, più veicoli di tipo MOTO e AUTO, etc.)

Ho creato, poi una maschera continua, Maschera1 associata a Tabella1 che mostra tutti glie elementi senza filtrarli.
Ora vorrei, ad esempio, vedere solo i veicoli di marca BMW

Ho provato dall'esterno di Maschera1 creando una Maschera2 con un pulsante al cui click eseguo:
DoCmd.OpenForm "Maschera1"

Forms!Maschera1.Filter = "Marca = BMW"
Forms!Maschera1.FilterOn = True
Ho provato dalla stessa Maschera1 con un pulsante al cui click eseguo:
Me.Filter = "Marca = BMW"
Me.FilterOn = True
Ho provato usando una variabile String al posto di scrivere direttamente il nome della marca ma niente, ottengo sempre l'apertura di un InputBox che allego

Che cosa sto sbagliando ?
Allegati:
30193_1cb2cbced180df22963b9be37dc2755b.png
30193_1cb2cbced180df22963b9be37dc2755b.png

10 Risposte

  • Re: Problema con i filtri

    I criteri sono differenziati a seconda del FieldType.
    Nel tuo caso stai usando la sintassi per un Numero ma tu hai un Testo.
    Mancano gli Apicetti.
    Forms!Maschera1.Filter = "Marca = 'BMW'"
  • Re: Problema con i filtri

    Santo Alex, non so come ringraziarti!!!
    Effettivamente fino ad adesso avevo filtrato solo ID (e quindi numeri)...

    Nemmeno fare 100km in bici stamane mi aveva rilassato la mente... continuavo a

    Ancora grazie!
  • Re: Problema con i filtri

    Allora fai 5km a nuoto con me e vedrai che si schiariscono
  • Re: Problema con i filtri

    Ma...
    nel caso di un filtro dinamico, quindi con stringhe come queste:
    Dim strWH As String
    
    If Len(Me.cbxMarca.Value & vbNullString) > 0 Then strWH = strWH & "Marca = " & Me.cbxMarca.Value & " AND "
    If Len(Me.cbxTipo.Value & vbNullString) > 0 Then strWH = strWH & "Tipo = " & Me.cbxTipo.Value & " AND "
    If Len(Me.cbxLimite.Value & vbNullString) > 0 Then strWH = strWH & "Limite = " & Me.cbxLimite.Value & " AND "
    
    If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)
    
    Me.Filter = strWH
    Me.FilterOn = True
    Come si deve scrivere ?

    Ho provato:
    If Len(Me.cbxMarca.Value & vbNullString) > 0 Then strWH = strWH & "Marca = " & 'Me.cbxMarca.Value' & " AND "
    If Len(Me.cbxTipo.Value & vbNullString) > 0 Then strWH = strWH & "Tipo = " & 'Me.cbxTipo.Value' & " AND "
    If Len(Me.cbxLimite.Value & vbNullString) > 0 Then strWH = strWH & "Limite = " & 'Me.cbxLimite.Value' & " AND "
    
    If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)
    
    Me.Filter = strWH
    Me.FilterOn = True
    Ma mi da errore di sintassi
  • Re: Problema con i filtri

    5km!!!! Non ce la posso mai fare Alex.... dopo un anno il mio max erano 60 vasche da 25m
  • Re: Problema con i filtri

    Devi mettere gli apicetti nella parte fissa:
    If Len(Me.cbxMarca.Value & vbNullString) > 0 Then strWH = strWH & "Marca = '" & Me.cbxMarca.Value & "' AND "
    
    Fai attenzione che se le parole contengono APOSTROFI... come i Cognomi ad esempio... serve un'altro passaggio.

    P.s. nuotare è complicato dalla tecnica, fare del lungo a nuoto poi serve che la tecnica sia molto molto buona altrimenti un massacro..., mi sono permesso la battuta solo perché essendo io nuotatore(ex ormai) ho replicato ai 100km di bike
  • Re: Problema con i filtri

    Figurati Alex, fa bene distrarsi un attimo con lo sport mentre si parla di VBA
    Bellissimo il nuoto, peccato che con questo Covid le piscine sono ormai chiuse da un bel pò... mi sa che quando riprendo... affondo!

    Stavo sperimentando anche io ed avevo risolto con:
    Private Sub cmdFiltra_Click()
    
    Dim strWH As String
    
    If Len(Me.cbxMarca.Value & vbNullString) > 0 Then strWH = strWH & "Marca = '" & Me.cbxMarca.Value & "'" & " AND "
    If Len(Me.cbxTipo.Value & vbNullString) > 0 Then strWH = strWH & "Tipo = '" & Me.cbxTipo.Value & "'" & " AND "
    If Len(Me.cbxLimite.Value & vbNullString) > 0 Then strWH = strWH & "Limitata = '" & Me.cbxLimite.Value & "'" & " AND "
    
    If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)
    
    Me.Filter = strWH
    Me.FilterOn = True
    
    End Sub
    Ovviamente conviene includere l'apicetto in "' AND " e risparmiare un &.

    Mi sai suggerire una fonte per approfondire queste sintassi ? Non mi piace disturbare sempre su questo form con domande che credo siano banali per chi usa Access da un pò.
    Io ho solo letto Access 2019 Bible della WILEY (tra l'altro in inglese) e non vorrei sbagliarmi, ma non ricordo di aver visto l'argomento approfondito (ricontrollerò però).

    La questione della possibilità di apostrofo mi interessa. A breve dovrò inoltre utilizzare anche delle date come criterio di filtro e già so che la sintassi cambia (basteranno gli #data# ??)

    Grazie ancora per il tuo prezioso interessamento
  • Re: Problema con i filtri

    Alcune piscine tengono aperto per chi è tesserato, sono poche ma ci sono.

    Access propone la funzione BUILDCRITERIA per la costruzione dei criteri... pochi la usano ma è comodissima.

    Se vuoi studiare un poco, puoi leggere questo mio articolo con tanto di esempi, ho costruito una classe che agevola la costruzione completando e sfruttando la funzione Nativa.

    masterdrive.it/microsoft-access-79/msaccess-costruzione-criteri-semplici-complessi-102049/

    Ciao
  • Re: Problema con i filtri

    Grazie, me lo leggo subito!

    P.S.: Purtroppo la mia piscina ha deciso di non aprire (ecco perché esco molto di più in bici) e dato che ho un abbonamento annuale praticamente congelato dopo il primo mese... attendo tempi migliori... e cerco di imparare a programmare Grazie!
  • Re: Problema con i filtri

    Serve il tesseramento agonistico però non l'abbonamento

    Fai attenzione che quell'esempio è discretamente tecnico.
Devi accedere o registrarti per scrivere nel forum
10 risposte