Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-02-2021
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Problemas lanzando el ejecutable desde tarea programada

Buenos días chicos,

Os traigo otro problemilla de estos raros que me pasan.

Verán, tengo una aplicación que se puede ejecutar normal o lanzarla desde tarea programada para que lo haga todos los días a cierta hora.
Lo tengo en muchos clientes y en todos funciona, salvo en uno, que de repente ha empezado a no funcionar a medias.
Verán, cuando arranco yo el programa y lanzo el proceso desde un botón que tengo, funciona bien, pero cuando lo lanza la tarea programada, no funciona bien.

El fallo principal, es que coge una fecha guardada en un .ini. Cuando lo lanzo desde el botón, coge bien esa fecha, pero cuando lo lanza la tarea programada, no me reconoce la fecha y me guarda la fecha mínima de sql.
La tarea tira del mismo ejecutable y del mismo .ini, lo he comprobado.
Para leer esta fecha hago lo siguiente:
Código Delphi [-]
fecha:= oArchivo.ReadDateTime('FECHA', 'UltimaFecha', 31/12/2000);

Como os comento, esto me funciona en todos los clientes, incluso en este llevaba funcionando un año hasta que ha empezado a pasar esto.

Dándole vueltas a alternativas, he probado a guardar la fecha como string y luego pasarla a fecha. De esta manera, el string me lo guarda bien, pero a la hora de pasarlo a Date, el programa se para.
De nuevo es muy raro, porque si lo lanzo manualmente funciona, pero a través de la tarea programada, no funciona.
Código Delphi [-]
    fechastring:= oArchivo.ReadString('FECHA', 'UltimaFecha', '31/12/2000');
    fechadate:= StrToDate(fechastring);

Se para en el guardado en fechadate, lo he comprobado guardando logs.

Me tiene un poco loco esto.

Se os ocurre algo?

Muchas gracias
Responder Con Cita
  #2  
Antiguo 24-02-2021
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Sin más datos parece que se debe a una actualización reciente de Windows, seguramente un tema de permisos.
Responder Con Cita
  #3  
Antiguo 24-02-2021
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Lo tengo puesto como administrador y ejecutar con los privilegios más altos.

Igualmente es que es muy raro, porque no funcionan cosas como strtoDate, que no entiendo en que puede influir que lance el proceso con un botón o con tarea programada.

Estoy bastante perdido.

En el botón le tengo puesto simplemente lanzar el procedimiento y en la tarea programada, lanzo el procedimiento que lo puse como parámetro dentro del ejecutable.


Última edición por juggern fecha: 24-02-2021 a las 11:08:31.
Responder Con Cita
  #4  
Antiguo 24-02-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿El formato de fechas en ese equipo?
Responder Con Cita
  #5  
Antiguo 24-02-2021
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Esos errores que surgen de la noche a la mañana no suelen ser por nada de tu aplicación sino por el entorno en el que se ejecuta.
Revisa (solo por descartar) si la tarea se ejecuta correctamente en otro puesto que tenga el mismo sistema operativo y la misma actualización, la misma versión de tu programa, de tu base de datos, de fecha.
Si yo te contara la de cosas extrañas que me han sucedido por actualizaciones: pdfs que ya no abre acrobat, impresoras que solo imprimen la primera hoja o que dejan de imprimir después de x veces, mensajes que quedan por detrás de otra ventana...
Responder Con Cita
  #6  
Antiguo 24-02-2021
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Voy a revisar todo eso a ver, sobre todo lo del formato de fechas porque si que veo que cuando me coge la fecha base de sql que es 30/12/1899, me pone 12/30/1899, puede ir por ahí, pero no entiendo porqué entonces falla cuando lo lanzo de una manera y no falla de la otra.

Me edito:

Nada, la fecha no parece ser, es un windows server 2008.

No entiendo nada, es un simple StrtoDateTime que funciona al ejecutarlo de una forma y de la otra no. No se.
Debe de ir por ahí porque si hago, al coger el dato del ini. ReadString, me lo lee bien, pero si hago un .ReadDateTime para guardarlo en un TDateTime, no lo coge bien.

Última edición por juggern fecha: 24-02-2021 a las 11:42:31.
Responder Con Cita
  #7  
Antiguo 24-02-2021
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Os enseño más pruebas que estoy haciendo.

El .ini tiene lo siguiente:
Cita:
[FECHA]
UltFecha=24/02/2021 12:36:13
En el código me he creado 2 variables, una string sUltFecha y otra datetime dUltFecha.

He hecho que me escriba mensajes en un fichero.

El código es:
Código Delphi [-]
    sUltFecha:= oArchivo.ReadString('FECHA', 'UltFecha', '31/12/1999');
    WriteLN(Fich, 'FECHA STRING : '+sUltFecha);
    dUltFecha:= oArchivo.ReadDateTime('FECHA', 'UltFecha', 31/12/1999);
    WriteLN(Fich, 'FECHA DATETIME: '+DateTimetoStr(dUltFecha));

Si lo lanzo arrancando el exe y dándole al botón que llama al procedimiento, me escribe esto en el fichero:

Cita:
FECHA STRING : 24/02/2021 12:35:02
FECHA DATETIME: 24/02/2021 12:35:02
Si lanzo el procedimiento a través de la tarea programada, me escribe esto en el fichero:

Cita:
FECHA STRING : 24/02/2021 12:36:13
FECHA DATETIME: 12/30/1899 12:01:51 AM
No lo entiendo, en el equipo no veo nada raro y no se ha actualizado.
Responder Con Cita
  #8  
Antiguo 24-02-2021
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Perdón, copié mal la primera cita de las 2 de abajo, las horas son 12:36:13, es decir, coge bien el dato ejecutándolo así.
Responder Con Cita
  #9  
Antiguo 24-02-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hace unos días tuve un inconveniente parecido con el consumo de un servicio.

Al hacerlo el consumo desde la sesión de usuario el formato de decimales era con coma ",". Pero al hacerse por medio de un tarea programada el formato de decimales era con punto ".".

La solución fue copiar la misma configuración regional a todos los demás usuarios y cuentas del sistema.

Aplicar la configuración regional y de idioma a cuentas reservadas

__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #10  
Antiguo 24-02-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Además de lo que comenta movorack, ¿Esto está bien o falta las comillas?
Código Delphi [-]
dUltFecha:= oArchivo.ReadDateTime('FECHA', 'UltFecha', 31/12/1999);  // ¿Faltan comillas?
dUltFecha:= oArchivo.ReadDateTime('FECHA', 'UltFecha', '31/12/1999');  // así
Responder Con Cita
  #11  
Antiguo 24-02-2021
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Hola chicos,

En cuanto pueda pruebo lo que comenta movorack y os digo.

Respecto a lo otro, está bien, funciona sin comillas, si le pongo comillas da error porque no espera un string.

Un saludo
Responder Con Cita
  #12  
Antiguo 24-02-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Cita:
Empezado por juggern Ver Mensaje
está bien, funciona sin comillas, si le pongo comillas da error porque no espera un string.
Un saludo
Debes tener en cuenta que la fecha en Delphi es un valor decimal, por ello no te genera error.


Cita:
Empezado por Casimiro Notevi Ver Mensaje
Código Delphi [-]
dUltFecha:= oArchivo.ReadDateTime('FECHA', 'UltFecha', 31/12/1999);  // ¿Faltan comillas?
Pero lo que haces aquí es pasar como fecha el resultado de la división entre 31, 12 y 1999 = 0,00129 = 30/12/1899 12:01:51 a.*m.

Si quieres pasar el valor de fecha por defecto con una cadena puedes convertir el string a date
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #13  
Antiguo 24-02-2021
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Hola de nuevo,

Acabo de probarlo y tienen todas la misma configuración. Aún así, por si acaso, lo he hecho pero nada, no funciona.

Si lo paso asi
Código Delphi [-]
oArchivo.ReadDateTime('FECHA', 'UltFecha', StrToDateTime('31/12/1999'));

No pasa de ahí, pero ese no es el principal problema, porque esa es la fecha por defecto si no hubiera nada en el .ini, pero si que tiene datos, el problema es que no me está cogiendo bien esos datos como fecha cuando lo ejecuto desde tarea.

En vista de que sí que me coge el dato del .ini como string, he probado a guardarlo en string y luego ese valor, guardarlo en otra variable TDateTime haciendo la conversión
Código Delphi [-]
WriteLN(Fich, '1');
fechacadena:= oArchivo.ReadString('FECHA', 'UltFecha', '31/12/1999');
WriteLN(Fich, '2');
fecha:= StrtoDateTime(fechacadena);
WriteLN(Fich, '3');

Pero haciendo esto, el programa se para en la instrucción como si diera error. En el fichero solo guarda hasta el 2, al 3 no llega. Esto, al igual que antes, pasa si lo lanzo desde el programador de tareas, si lo lanzo desde el botón, funciona bien, pinta el 3.

Última edición por juggern fecha: 24-02-2021 a las 16:21:46.
Responder Con Cita
  #14  
Antiguo 24-02-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Cita:
Empezado por juggern Ver Mensaje
Código Delphi [-]
WriteLN(Fich, '1');
fechacadena:= oArchivo.ReadString('FECHA', 'UltFecha', '31/12/1999');
WriteLN(Fich, '2');
fecha:= StrtoDateTime(fechacadena);
WriteLN(Fich, '3');

Pero haciendo esto, el programa se para en la instrucción como si diera error.
¿Qué error te genera?

--

Una prueba que puedes hacer es establecer el formato que debe manejar la función StrToDateTime enviándole el formato de fecha que tienes en el .ini por medio del parámetro AFormatSettings.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #15  
Antiguo 25-02-2021
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Pues nada, parece que se ha arreglado solo. Estaba haciendo pruebas y nada pero en una de las veces que he reiniciado el equipo, y han sido muchas, de repente parece que ya va bien.
Responder Con Cita
  #16  
Antiguo 25-02-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #17  
Antiguo 25-02-2021
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Si si, no entiendo nada, y el equipo no lo ha tocado nadie, asique no han cambiado nada.

Ni idea.
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Fallo en tarea programada. Lanzar programa con interfaz gráfica fjcg02 Windows 27 07-10-2014 14:46:41
Crear una Tarea Programada. DasGrun Windows 1 04-08-2010 11:44:38
Tarea programada en Linux con Firebird 2.5 Axel_Tech Firebird e Interbase 6 16-04-2010 18:52:16
Tarea programada en delphi drykea Varios 6 18-02-2008 16:59:19
hacer una tarea programada Patricio Varios 6 18-09-2007 20:39:21


La franja horaria es GMT +2. Ahora son las 12:34:54.


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
Copyright 1996-2007 Club Delphi