Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sql en el activate del formulario? (https://www.clubdelphi.com/foros/showthread.php?t=42840)

chipsoni 24-04-2007 12:56:39

Sql en el activate del formulario?
 
Necesito que una vez al dia, mi programa compruebe las fechas de todas las entradas de una tabla y si alguna entrada tiene mas de 30 dias y nu determinado estado, necesito que cambiar el estado y poner un campo de esa misma entrada a true.

El tema es que lo hago en el activate del formulario principal y no hace nada, os pego aqui el codigo que he escrito en el activate de la ventana principal. No se si lo que esta mal es el codigo o es que no se puede hace en el activate:

with Query do
begin
with SQL do
begin
DataModule1.tdemanda.Close;
Clear;
DataModule1.tdemanda.Open;
Add('UPDATE tdemanda set tdemanda.estado=3, tdemanda.hecho=1');
Add('WHERE (tdemanda.fecha+30< :fecha) and (tdemanda.estado=1)');
ParamByName('fecha').AsDate:= date();
Execute;
end;
end;

chipsoni 24-04-2007 12:57:37

Muchas gracias, por dedicar un poco de vuestro tiempo a ayudarme, o al menos a intentarlo, que se me ha pasado ponerlo en la pregunta.

Neftali [Germán.Estévez] 24-04-2007 13:07:01

¿Qué significa que no hace nada? ¿No pasa por ahí? ¿No se ejecuta?
¿Lo has ejecutado paso a paso? Pon un BreakPoint y comprueba que el código se ejecuta.

Independientemente, yo te aconsejaría no colocar ese código en el Activate, ya que es un evento que puede ejecutarse muchas veces (más de las que deseas). Puedes utilizar el OnShow, o poner un Timer para asegurarte de que se ejecuta cada cierto intervalo de tiempo.

Lepe 24-04-2007 13:11:34

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; // no debería estar abierta jamás... pero bueno.
  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

karlaoax 24-04-2007 16:15:31

Yo te recomiendo usar un Timer, asi lo programarias para ue se ejecutara cada 24 horas, auqnue es cierto tu evento OnActivate o OnShow de tu formulario tambien es una buena solucion.

droguerman 24-04-2007 18:16:33

porque no pruebas a hacerlo como tarea programada, así te peleas menos con los eventos.

o si usas SQL Server tambien puedes programarlo con el Agente SQL


La franja horaria es GMT +2. Ahora son las 22:22:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi