Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=26)
-   -   Fallo en tarea programada. Lanzar programa con interfaz gráfica (https://www.clubdelphi.com/foros/showthread.php?t=86728)

fjcg02 06-10-2014 18:19:44

Retroalimentando el problema.

He hecho una prueba simple.
1.- Programa simple que invoca a excel y crea un archivo CON SERVERS, finalmente se cierra de forma automática.

Código Delphi [-]
...
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    EApp: TExcelApplication;
    EWs: TExcelWorksheet;
    EWb: TExcelWorkbook;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
...

procedure TForm1.FormCreate(Sender: TObject);
begin
EApp.Connect;
EApp.Visible[0] := True;

EWb.ConnectTo(EApp.Workbooks.Add(EmptyParam,0));

EWb.ConnectTo(EApp.Workbooks.Add(EmptyParam,0));
EWs.ConnectTo(EApp.Sheets[1] as _WorkSheet);

EWb.SaveAs(ExtractFilePath( Application.ExeName ) + Edit1.Text,
                              -4143 {51}, emptyParam , emptyParam, false, false,
                              1, emptyParam, false, emptyParam, emptyParam,
                               emptyParam, 0);
EApp.Quit;
EApp.Disconnect;
Application.Terminate;
end;

end.

2.- Programa simple que invoca a excel y crea un archivo con automatización, finalmente se cierra de forma automática.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
   Excel : OleVariant;
   WrkB, WrkS : OleVariant;
begin
  try
     try
        Excel := GetActiveOleObject('Excel.Application');
     except
        Excel := CreateOleObject('Excel.Application');
     end;
     Excel.DisplayAlerts := True;
     Excel.Visible := True;
     //WrkB := Excel.Workbooks.Open(ExtractFilePath(Application.ExeName) + Edit1.Text);
     WrkB := Excel.Workbooks.Add;
     WrkB.SaveAs(ExtractFilePath(Application.ExeName) + Edit1.Text);
   finally
     Excel.Quit;
     Excel := Unassigned;
     WrkS := Unassigned;
     WrkB := Unassigned;
  end;
Application.Terminate;
end;

LOS DOS FUNCIONAN cuando los programo como tareas planificadas.

Ya no sé por dónde pegarle, estoy más confundido que antes...

Saludos

fjcg02 06-10-2014 18:34:28

He ampliado las pruebas, y he añadido poner unos valores en algunas celdas.
Quería descartar que el error se provocara al dar los valores.

También funciona.

Saludos

nlsgarcia 06-10-2014 18:35:22

fjcg02,

Cita:

Empezado por fjcg02
...una prueba simple...Programa simple que invoca a Excel y crea un archivo CON SERVERS...Programa simple que invoca a Excel y crea un archivo con automatización...y he añadido poner unos valores en algunas celdas...LOS DOS FUNCIONAN cuando los programo como tareas planificadas...

Al parecer, la variable es la interfaz GUI :rolleyes:

Pregunto:

1- ¿Puedes incluir en dichos programas que la creación de los archivos de Excel sea con datos de la BD de la forma más simple posible y ver su comportamiento?.

2- ¿Que versión de Excel esta instalada en el Servidor?, ¿Es la misma del problema en cuestión?.

Espero sea útil :)

Nelson.

fjcg02 06-10-2014 21:26:18

Cita:

Empezado por nlsgarcia (Mensaje 482593)
fjcg02,

Al parecer, la variable es la interfaz GUI

Hola Nelson,
Respecto a la interface GUI, ... Los programas que he realizado la tienen ( tform1 ).

No sé, estoy un poco desorientado... :confused:

Saludos

nlsgarcia 06-10-2014 22:40:18

fjcg02,

Cita:

Empezado por fjcg02
...Respecto a la interface GUI, ... Los programas que he realizado la tienen...

Es correcto ^\||/ , pero es una GUI básica, sin ningún control asociado según entiendo, ¿Es correcto? :confused:

Pregunto: ¿Puedes incluir todos los controles del programa original en los programas de prueba pero sin darle ninguna funcionalidad a ver cual es el comportamiento?, recuerda en lo posible realizar la prueba sugerida en el Msg #23

Espero sea útil :)

Nelson.

fjcg02 07-10-2014 12:25:15

Sigo probando...

He metido un log al programa, y observo que no hace nada!!!!

Me parece que lo he pillado, al intentar abrir una bbdd local no la encuentra. Voy a modificarlo para que le meta la ruta completa del archivo. Es un mdb que se encuentra en la misma ruta que el ejecutable.

Os informo con el resultado.

Me parece que esta es la buena...

Saludos
PD: Nelson, he metido controles en las pruebas simples que hice ayer y sigue funcionando todo. Eso es lo que me ha llevado meter la traza.

fjcg02 07-10-2014 13:04:16

POR FIN...

queda demostrado que soy un verdadero burro.

EL problema era que al arrancar el programa de forma desatendida, no sabía en qué directorio estaba la bbdd local en la que están definidos todos los informes con los archivos de plantillas, los archivos de salida, con las pestañas correspondientes y sus querys .

Añadiendo al arranque del programa que me coja la bbdd del path del ejecutable, y construyendo la cadena de conexión en tiempo de ejecución, zas, funcionamiento al canto!!

Muchísimas gracias a todos los que me habeis ayudado, especialmente a Nelson.

Lo que queda demostrado es que un programa a pesar de tener interfase gráfica puede ejecutarse perfectamente como una tarea programada. Obviamente, este programa lanzado así, deberá disponer de los mecanismos necesarios para que haga lo que tenga que hacer sin intervención del usuario. En mi caso, le envío un parámetro, que es el informe que quiero lanzar. Si hay parámetro, llamo a una función que me localiza el informe en el dataset y "simula" hace rclick al botón que dispara el procedimiento. Finalmete, cierra la aplicación de forma ordenada.

Muchas gracias a todos de nuevo y un saludo

nlsgarcia 07-10-2014 14:46:41

fjcg02,

Cita:

Empezado por nlsgarcia
...sería conveniente incluir un log dentro del programa de pruebas para verificar en que punto falla la aplicación con ambos métodos...

Cita:

Empezado por fjcg02
...he metido controles en las pruebas simples que hice ayer y sigue funcionando todo. Eso es lo que me ha llevado meter la traza...

Cita:

Empezado por fjcg02
...El problema era que al arrancar el programa de forma desatendida, no sabía en qué directorio estaba la bbdd local en la que están definidos todos los informes con los archivos de plantillas, los archivos de salida, con las pestañas correspondientes y sus querys...Añadiendo al arranque del programa que me coja la bbdd del path del ejecutable, y construyendo la cadena de conexión en tiempo de ejecución, zas, funcionamiento al canto!!...

^\||/

Saludos,

Nelson.


La franja horaria es GMT +2. Ahora son las 08:41:20.

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