Hola.
Lamentablemente no has indicado el motor de base de datos con el que trabajas. Los parámetros debiera "encontrarlos" ADO al asignar la sentencia SQL, por lo que no veo razón para hacer un AddParameter. Por otro lado, el mes y el año, no debieran ser un dateTime sino un Integer o SmallInt... no te parece??
Luego, tu motor debiera proveer alguna forma de obtener el mes y el año de una fecha. En firebird es la función extract, que se usa asi:
Código SQL
[-]
Select *
from t_fact_compra
where extract(month from fech_factura) = :mes
and extract(year from fech_factura) = :anio;
En cambio en Oracle podes valerte de las funciones to_number y to_char, asi:
Código SQL
[-]
Select *
from t_fact_compra
where to_number(to_char(fech_factura, 'MM')) = :mes
and to_number(to_char(fech_factura, 'YYYY')) = :anio;
Luego, he visto en menos de dos días a dos personas que primero asignan el valor de los parámetros y luego la sentencia SQL. Aunque ado podria soportarlo, segun la ayuda de la propiedad ParamCheck, me parece poco lógico hacerlo de esa forma.
Desde mi punto de vista es mas "sano" y "normal" asignar primero la sentencia SQL, de donde el motor extraerá los nombres de los parámetros, y luego asignar los valores a estos.
Hasta luego.