El OnActivate se produce cada vez que recibe el foco la ventana, así que puede ejecutarse más de una vez.
Quizás una forma de hacerlos, sea al arrancar la aplicación. Para hacerlo una sola vez al día, puedes guardar en un archivo ini la fecha de la última comprobación. Si esa fecha es menor que la fecha actual, entonces lanzas la consulta.
Código Delphi
[-]
if ultimaFechaComprobacion < Date() then
with Query do
begin
with SQL do
begin
DataModule1.tdemanda.Close; Clear;
Add('UPDATE tdemanda set estado=3, hecho=1');
Add('WHERE (fecha+30< :fecha) and (estado=1)');
ParamByName('fecha').AsDate:= date();
DataModule1.tdemanda.Execute
end;
end;
Saludos