Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   ejecutar codigo de delphi cada 24 horas (https://www.clubdelphi.com/foros/showthread.php?t=68276)

richy08 04-06-2010 23:03:55

ejecutar codigo de delphi cada 24 horas
 
buenos dias compañeros tengo una duda y no encuentro como atacarla, estamos por terminar una aplicacion que controla la funcionalidad de un hotel, en diho sistema existe un proceso que es llamado night audit, el cual una persona a la media noche tiene que ira presionar un boton para que cargue las noches y consumos de itinerario que halla tenido el huesped durante el dia, tambien corre procesos que hacen interfax con un pbx, y un punto de restaurant llamado aldelo, pero ahora nos pide el cliente que dicho proceso se ejecute automaticamente, inicialmente los dodigos los mande a procedimientos almacenados los cuales puedo controlar la hora en que quiero que se ejecuten pero las interfaces pbx, aldelo extraigo datos de otras bases de datos por lo cual un procedimiento almacenado no me sirve, he estado viendo el timer de delphi pero ese componente no me resuelve el problema o al menos no he encontrado la forma de utilizarlo, la pregunta es existe la posibilidad de especificarle a delphi que corra dicho codigo diario a las 12 de la noche gracias por cualquier comentario.

Casimiro Notevi 04-06-2010 23:12:04

Puedes hacerlo de varias formas, con timers o sin ellos, por ejemplo con decodetime, échale un vistazo a esa función.

richy08 04-06-2010 23:16:07

gracias casimiro voy a buscar info sobre este comando

Casimiro Notevi 04-06-2010 23:30:48

Mira este hilo.

richy08 04-06-2010 23:46:11

gracias casimiro ya tengo un timer en mi aplicacion que me muestra la hora y fecha en el sistema pero este timer lo tengo que se este actualizando cada segundo ahora lo que pretendo hacer es que este leyendo una tabla de mi base de datos no resultaria esto muy costoso para la aplicacion? anexo el codigo
Código Delphi [-]
procedure TFrm_Menu.RelojTimer(Sender: TObject);
var d,m,a:Word;
mes,dia:String;
begin
Decodedate(now,a,m,d);
case m of
 1 :mes:='January' ;
 2 :mes:='February' ;
 3 :mes:='March' ;
 4 :mes:='April' ;
 5 :mes:='May' ;
 6 :mes:='June' ;
 7 :mes:='July' ;
 8 :mes:='August' ;
 9 :mes:='September' ;
 10 :mes:='October' ;
 11 :mes:='November' ;
 12 :mes:='December' ;
end;

case DayOfWeek(now) of
 1 :dia:='Sunday' ;
 2 :dia:='Monday' ;
 3 :dia:='Tuesday' ;
 4 :dia:='Wednesday' ;
 5 :dia:='Thursday' ;
 6 :dia:='Friday' ;
 7 :dia:='Saturday' ;
end;
stb_panel.Panels[0].Text:=Application.Hint;
stb_panel.Panels[1].Text:='Date:  '+dia+', '+IntToStr(d)+' of '+mes+' of '+IntToStr(a);
stb_panel.Panels[2].Text:='Time:  '+TimeToStr(Time);
//pretendo hacer algo asi
Qry_ultimacorrida.close;
qry_ultimacorrida.open;
MyDate := EncodeDate(a,m,d);
if Qry_ultimacorrida.fieldbyname('fecha').asdatetime>=muydate then
begin
//desencadena proceso
end;
end;

Casimiro Notevi 05-06-2010 00:21:08

Pero si sólo quieres que se ejecute a una hora determinada, entonces te sobra bastante de ese código, quedaría algo así como:

Código Delphi [-]
private
  var
    bProcesado : boolean;  <- poner a false en el oncreate o en onshow 

...
...
...

procedure TFrm_Menu.RelojTimer(Sender: TObject);
var
  ho,mi,se,mm : Word;
  bProcesado : boolean;
begin
  bProcesado := false;
  Decodetime(now, ho,mi,se,mm);
  if (ho=0) and (mi=0) and (se=0) and (not bProcesado) then
    HacerLoqueTengasQueHacer();
end;


procedure HacerLoQueTengasQueHacer();
begin
  loquesea;
  otracosa;
  //
  bProcesado := true;
end;

La variable bProcesado sirve por si tarda más de un segundo en HacerLoQueTengasQueHacer que no lo vuelva a ejecutar.

richy08 05-06-2010 00:47:10

pues en realidad no el codigo que puse lo hice para darle presentacion a la aplicacion indicando el tiempo y la fecha en la que estamos, muchas gracias por tu ayuda me diste una luz para poder programarlo mil gracias por tu tiempo

Casimiro Notevi 05-06-2010 00:59:06

Para eso puedes simplificarlo con los parámetros de FormatDateTime, ejemplos:
Código Delphi [-]
stb_panel.Panels[1].Text:= FormatDateTime('dd-mm-yyyy hh:nn',Now);
Código Delphi [-]
stb_panel.Panels[1].Text:= FormatDateTime('ddd. dd/mm/yyyy  hh:nn',Now);

richy08 05-06-2010 01:05:43

si tiens mucha razon no lo habia pensado asi

richy08 05-06-2010 20:38:40

Cita:

Empezado por Casimiro Notevi (Mensaje 366253)
Pero si sólo quieres que se ejecute a una hora determinada, entonces te sobra bastante de ese código, quedaría algo así como:

Código Delphi [-]private var bProcesado : boolean; <- poner a false en el oncreate o en onshow ... ... ... procedure TFrm_Menu.RelojTimer(Sender: TObject); var ho,mi,se,mm : Word; bProcesado : boolean; begin bProcesado := false; Decodetime(now, ho,mi,se,mm); if (ho=0) and (mi=0) and (se=0) and (not bProcesado) then HacerLoqueTengasQueHacer(); end; procedure HacerLoQueTengasQueHacer(); begin loquesea; otracosa; // bProcesado := true; end;


La variable bProcesado sirve por si tarda más de un segundo en HacerLoQueTengasQueHacer que no lo vuelva a ejecutar.

me quede pensando en la parte del codigo donde usas la variable bProcesado, la idea es que la aplicacion se este ejecutando siempre asi es que no volveria a ejecutarse hasta que se cerrara y se abriera el programa :confused: pero vi algo que sifnifica esto
(ho=0) and (mi=0) and (se=0) = 12:00 de la mañana si es asi esto
indica (ho=59) and (mi=59) and (se=59) esto seria las
12 de la noche??

gracias :D

arturom 05-06-2010 20:46:08

Hola,
ho=0 son las 0 horas,
mi=0 es el minuto 0,
se=0 es el segundo 0,
00:00:00 son las 12 de la noche.
Como no existe la hora 59, pero si los 59 minutos y 59 segundos, si usas, por ejemplo, las 23:59:59 es justo un segundo antes de la media noche.
Las doce del medio día serán entonces las 12:00:00

Saludos

richy08 05-06-2010 20:52:54

Cita:

Empezado por arturom (Mensaje 366299)
Hola,
no existe la hora 59, pero si los 59 minutos y 59 segundos, si usas, por ejemplo, las 23:59:59 es justo un segundo antes de la media noche.

Saludos

tienes razon jejej:p bueno ya es fin de semana creo que con esto ya puedo segui adelante gracios a los dos buen fin de semana:D

Ñuño Martínez 07-06-2010 10:33:21

Sé que llego tarde pero, ¿no sería mejor dejar que sea el sistema operativo quien se encargue? Programas un "cron" (o lo que sea que tenga Windows, que no lo recuerdo) y a correr...

richy08 07-06-2010 16:38:22

ñuño martines pues si tiens razon seria una buea opcion:D


La franja horaria es GMT +2. Ahora son las 07:52:55.

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