Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   un evento que funcione con cambio de fecha (https://www.clubdelphi.com/foros/showthread.php?t=34648)

Carlos Hurtado 16-08-2006 22:00:07

un evento que funcione con cambio de fecha
 
Hola amigos , tengo un problema que talvez hurgando mas en el foro encontraria la solucion pero hasta el momento no he podido resolverlo.

Uso Delphi7, IBX y Firebird 1.5.

Estoy programando un sistema de fichas medicas, y estas exigen que el registro de la edad del paciente este actualizado.

El servidor no se apagara en la noche por lo que no puedo hacer una rutina que haga la actualizacion de la edad al encender el computador, ni tampoco confiar en que todos los dias alguien hara un clic para ejecutar una rutina a proposito.

Existe la posibilidad de hacer esto detectando el cambio de fecha para activar un procedimiento almacenado.

Si es asi, como se detecta el cambio de fecha.

Desde ya muchas gracias.

maeyanes 16-08-2006 22:11:47

Lo primero que se me ocurre es que cada vez que leas un registro de la tabla pacientes desde tu aplicación, verifiques si está cumpliendo o cumplió años, actualices la fecha y lo guardes de nuevo, todo esto antes de mostrarlo en la forma.

Otra forma sería que crees una pequeña aplicación que haga esto mismo y la pongas a que se ejecute diariamente a tal hora, mediante una tarea programada.


Saludos...

ContraVeneno 16-08-2006 22:22:05

Hombre, pues con que captures la fecha de nacimiento sería suficiente ¿no crees?

La edad sería un simple cálculo.

Carlos Hurtado 16-08-2006 22:36:40

Lamentablemente la solucion no sirve
 
Agradezco enormemente su rapida respuesta, pero las condiciones del sistema, a mi parecer hace inviable las propuestas de uds.

Periodicamente se manda informacion al Ministerio de Salud con estadisticas relacionadas con las edades y , en un universo de 30.000 registros los consumos de tiempo serian importantes.

Insisto, lo ideal seria capturar el cambio de fecha para ocupar recursos en horas en que el servidor esta casi desocupado de tal modo que durante el dia se encuantre toda la base actualizada.

Gracias.

maeyanes 16-08-2006 22:41:55

Pues la opción de una tarea programada que lance un proceso que haga lo que desees te puede servir. El proceso lo mandas a partir de las 00:00 Horas diario y que solo trabaje con los pacientes que cumplen años en ese momento.

También habría que saber que S.O. tiene el servidor.

nemesio 16-08-2006 22:42:08

Si sacas un reporte por Fecha de Nacimiento para enviar al Ministerio, solo tienes que restar la Feha actual y ya tienes la edad.
Lo otro que puedes hacer es usar un TTimer, que verifique cada cierto tiempo si se cambió la fecha del sistema, si es cierto, haces los cálculos que deseas realizar.

Saludos

Paoti 16-08-2006 23:38:46

y porque no usas una vista,


en la que un campo de la consulta o vista sea:


Obtener_Años( sysdate - Tabla.Fecha_nacimiento ) as Edad



desconozco la funcion en firebird que te devuelve la fecha y si exista una función que te devuelva los años entre dos fechas, pero eso seria la solución

bismarck_sierra 17-08-2006 01:17:17

Que tal

Yo también soy de la idea de que solo debes guardar la fecha de nacimiento y calcular la edad cuando lo requieras.

Código SQL [-]
SELECT CAST((CAST('NOW' AS DATE) - fecha_nacimiento) / 365 AS SMALLINT) AS edad FROM pacientes

La sentencia anterior te da los años, si requieres más exactitud te recomendaría que hicieras un procedimiento almacenado para que calcule, años, meses, días.

Saludos
Bismarck

ContraVeneno 17-08-2006 01:59:39

yo preferiría usar datediff(yy, fecha)

eso de dividir entre 365, como que se olvida de los años bisiestos y demás menesteres.

bismarck_sierra 17-08-2006 05:53:35

Estoy de acuerdo contigo Contraveneno, no es exacto, es por eso que recomendaba que hiciera un SP si queria exactitud.

Lo que comentas de DateDiff, al parecer no lo soporta Firebird 1.5. Tendrías que recurrir a una UDF adicional.

Saludos
Bismarck

Mick 17-08-2006 14:21:47

Dos opciones:

-Usar un simple campo calculado, de modo que a efectos del programa ni se enteraria de que no es un campo real.

- Si periodicamente se generan unas estadisticas, pues lo logico es que se calcule o actualize la edad precisamente en ese proceso de envio de estadisticas. Alguien tendra que darle a algun boton para generar las estadisticas y enviarlas, pues en ese momento antes de generarlas, realizar el proceso que sea para calcular la edad y listo.

Saludos


La franja horaria es GMT +2. Ahora son las 04:27:46.

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