PDA

Ver la Versión Completa : Ejecutar Instruccion de Backup desde Codigo Delphi


scigliano
16-03-2017, 15:09:13
Saludos... :)

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


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:


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, 16:50:06
Cuando pongas código, pon exactamente lo que estás usando, copia y pega, lo digo por esto:
Sentencia.Add('DB2CMD DB2 BACKUP DATABASE ABC... ');
De todas formas, seguramente es por las comillas, prueba a poner:
'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, 18:09:52
Saludos...

Si el ejecutable es ese tal DB2CMD y los parámetros el resto de la sentencia, entonces sería así
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í
ShellExecute(0, nil, 'cmd', '/C archivo.bat', nil, SW_SHOWNORMAL);
-

scigliano
16-03-2017, 19:18:30
Agradecido con TOPX y Casimiro :)

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


Gracias
Scigliano