Filtrare record in Microsoft Access è la tipica attività che si svolge con un database. Se costruiamo l’interfaccia ai nostri dati e vogliamo davvero aiutare l’utente, è bene dedicare il tempo necessario.
Abbiamo visto diversi video che utilizzano la casella combinata per filtrare i record di una maschera.
Oggi impariamo a usare una casella di testo e una casella di riepilogo per filtrare i record: mano mano che digitiamo caratteri nella casella di testo, automaticamente cambia l’origine riga della casella di riepilogo. Dalla casella di riepilogo possiamo facilmente filtrare i record presenti sulla maschera cliccando sul valore desiderato.
La soluzione richiede pochi elementi:
– una tabella con i clienti
– una maschera con una casella di testo, una casella di riepilogo e i controlli nel corpo per visualizzare i dati
Nota che la casella di riepilogo non ha origine riga impostata. E’ impostato solo il numero di colonne = 2 e la larghezza colonne: 0 (in tal modo nasconderemo la prima colonna e lasceremo visibile solo la seconda).
Ora dobbiamo scrivere il codice. Come sempre, poche righe, che possiamo imparare tutti!
Seleziono la casella di testo e vado sulle proprietà, tab Eventi.
Scelgo l’evento Su tasto su. Ci clicco dentro e poi tasto destro e dal menu scelgo Genera… e dalla finestra che si apre scelgo Generatore di codice.
Ora che siamo nel codice vogliamo che quando si scatena l’evento su tasto su, venga eseguita una nostra procedura chiamata sRicerca:
Private Sub txtCliente_KeyUp(KeyCode As Integer, Shift As Integer) sRicerca End Sub
Dopo la riga End Sub digitiamo il seguente codice per iniziare la nostra procedura:
Sub sRicerca()
poi premiamo il tasto invio e dovremmo ottenere questo:
Sub sRicerca() End Sub
bene. Qui dopo l’intestazione, ossia dopo la riga Sub e prima della riga End, scriviamo l’istruzione che aggiorna l’origine riga della casella di riepilogo in base a quello che abbiamo digitato nella casella di testo:
Me.lstElencoClienti.RowSource = "SELECT ID, Company FROM tblClienti WHERE Company Like ""*" & Me.txtCliente.Text & "*"""
Attenzione! l’istruzione precedente va scritta tutta su una sola riga.
Non rimane che impostare il filtro quando si fa clic sulla casella di riepilogo. Aggiungiamo un evento su clic per la casella di riepilogo. Per questo selezioniamo la casella di riepilogo e poi nelle proprietà, tab Eventi cerchiamo Su clic. Ci posizioniamo sulla riga, poi clic con il tasto destro e nella finestra che si apre scegliamo, come già visto sopra, Generatore di codice.
Servono solo due istruzioni. Con la prima impostiamo il filtro:
Me.Filter = "ID=" & Me.lstElencoClienti
ossia vogliamo filtrare solo i record il cui ID è uguale a quello della casella di riepilogo (su cui abbiamo appena fatto clic)
e poi attiviamo il filtro:
Me.FilterOn = True
Il codice completo è il seguente:
Private Sub lstElencoClienti_Click() Me.Filter = "ID=" & Me.lstElencoClienti Me.FilterOn = True End Sub
Private Sub txtCliente_KeyUp(KeyCode As Integer, Shift As Integer) sRicerca End Sub
Sub sRicerca() Me.lstElencoClienti.RowSource = "SELECT ID, Company FROM tblClienti WHERE Company Like ""*" & Me.txtCliente.Text & "*""" End Sub
Considera che se la tabella clienti contiene migliaia di righe, potremmo sperimentare un certo ritardo quando digitiamo le lettere nella casella di testo, perché a ogni tasto premuto viene eseguito il codice che imposta l’origine riga.