Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Alarma fecha hora (https://www.clubdelphi.com/foros/showthread.php?t=65264)

jerosol 01-12-2009 19:03:45

Alarma fecha hora
 
Alguien podria decirme como hacer para que suene una alarma o de un mensaje a una hora y fecha guardados en una tabla

rafita 01-12-2009 19:32:30

Hola,

Una cosa que se me ocurre es utilizar un control TTimer.
Tiene una propiedad Interval cuyo valor va en milisegundos.

Fijas la hora de la alarma en algún componente, por ejemplo un DateTimePicker.
Entonces calcular los milisegundos existentes entre la hora actual y la hora de alarma, y los guardas en la propiedad Interval de TTimer, y activas el temporizador.

En el único evento del temporizador debes poner las acciones que deseas hacer (guardar el aviso en la tabla) y desactiva el temporizador.
Saludos

jerosol 01-12-2009 19:49:08

Esta solucion se puede aplicar para varios regitros de la tabla.
Lo q e intentado a sido comparar la fecha y la hora almacenada en la tabla con las fecha y hora del sistema (date y time) pero no se xq no salta

rafita 01-12-2009 19:56:27

Vaya, creo que no había entendido bien tu problema.

Veamos, tienes una tabla con varias horas de alarma, puedes ordenarla en orden ascendente.
Por cada registro con la hora POSTERIOR a la actual calculas los milisegundos de diferencia con respecto a la hora actual.
Asignas esos milisegundos a la propiedad Interval de un TTimer y lo activas.

En el evento OnTimer haces que suene la alarma y pasas a procesar el siguiente registro de la tabla.


Otra posibilidad es tener varios componentes TTimer (los puedes generar en tiempo de ejecución según el número de registros de tu tabla), así cada uno de estos temporizadores tendrá un funcionamiento autónomo e independiente.

Saludos,

jerosol 01-12-2009 20:38:38

Sabrias decirme xq el "if" no funciona:

if (DateTimePicker1.Time=time) and (DateTimePicker1.date=date)then
showmessage(datetostr(DateTimePicker1.date) + ' '+ timetostr(DateTimePicker1.Time) +' '+ datetostr(date)+' '+ timetostr(Time ) );

si el showmessage sale muestra el resutado bien

gracias por todo

Caral 01-12-2009 21:26:59

Hola
Un pequeño ejemplo con Fecha.
Busca la fecha con el DateTimePicker y si coincide con el de la BD (DBEdit) mostrara un mensaje con sonido.
Saludos

Neftali [Germán.Estévez] 02-12-2009 09:11:50

Cita:

Empezado por jerosol (Mensaje 347905)
Sabrias decirme xq el "if" no funciona:

El problema es que tal vez estás afinando demasiado. Es decir, el Time (la función) devuelve hora, minutos, segundos y milisegundos. Algo así, por poner un ejemplo:
12:00:00:123

El problema es que si comparas esto con el Time de la Base de datos, no te dará True a no ser que coincida incluyendo las milésimas, cosa difícil.

Lo que se podría hacer es almacenar la hora "capando" el valor de milésimas, y lo mismo al consultar el Time (modificándolo para eliminar las milésimas) y dejarlo tal que así:
12:00:00:000

Aun así piensa que deberás ajustar hasta el segundo.

Otra opción (la que creo yo más recomendable) el comparar las horas contando un Delta de diferencia. Es decir, que las considere iguales si la diferencia es menor de 3 segundos (por ejemlo).

Para eso puedes utilizar las funciones que calculan diferencia entre fechas/horas.
  • HoursBetween
  • MinutesBetween
  • SecondsBetween
  • ...

jerosol 24-12-2009 16:03:02

gracias a todos me habeis sido de ayuda
feliz navidad


La franja horaria es GMT +2. Ahora son las 21:56:32.

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