Comencemos aclarando que mi nombre
no es Ramón, sino
Román.
Pasado este álgido punto

te comento que a juzgar por lo que veo en tu código los parámetros en tu consulta sql están mal especificados. Cada parámetro debe estar antecedido de ':'
Código:
SELECT DISTINCT COD_CLIE, REFER from CUENTAS
WHERE COD_CLIE=:a1 and FECHA_CORTE<=:a2
Por otra parte, cuando asignes los valores de los parámetros es mejor usar ParamByName(...).AsXXX para que la conversión de tipos de datos sea correcta:
Código:
Query1.ParamByName('a1').AsInteger := CLIENTESCOD_CLIE.value;
Query1.ParamByName('a2').AsDate := fecha
(Aquí estoy suponiendo que el campo COD_CLIE es un entero)
Por otra parte, no creo que usar Query1.Unprepare sirva para liberar recursos y de hecho no tiene mucho sentido usar Unprepare y Prepare cada vez que ejecutes la consulta. El método Prepare sirve para consultas parametrizadas que se usan muchas veces y en las que sólo cambia el valor de los parámetros. Prepare 'compila' la consulta de manera que subsecuentes llamadas se realicen más rápidamente y en tal caso se hace una vez antes de muchas consultas del mismo tipo y sólo se usa Unprepare al final de estas muchas consultas. Si la consulta no se usa demasiado no creo que valga mucho la pena usar Prepare y Unprepare.
// Saludos