Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-10-2004
aurafern aurafern is offline
Miembro
 
Registrado: Dec 2003
Posts: 34
Poder: 0
aurafern Va por buen camino
Question Agenda, Recordatorio, Citas, Tareas

Por favor, alguien que haya desarrollado algun modelo de aplicaciones tipo Agenda, Recordatorio, Citas, Administrador de Tareas.
O alguien que tenga idea de cómo desarrollar un programa que me permita ingresar tareas que tengan que ejecutarse (en un sistema o manualmente): una sóla vez (fecha y hora), todos los días a la misma hora, semanalmente, mensualmente,etc..y que suene una alarma para recordarme que debo hacer la tarea que acabo de registrar o que abra una pantalla para recordarmelo,etc
(como el administrador de tareas del outlook).

En fin, no se si me expliqué bien. Pero, el punto es que necesito desarrollar un software en delphi y Firebird que me permita registrar tareas para ser recordadas el día y a la hora correcta, segun los parámetros que el usuario configure. Mi duda mas grande es, como hacer para que el programa que voy a desarrollar se entere que llegó la fecha y la hora estipulada por el usuario, y que por tal razón debe sonar una alarma o mostrar una pantalla recordándome el evento

Muchas gracias, por la atención prestada!!
Responder Con Cita
  #2  
Antiguo 27-10-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: May 2003
Ubicación: Ciudad de México
Posts: 20.181
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Una idea:

Para empezar definiria dos tablas

tareas = (fecha, hora, tipo)
tipos = (volatil, diaria, semanal, mensual, anual, secular)

Cada vez que toque el turno de ejecutarse una tarea examinas su tipo.
  • Si es volátil (sólo se realiza una vez) ejecutas la tarea y borras el registro.
  • Si es diaria ejecutas la tarea y actualizas el campo fecha sumándole un día.
  • Si es semanal ejecutas la tarea y actualizas el campo fecha sumándole una semana.
  • etc.
Cada x tiempo consultas la base:

Código SQL [-]
select * from tareas
where
  fecha = today() and
  hora >= now()

La sintaxis exacta te la dejo de tarea (primera tarea a programar )

Las tareas del día actual que ya se hayan realizado no entrarán dentro de esta selección pues ya les actualizaste la fecha, de manera que la selección te devolverá las tareas más próximas al momento de la consulta que aún no se han realizado.

La precisión será mayor mientras más frecuentemente consultes al servidor. Si consultas, digamos, cada cinco minutos, cabrá la posibilidad de que alguna tarea se ejecute con cinco minutos de retraso.

// Saludos
Responder Con Cita
  #3  
Antiguo 28-10-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: May 2003
Posts: 7.424
Poder: 23
Lepe Va por buen camino
Al inicio de la aplicación, como dice Roman, podrías lanzar una cosulta y ver la tarea más proxima, lanzar un Timer (revisa SetTimer y KillTimer de la unidad Windows) y listo. Por supuesto, cuando se modifique una fecha de la tarea, tendrías que revisar ese Timer y cambiarlo.
Código Delphi [-]
  SetTimer(frmppal.Handle,1, 100000, @EventoTimer);
// el 1 indica el identificador de cronometro.
//  programa el crono para 100.000 milisegundos, cuando llegue se ejecutará el 
// procedimiento EventoTimer (la arroba, es porque necesita la direccion del 
// evento).

procedure EventoTimer();
begin
  alarma y ver la siguiente tarea pendiente.
  Killtimer(frmppal.handle,1);// matamos el crono 1
end;
Si no recuerdo mal, SetTimer te permite programar el cronometro para 9 semanas (si dejas el ordenador encendido tanto tiempo....)

Tambien añadiría: Avisar con X minutos/dias/meses/años de antelación.

En la tabla Tareas, yo añadiria un campo Estado (Pendiente, Pasada, Finalizada) para mostrar al usuario en un grid las tareas de forma personalizada.


PD: En lugar de "volatil" yo usaria "Eventual"
Responder Con Cita
  #4  
Antiguo 28-10-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: May 2003
Ubicación: Ciudad de México
Posts: 20.181
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Hola Lepe,

No entiendo muy bien cuál sería la dinámica de la técnica que describes. Ten en cuenta que puedes tener varias tareas a lo largo de un día de manera que la aplicación debe estar ejecutándose todo el tiempo para cualquier tarea posible durante el día, de manera que no alcanzo a entender eso de "ver la tarea más próxima al iniciar la aplicación".

El campo Estado que mencionas, ¿cuál es el objetivo?. Es decir, ¿qué significa que una tarea esté pendiente? ¿Qué aún no toca el turno de realizarla? Pues eso te lo indica la fecha y hora al igual que si ya está pasada. Lo de Finalizada puede tener sentido si de alguna manera el sistema lleva registro no sólo de cuándo llevar a cabo una tarea sino del progreso de la tarea en marcha.

Lo de Eventual en lugar de Volatil pues te doy toda la razón, no se me ocurría ningún término adecuado .

// Saludos
Responder Con Cita
  #5  
Antiguo 29-10-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: May 2003
Posts: 7.424
Poder: 23
Lepe Va por buen camino
Si quiere añadir eso de "Permitir avisar de la tarea con una Antelacion de X minutos", entonces lo lógico a mi parecer, es añadir un nuevo campo llamado FechaCrono (Fecha real de la tarea restando la antelacion elegida).

Cita:
Empezado por roman
no alcanzo a entender eso de "ver la tarea más próxima al iniciar la aplicación".
¿Firebird puede vigilar un campo de tipo fecha para que al llegar la hora informe al programa?

Yo hice un recordatorio que no usaba Bases de datos, así que tenía que ver la tarea más cercana, lanzar un timer para avisar al usuario, y despues ver la siguiente tarea para establecer de nuevo el timer.
Cita:
La precisión será mayor mientras más frecuentemente consultes al servidor. Si consultas, digamos, cada cinco minutos, cabrá la posibilidad de que alguna tarea se ejecute con cinco minutos de retraso.
Si lanzas un timer, nunca habrá retrasos, y además no tendrás que consultar al servidor. Ésta es mi idea.

Cita:
El campo Estado que mencionas, ¿cuál es el objetivo?.
Tienes razon Roman, pero si añades "avisar con Antelación" lanzar una consulta con la Fecha de Aviso y Antelación para saber si ya ha pasado o está pendiente, puede ser engorrosa, sobre todo si permites avisar con X minutos/horas/dias (distintas unidades de tiempo que tendrás que restar a la fecha de aviso).

O incluyes el Flag Estado, o bien chequeas la FechaCrono.

Yo prefiero añadir un Flag de estado y hacer una consulta por ese flag, en lugar de chequear Fechas y horas. Además, si pides un listado de todas las tareas, puedes imprimir el campo Estado, y de un vistazo, saber cuales han pasado y cuales no. Depende de las opciones que quiera dar al usuario.


Saludos

Última edición por Lepe fecha: 29-10-2004 a las 12:14:17.
Responder Con Cita
  #6  
Antiguo 12-06-2007
O.M.A.R O.M.A.R is offline
Registrado
 
Registrado: Jun 2007
Posts: 1
Poder: 0
O.M.A.R Va por buen camino
Tengo un apuro....

Disculpa pero soy nuevo en esto de los foros y quisiera saber si me pueden ayudar.....
Es sobre el mismo tema del Recordatorio. Pero yo solo quisiera una pequeña aplicación en la que el programa emita una alarme o un mensaje a la hora que le asigne el usuario, debo usar un Timer y un DateTimerPicker pero en realidad no sé como utilizarlos...
De antemano muchas gracias...
y Disculpa la molestia...
Responder Con Cita
  #7  
Antiguo 12-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: May 2003
Posts: 7.424
Poder: 23
Lepe Va por buen camino
Bienvenido al foro OMAR.

Tienes mucha documentación, busca en el foro por Timer, seguro que encontrarás código acerca de él. Busca tambien por MillisecondsBetween que te será de ayuda.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:02:34.


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