En cuanto a la pregunta nro. 1, supongo que deberás filtrar la consulta en el servidor:
No solo utilizar la propiedad Filter del TDataset, sino enviar el SQL apropiado para que te traiga solo la información relevante.
Código SQL
[-]SELECT * FROM TABLA WHERE EJERCICIO=2011
Con respecto a la pregunta nro. 3, creo que la solución es generar triggers que guarden la información que necesitas.
Código SQL
[-]
Trigger BeforeUpdate
begin
insert into LOG (fecha, valor_anterior, valor_actual) values ('Now', old.valor, new.valor);
end
No conozco SQL Server, pero debe ser algo parecido a lo que escribo.
Puedes hacer lo mismo con un trigger Before_Delete para saber cuando se ha borrado y qué valor tenía.