¿qué 50 % entendiste?
Normalmente tienes puestos checkbox, componentes TDatetimePicker, RadioButtons, etc para que el usuario elija el tipo de filtrado. Después tienes rutinas que según lo seleccionado, construyes la claúsula Where de esa consulta.
En lugar de modificar directamente la propiedad query1.sql para ir añadiendo las restricciones, usa una variable String, donde guardas las restricciones:
Código Delphi
[-]
var strWhere: string;
begin
if radiobutton1.Checked then
strWhere := strWhere + ' where tipoProducto = 3'
if chkPagado.Checked then
strWhere := strWhere + ' and pagado = true';
Para el query dinámico:
Código Delphi
[-]
querydinamico.sql.text := 'select * from tabla ' + strWhere;
querydinamico.Open;
Para el que cuenta los registros:
Código Delphi
[-]
query1.sql.text := 'select count(*) from tabla ' + strWhere;
Query1.Open;
Saludos.