[RESUELTO] calcular edad act. a partir fecha nacimiernto

Discute sobre las herramientas de la base de datos

[RESUELTO] calcular edad act. a partir fecha nacimiernto

Notapor danielmorbelli » Vie Sep 17, 2010 9:04 pm

Hola nuevamente
Busco calcular la edad a partir de una fecha de nacimiento ej: En un control "FechaNacim" (que guarda las fechas en un campo "FechaNacimiento" de la tabla "tabClientes") , necesito que en un control "Años" y en otro control "Meses" se muestren esos datos calculados según otro control "Ahora()" insertos en el formulario "forClientes" para que cada vez que entro en la ficha de esa persona me muestre su edad actualizada.

Muchas Gracias
Daniel
Última edición por danielmorbelli el Mié Sep 29, 2010 11:15 pm, editado 3 veces en total
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Calcular edad actualizada a partir fecha nacimiernto

Notapor danielmorbelli » Sab Sep 25, 2010 12:01 pm

Hola amigos:
Tal vez nadie respondió porque pensaba que mi respuesta estaba en este hilo : viewtopic.php?f=32&t=297&p=3416&hilit=edad#p3416
El problema es que tengo mas de 9000 registros de clientes y si hago la consulta que sugiere en dicho Hilo, anda perfecto, salvo que cada vez que carga el formulario clientes la consulta se toma el trabajo de calcular todas las edades de la tabla, lo que genera una demora insoportable.
Por eso mi intencion es hacer lo mismo , pero que el cálculo sea mediante controles calculados, para que haga solo el calculo del registro donde estoy.
Desde ya muchas gracias
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Calcular edad actualizada a partir fecha nacimiernto

Notapor danielmorbelli » Mar Sep 28, 2010 4:19 pm

He dado un paso importante, pero falta bastante, ya que deambulando por los foros incluso los de openoffice en inglés, donde comentan que todavía no es posible calcular controles de formularios.
Dada mi extremada falta de conocimientos informáticos traté de encontrar una solución a mi problema (muy elemental...):
1°Agregué 2 campos a la "tabClientes" : "edad" y "meses"
2° Utilicé la "Ventana SQL" (de Herramientas/SQL)
3° Para calcular los años utilicé la sentencia : Update "tabClientes" SET "edad" = DATEDIFF( 'mm', "fecha nacimiento", CURRENT_DATE ) / 12
4° Para calcular los meses : Update "tabClientes" SET "meses" = MOD( DATEDIFF( 'mm', "fecha nacimiento", CURRENT_DATE ), 12 )
Con estas 2 actualizaciones conseguí que me queden actualizados los datos de edad y meses de cada uno de los 9300 clientes, en un tiempo razonable si se realiza sólo una vez al día o al mes, de manera que cuando entro en la ficha de cada uno me muestra rápidamente sus datos incluyendo su edad (ya que están grabados en la "tabClientes").
5° También probé unificando todas las sentencias en una sola ventana (incluyendo CHECKPOINT DEFRAG para evitar que con el proceso se modifique el tamaño de la tabla)
Escribí en la ventana :
Update "tabClientes" SET "edad" = DATEDIFF( 'mm', "fecha nacimiento", CURRENT_DATE ) / 12
Update "tabClientes" SET "meses" = MOD( DATEDIFF( 'mm', "fecha nacimiento", CURRENT_DATE ), 12 )
CHECKPOINT DEFRAG
Esto funcionó perfectamente desde la ventana SQL con "ejecutar" .

6° Ahora necesitaría automatizar ese proceso para que lo realice una vez al día, semana o mes.
Agradecería si alguien me da una mano para avanzar un poco mas.
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Calcular edad actualizada a partir fecha nacimiernto

Notapor RMG » Mar Sep 28, 2010 7:42 pm

Hola Daniel,

He podido averiguar que aplicando esta función en una consulta se obtienen los años, no es exacto al cien por cien por los años bisiestos, pero a lo mejor te sirve.

DATEDIFF( 'DD', "FechaNacimiento", CURDATE( ) ) / 365

Aqui te pongo la dirección donde estan estas funciones, quizas puedas aplicar la de las horas.

http://wiki.services.openoffice.org/wik ... Procedures

Saludos
Ramón
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3590
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Calcular edad actualizada a partir fecha nacimiernto

Notapor danielmorbelli » Mar Sep 28, 2010 7:56 pm

RMG escribió:Hola Daniel,

He podido averiguar que aplicando esta función en una consulta se obtienen los años, no es exacto al cien por cien por los años bisiestos, pero a lo mejor te sirve.

DATEDIFF( 'DD', "FechaNacimiento", CURDATE( ) ) / 365

Aqui te pongo la dirección donde estan estas funciones, quizas puedas aplicar la de las horas.

http://wiki.services.openoffice.org/wik ... Procedures

Saludos
Ramón

Hola Ramón:
Lo que hice al utilizar la ventana SQL , fue para evitar precisamente una consulta (como expliqué mas arriba), ya que demora eternamente cada vez que se carga clientes o actualizo sus datos...
Lo que probé con la ventana SQL anda de maravillas , solo necesito automatizarlo para que se ejecute una sola vez al día o a demanda cuando ingrese varios clientes nuevos para calcular sus edades (si hiciera falta), sino la tabla se actualizaría sola al abrir la BD cada día y listo.
Respecto a las Funciones que linkeaste ya había hurgado por ahí pero hasta donde mis neuronas dan (que es bastante poco) no pude lograr nada aplicable al calculo de hora -del otro hilo-.Ya había probado aplicando mis escasos conocimientos y naa.
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Calcular edad actualizada a partir fecha nacimiernto

Notapor mauricio » Mar Sep 28, 2010 8:40 pm

Hola...

Checa si el siguiente ejemplo te sirve, en el muestro:

1.- Como interceptar un cambio de registro en un formulario
2.- Como validar que no sea un registro nuevo
3.- Si no es nuevo, toma el valor del campo Fecha
4.- Calcula el número de meses entre esta fecha y la fecha actual, observa como usamos una función de Calc para esto
5.- Con un simple calculo mostramos el resultado como: X años y Z meses

Saludos
Adjuntos
Calculos con fechas.odb.7z
(10.39 KiB) 2178 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Calcular edad actualizada a partir fecha nacimiernto

Notapor danielmorbelli » Mié Sep 29, 2010 11:29 am

Hola Mauricio, muchas gracias por responder.
El ejemplo que enviaste anda perfecto,pero tengo problemas al adaptarlo a mi BD.
Pegué la macro en un módulo que nombré EDAD
Código: Seleccionar todo   Expandir vistaContraer vista
Option Explicit

Sub CalcularMeses( Evento )
Dim oFecha As Object
Dim lFecha1 As Long
Dim lFecha2 As Long
Dim mDatos()
Dim iMeses As Integer
Dim sResultado As String

   If Not Evento.Source.isNew() Then
      oFecha = Evento.Source.getDate(2)
      lFecha1 = CLng(DateSerial(oFecha.Year,oFecha.Month,oFecha.Day))
      lFecha2 = CLng(Date())
      mDatos = Array( lFecha1, lFecha2, 0 )
      iMeses = FuncionCalc( "com.sun.star.sheet.addin.DateFunctions.getDiffMonths", mDatos() )      
      sResultado = (iMeses \ 12) & " años y " & (iMeses Mod 12) & " meses"
      Evento.Source.getByName("txtMeses").Text = sResultado
   End If

End Sub


Function FuncionCalc( Nombre As String, Datos() )
Dim oSFA As Object
   
   oSFA = createUnoService( "com.sun.star.sheet.FunctionAccess" )
   FuncionCalc = oSFA.callFunction( Nombre, Datos() )
   
End Function

Tuve precaución en renombrar el campo ""fecha nacimiento" como "fecha" (formato fecha) y pegué un "txtMeses" (exactamente con las mismas propiedades que tu ejemplo) en el formulario "formClientes".
Asigné la macro en el acontecimiento :"tras el cambio de registro de datos"
Mi problema es que sucede lo siguiente al agregar o modificar una nueva fecha :

Ventana de error:
"Acción no amitida
Llamada de procedimiento no válida."


y se abre ventana de macros en el módulo que hice (EDAD) con el sig texto resaltado

lFecha1 = CLng(DateSerial(oFecha.Year,oFecha.Month,oFecha.Day))

Lo único diferente a tu ejemplo es que mi "formClientes" obtiene los datos de la consulta "conClientes" y no de una tabla.
Lo siguiente funcionó perfecto (pegándolo en mi BD y utilizando tu Formulario1) :
Probé pegando la Tabla1 , el Formulario1 y Asigné tu macro ubicada en EDAD en el acontecimiento :"tras el cambio de registro de datos"
También probé acceder a los datos de la Tabla1 desde una consulta_Tabla1 y no hay problemas.

Estuve revisando todo pero no veo que puede estar mal al editar mi formClientes
Eliminé todos los controles y dejé solo los referentes al cálculo de edad, y llegué a la conclusión: que el problema viene desde la tabla tabClientes . verifiqué el tipo de datos del campo fecha y está idéntico al de la tabla1 de tu ejemplo
Desde ya muchas gracias por tu atención
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Calcular edad actualizada a partir fecha nacimiernto

Notapor danielmorbelli » Mié Sep 29, 2010 5:46 pm

Mauricio: Encontré el problema...
No se como se soluciona
Estuve eliminando campos de mi tabla tabClientes hasta llegar a 2 campos date (incluido fecha) y el id, y seguía fallando.
Cuando eliminé el campo date (no fecha), comenzó a funcionar correctamente.
Luego fuí agregando los campos varchar y seguía funcionando bien.
Conclusión: por lo visto tu ejemplo no admite mas de un campo date en la tabla.
El problema es que los necesito indefectiblemente y no tengo idea de como salir de este entuerto.
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Calcular edad actualizada a partir fecha nacimiernto

Notapor mauricio » Mié Sep 29, 2010 6:31 pm

Hola...

No, puedes usar si quieres todos tus campos como fechas, "debería" de funcionar, pero tienes que "entender" como funciona para que lo puedas aplicar a tu base, observa la siguiente línea:
Código: Seleccionar todo   Expandir vistaContraer vista
      oFecha = Evento.Source.getDate(2)

El número 2 dentro del método getDate, esta indicando que toma el campo número 2 del origen que tengas designado en tu formulario, los campos empiezan en 1, asegurate de que estas usando el número de campo correcto, obtendrás un error si intentas obtener un campo que no existe o usar un método incompatible con el tipo de campo...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Calcular edad actualizada a partir fecha nacimiernto

Notapor mauricio » Mié Sep 29, 2010 6:47 pm

Hola...

No hay como un ejemplo de prueba. Mira como estoy usando tres campos tipo fecha sin problemas...

Por favor, si esto responde tu pregunta, edita el primer mensaje de este hilo y agrega al principio del título la etiqueta [RESUELTO], de esta forma conseguiremos un foro más ordenado.

Saludos
Adjuntos
Calculos con fechas.odb.7z
(10.71 KiB) 801 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] alcular edad act. a partir fecha nacimiernto

Notapor danielmorbelli » Mié Sep 29, 2010 8:56 pm

Hola Mauricio, Muchas gracias anda perfecto, y es como tu dices.
Yo debo tener algún otro problema con mi tabla que no alcanzo a detectar.
te envío una copia para ver si lo podes detectar.
Daniel
EDITADO: encontré un error en lo que hice ya que debía poner el campo como n° 36
Evento.Source.getByName("txtMeses").Text = CalculaEdad( Evento.Source.getDate(36) )
Mi único inconveniente ahora es cuando tengo registros de la tabla tabClientes creados pero con el campo fecha vacío me devuelve el mismo error
Daniel
Adjuntos
Calculos con fechasClientes2.odb.tar.7z
(15.19 KiB) 683 veces
Última edición por danielmorbelli el Mié Sep 29, 2010 9:32 pm, editado 1 vez en total
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: [RESUELTO] alcular edad act. a partir fecha nacimiernto

Notapor mauricio » Mié Sep 29, 2010 9:30 pm

Hola...

Como dije, hay que entender como trabaja, estas tratando de obtener una fecha (getDate) del campo número dos de tu tabla, que es un texto (campo Cliente), la numeración de los campos va en relación con tu tabla o consulta origen, no con la cantidad de controles que tienes en tu formulario, por lo que el campo fecha que muestras, es el campo 36, que es el que debes de poner en la línea:
Código: Seleccionar todo   Expandir vistaContraer vista
Sub CalcularMeses( Evento )

   If Not Evento.Source.isNew() Then
      Evento.Source.getByName("txtMeses").Text = CalculaEdad( Evento.Source.getDate(36) )
   End If

End Sub

Como estas pasando un objeto vacío, al intentar asignarlo a DataSerial te daba el error.

Me debes una comida...

Saludos

P.D. Revisa un concepto que se llama normalización de bases de datos, creo, que le vendría bien a tu tabla...
Adjuntos
Calculos con fechasClientes.odb.7z
(14.76 KiB) 525 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] alcular edad act. a partir fecha nacimiernto

Notapor danielmorbelli » Mié Sep 29, 2010 9:47 pm

Muchas Gracias Mauricio.
Te debo una Parrillada Completa!!! (asado, vacio, chinchulines,mollejas.....) con un buen tinto
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: [RESUELTO] alcular edad act. a partir fecha nacimiernto

Notapor mauricio » Mié Sep 29, 2010 9:59 pm

Que conste, tenemos muchos testigos...

No se donde estés, pero este fin de año me toca Costa Rica, pero para el entrante me voy más al sur...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] alcular edad act. a partir fecha nacimiernto

Notapor danielmorbelli » Mié Sep 29, 2010 10:06 pm

Muchas Gracias Ramón.
Ahora si anda perfecto!!!!
Respecto a normalizar la tabla es muy cierto, sucede que mi tabla es un embrollo porque viene desde una BD ACCESS , que a su vez viene de otra base dBase IV.
Una vez que esté funcional la voy a dejar prolija. Es que quiero de una vez por todas migrar definitivamente la base que estoy usando pero para no enloquecerme al dar el salto al vacío todavía conservo los nombres de la BD ACCESS

Pd: Mar del Plata ,Argentina
Te pido mil disculpas, se me escaparon 2 registros que debía haber borrado de la tabClientes (el 4 y el 5 ) si es que los puedes borrar.
Un abrazo enorme desde el SUR
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: [RESUELTO] alcular edad act. a partir fecha nacimiernto

Notapor mauricio » Mié Sep 29, 2010 10:15 pm

Pero compañero de donde sacas el Ramón, soy Mauricio...

¿Te refieres a los datos de los campos 4 y 5?, si es así ya los he borrado...

Saludos y te anoto en mi lista de comidas ahora que vaya a la hermosa Argentina...

Un abrazo...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] alcular edad act. a partir fecha nacimiernto

Notapor danielmorbelli » Mié Sep 29, 2010 10:21 pm

JE JE, Mauricio, estoy para un GERIÁTRICO!!!
Un Abrazo!!
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: [RESUELTO] calcular edad act. a partir fecha nacimiernto

Notapor danielmorbelli » Jue Sep 30, 2010 12:15 am

BINGO!!! se me mojó el fuego....estoy de vuelta
Tomando los datos desde la tabla no hay problemas , pero si lo hago desde una consulta (y necesito que sea desde consulta), no da error, pero en txtMeses pone "0 años y 0 meses" -en linux-(habiendo ingresado una fecha válida). [b]
Daniel
Adjuntos
Calculos con fechasClientTablaCons.odb.tar.7z
(17.12 KiB) 393 veces
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: [RESUELTO] calcular edad act. a partir fecha nacimiernto

Notapor mauricio » Jue Oct 07, 2010 6:43 am

Hola Daniel...

Necesitas una clase de "paciencia", no se por que se me hace que eres medio atrabancado (aquí en México algo así como desesperado)...

Cometiste el mismo error de la primera vez. En tu tabla el campo fecha es el número 36, pero en tu consulta (que son otra cosa) el campo es el número 3.

Me debes otra comida por distraído.


Saludos

P.D. Procura no abrir un hilo marcado como resuelto, es probable que no se vea, llegue a este de casualidad, gracias...
Adjuntos
Calculos con fechasClientTablaCons.odb.7z
(18.72 KiB) 617 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5989
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] calcular edad act. a partir fecha nacimiernto

Notapor danielmorbelli » Jue Oct 07, 2010 12:00 pm

Uyyyyy, voy a tener que cocinar una vaca entera!!!! :crazy: :knock:
Pido disculpas a Todos y sobre todo al gran maestro!
Ándale, aquí a tu frase sería "Me debés otra comida por bolu.." (le falta la 1º nota musical para completar la palabra)
Un abrazo
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
 
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: [RESUELTO] calcular edad act. a partir fecha nacimiernto

Notapor vic2003 » Lun Abr 10, 2017 8:01 pm

la formula
=AÑOS(A2;HOY();0) &";" & MESES(A2;HOY ();0)-ENTERO(MESES(A2;HOY ();0)/12)*12
El resultado:
año;mes

si la fecha de nacimiento es 11/04/2015
si la fecha de hoy es 10/04/2017
el resultado devolverá: 1;11 o sea 1 año y 11 meses

si deseas que aparezcan los textos 'años' y 'meses' puedes dejar la formula así:
=AÑOS(A2;HOY();0) &"años y " & MESES(A2;HOY ();0)-ENTERO(MESES(A2;HOY ();0)/12)*12 &" meses"
.
Si trabajas con una versión en inglés (que yo no tengo) creo que la formula sería:
=YEARS(A2;TODAY();0) &";" & MONTHS(A2;TODAY ();0)-INT(MONTHS(A2;TODAY ();0)/12)*12

Suerte!
OpenOffice 3.1 en Windows Vista / NeoOffice 2.2.3 con MacOS 10.4 / OpenOffice 2.4 en Ubuntu 9.04
vic2003
 
Mensajes: 1
Registrado: Lun Abr 10, 2017 7:53 pm


Volver a Base

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 5 invitados