RecordCount que yo sepa, solo funciona en Bases como paradox, en Interbase no devuelve el valor correcto (por temas de eficiencias).
el bucle:
Código Delphi
[-]for i:= 0 to Query1.RecordCount-1 do
Puede ser sustituido perfectamente por:
Código Delphi
[-]
query1.Open;
while not query1.eof do
....
end;
Creo que por ahí viene el error, si no es eso, tendrías que añadir en la cláusula "group by mes"... (de esto último no estoy seguro, solo lo intuyo, prueba antes lo del bucle).
Saludos.