Premessa:
Hai bisogno di N caselle di edit tante quanti i campi che vuoi filtrare.
Una funzione (eseguiricerca per esempio) che esegue la sql da richiamare nel metodo keypress di ogni edit.
nel keypress: se tasto=invio eseguiricerca
--------------------------------------------------------------------------------------------------------------
vediamo la funzione esegui ricerca in dettaglio:
per brevità inserisco una ricerca su un campo ma quello che vale per un campo vale per tutti i campi dove applichi la ricerca:
parametro1=Edit.value
select * from tabella
where (campo1=[parametro1] and [parametro1]<>'')
sql.requery
se edit.value='pippo' la sql diventa
select * from tabella
where campo1='pippo'
se edit.value='' la sql diventa
select * from tabella
ignorando la parte where in quanto non soddisfa una delle condizioni ([parametro1]<>'') e mostrando tutti i record (imposta un limite se necessario con 'limit')
Vediamo adesso con due campi:
parametro1=edit1.value
parametro2=edit2.value
select * from tabella
where (campo1=[parametro1] and [parametro1]<>'')
and (campo2=[parametro2] and [parametro2]<>'')
in questo caso:
se parametro 1 è valorizzato ('pippo') e parametro 2 è valorizzato ('pluto')
select * from tabella
where campo1='pippo'
and campo2='pluto'
se parametro1='' e parametro2='pluto'
select * from tabella
where campo2='pluto'
e viceversa se parametro1 è valorizzato e parametro2=''
moltiplica il tutto per ogni campo in cui vuoi fare ricerche e hai finito.
se usi combobox abbi cura che la fonte sia una sql con un valore '' in questo modo:
select campoid, campodescrizione from tabella
union
select '', ''
order by campodescrizione
al primo valore della combo avrai '' che sarebbe il vlore del parametro che annula la ricerca
parametroN=combo.value dove combo.value=''
nel caso di combo invece di usare il metodo keypress usa change...
Fai attenzione al tipo di dato: sia edit che combo sono string quindi devi convertire i valori numerici ove presenti.
Se la ricerca vuoi farla parziale basta che la sql sia così:
if edit1.value<>'' then
parametro1='*' & edit1.value
else parametro1=''
endIf
parametro2=edit2.value
select * from tabella
where (campo1 like [parametro1] and [parametro1]<>'')
and (campo2=[parametro2] and [parametro2]<>'')
in bocca al lupo!