Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Detectar error winexec (https://www.clubdelphi.com/foros/showthread.php?t=57142)

grotero76 06-06-2008 12:21:45

Detectar error winexec
 
Hola a todos,

desde mi aplicación ejecuto un paquete dts de sql server con la siguiente instrucción:

Código:

winexec(PChar('dtsrun /S nombreservidor /U usuario /P password /N nombreDTS),SW_SHOW)<31
Mi pregunta es la siguiente:

¿Puedo detectar desde mi aplicación si se ha producido algún error al ejecutar el paquete?. El problema es que tanto si la ejecución del paquete ha ido bien como sino el programa continúa y no se sabe si realmente la ejecución del paquete se llevó a cabo con éxito.

Un saludo y muchas gracias.

xEsk 06-06-2008 12:32:47

Hasta donde yo sé, si la aplicación al fallar no devuelve un valor indicando que ha fallado, no es possible detectarlo usando sólo el "winexec".

Me refiero, a los famosos "exit code".

Saludos.

grotero76 06-06-2008 12:41:42

Gracias por tu respuesta,

el caso es que la función winexec devuelve lo mismo tanto si la ejecución fue bien como sino. Por ejemplo pruebo a ejecutar un DTS que existe y uno que no y el resultado de hacer el winexec lo capturo en una variable entera, siempre obtengo el mismo resultado, en mi caso un 33.

La verdad que no sé qué hacer.

Muchas gracias y un saludo.

Khronos 12-06-2008 13:48:40

Hola!

Código Delphi [-]
uses Windows;

var
   ExecError: DWORD;
begin

ExecError:=WinExec(pcahr('MiPrograma.exe'), 1);
      If ExecError>31 then showmessage('MiPrograma.exe se ha ejecutado satisfactoriamente');

    case ExecError of
           0: showmessage('Error en la memoria');
           ERROR_BAD_FORMAT: showmessage('Error en el formato del archivo');
           ERROR_FILE_NOT_FOUND: showmessage('Archivo no encontrado');
           ERROR_PATH_NOT_FOUND: showmessage('La dirección especificada no existe');
    end;

end;

Salu2 espero que te sirva.

grotero76 14-06-2008 19:34:58

Hola Khronos,

gracias por tu respuesta, he encontrado otro método de ejecución de DTS sin falta de usar una función DOS...
Lo pongo a continuación por si le sirve a alguien:

Código:


procedure EjecutarDTS;
var
  pkg: Variant;
  i:integer;
begin
  pkg:= CreateOleObject('DTS.Package');
  try
    pkg.LoadFromSQLServer(datasourceName,UserName,Password,,,,,dtsName),'');
    for i := 1 to pkg.steps.count do
      pkg.steps.Item(i).executeinMainThread := True;
    pkg.FailOnError := true;
    pkg.Execute;
    MessageDlg('La ejecución se ha realizado correctamente',mtInformation,[mbOK],0);
  except
  on E: Exception do
  begin
    showmessage('Error = ' + E.Message);
    exit;
  end;
end;
pkg.uninitialize;
pkg:=UnAssigned;
end;


Un saludo


La franja horaria es GMT +2. Ahora son las 06:01:07.

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