Foros Club Delphi

Foros Club Delphi (http://www.clubdelphi.com/foros/index.php)
-   DB2 (http://www.clubdelphi.com/foros/forumdisplay.php?f=33)
-   -   Ejecutar Instruccion de Backup desde Codigo Delphi (http://www.clubdelphi.com/foros/showthread.php?t=91609)

scigliano 16-03-2017 16:09:13

Ejecutar Instruccion de Backup desde Codigo Delphi
 
Saludos... :)

Por largo tiempo he utilizado un archivo .bat para ejecutar los backup del DB2 manualmente con la siguiente instrucción:

Código SQL [-]
DB2CMD DB2 BACKUP DATABASE ABC ONLINE TO "C:\Backup\" WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 COMPRESS  WITHOUT PROMPTING

Hasta allí, todo bien, sin problemas.
El punto es que ahora estoy intentando ejecutar esta misma instrucción directamente desde un ejecutable desarrollado en Delphi, y lo he programado de la siguiente manera:

Código Delphi [-]
procedure TFrmMenuPrincipal.BtnBatClick(Sender: TObject);
var
   i : Integer;
   Sentencia: TStringList;
begin
   Sentencia := TStringList.Create;
   Sentencia.Clear;
   Sentencia.Add('DB2CMD DB2 BACKUP DATABASE ABC... ');
   if ShellExecute(Handle,'open',PChar(Sentencia[0]),nil,nil,SW_SHOWNORMAL) <= 32
   then
   Application.MessageBox('No se pudo ejecutar la aplicación','Error', MB_ICONEXCLAMATION);
   Sentencia.Free;
end;

Pero al ejecutar el procedimiento, siempre se genera un error, y lo se por la condición del ShellExecute de que si es menor a 32, muestre el mensaje indicado. Imagino que el error es por un tema de que faltan mas parámetros, pero he googleado y no he conseguido nada positivo.

Agradezco si alguien ha pasado por esta situación, que me pueda orientar.

Gracias de antemano.
Scigliano

Casimiro Notevi 16-03-2017 17:50:06

Cuando pongas código, pon exactamente lo que estás usando, copia y pega, lo digo por esto:
Código Delphi [-]
Sentencia.Add('DB2CMD DB2 BACKUP DATABASE ABC... ');
De todas formas, seguramente es por las comillas, prueba a poner:
Código Delphi [-]
'DB2CMD DB2 BACKUP DATABASE ABC ONLINE TO '+#34+'C:\Backup\'+#34+' WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 COMPRESS  WITHOUT PROMPTING'

TOPX 16-03-2017 19:09:52

Saludos...

Si el ejecutable es ese tal DB2CMD y los parámetros el resto de la sentencia, entonces sería así
Código Delphi [-]
ShellExecute(0, nil, 'DB2CMD', 'DB2 BACKUP DATABASE ABC ONLINE TO "C:\Backup\" WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 COMPRESS  WITHOUT PROMPTING', nil, SW_SHOWNORMAL);

De todas maneras, también podría hacer un archivo .bat con la sentencia completa y luego ejecutarlo así
Código Delphi [-]
ShellExecute(0, nil, 'cmd', '/C archivo.bat', nil, SW_SHOWNORMAL);
-

scigliano 16-03-2017 20:18:30

Agradecido con TOPX y Casimiro :)

La instrucción funcionó bien con lo indicado por TOPX.
Era el comando DB2CMD.


Gracias
Scigliano


La franja horaria es GMT +2. Ahora son las 20:45:06.

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