Il tuo problema deriva dal principio di funzionamento del filtro.
Hai diversi modi per filtrare una tabella:
[list=1][*]utilizzare un componente TQuery che ti permette di estrarre dati da una tabella specificando i criteri di selezione attraverso uno statement SQL (soluzione consigliata);[*]specificare un filtro nella proprietà Filter seguendo determinate regole che puoi leggere nella Guida in linea di Delphi; l'impostazione della proprietà Filtered a True attiva il filtro; se vuoi cambiare il filtro, occorre impostare Filtered a False, modificare opportunamente la proprietà Filter e ripristinare Filtered a True;[*]utilizzare l'evento OnFilterRecord (come hai fatto tu); l'evento viene generato durante la fase di caricamento dei dati in cui, per ogni record, è possibile controllare il contenuto dei campi e stabilire se il record deve essere accettato oppure no.[/list=1]
Nella tua implementazione, siccome il filtro avviene giudicando ogni record in fase di "fetching" (reperimento), devi fare in modo che i record vengano ricaricati quando cambia il filtro. Prova a chiudere e riaprire la tabella quando l'utente seleziona un filtro diverso dal precedente dall'apposita ComboBox. In questo modo, si rende necessario reperire e filtrare nuovamente i record, ma verrà applicato il nuovo criterio selezionato.
Ti ho scritto anche altre soluzioni poichè l'uso dei filtri non è il metodo ottimale, in termini di prestazioni, per selezionare dei record, anche se è semplice da utilizzare. Il motivo è che devono essere ispezionati tutti i record (invece dei soli record interessati e selezionati tramite query, ad esempio) per poter decidere se sono validi oppure no.
Fai qualche prova, poi mi saprai dire.
Ciao!![]()