Yo dispararía con posta...
Quiero decir, que puedes 'traducir' la query a valores entre fechas, y pasar de meses y años.
Código:
//Año=2000 ->
SQL.Add('Select * from tabla');
SQL.Add('where fecha_factura >= '+ quotedstr(01/01/2000)+' and fecha_factura<= ' +Quotedstr(31/12/2000);
//Año = 2000 y Mes=02
SQL.Add('Select * from tabla');
SQL.Add('where fecha_factura >= '+ quotedstr(01/02/2000)+' and fecha_factura<= ' +Quotedstr(29/02/2000)
Ten en cuenta que tendrás que 'manipular' mínimamente la generación de fechas para ajustarlo, pero esto funciona perfectamente.
Otra solución es pasar de años meses y pirulas , y que se introduzcan los límites en formato fecha. Desde fecha hasta fecha. Que quieres un año entero, desde el 1 de Enero al 31 de Diciembre. Que quieres un mes, desde el 1 del mes al último día del mes. Que el usuario haga algo demonios, que no se limite a quejarse únicamente.
Por cierto, si cada vez generas el código de la query ¿ para qué utilizas parámetros ? Lo lógico es que dejes la query parametrizada y sólo cambies el valor de los susodichos interfectos, es decir, los parámetros.
Espero no haberte liado mucho y que te sirva de ayuda
Un saludo