Código Delphi
[-]
DbFarmacia.ADOQuery1.Open;
DbFarmacia.ADOQuery1.Active;
DbFarmacia.ADOQuery1.SQL.Add('select * from DATOS');
DbFarmacia.ADOQuery1.ExecSQL;
DbFarmacia.ADOQuery1.First
¿No estás haciendo las cosas un poco desordenadas? Lo digo porque aunque no falle, me parece que estás haciendo más cosas de la cuenta...
(1) Haces un Open y luego un Active ¿Eso no es redundante?
(2) Luego asignas el SQL ¿Eso no debería estar antes del Open/Active?
(3) Lo normal al añadir (como ya te han dicho) texto a la propiedad SQL, es limpiar lo que hay antes (Clear), porque si se pasa dos veces por ese punto, aunque la primera funcione, la segunda seguramente fallará.
Creo que deberías pensar detenidamente el código que tienes escrito e intentar entenderlo.