WinExec com (Backup e Restore) com resolver...?

Firebird

10/05/2008

Delphi 2006
Firebird 1.0

Olá pessoal to tentando fazer um Backup com um Restore com WinExec.

Consegui fazer com Beckup mas o Restore não está indo...

Fiz um teste via DOS e o Restore funcionou, mas via Delphi com WinExec não estou conseguindo, como resolver?

ShowMessage(´Teste...´);
ContadorParaBackup:= 0;

Horario :=FormatDateTime(´dd-mm-yyyy-hh-nn´, Now);
WinExec (PChar(´D:\OSCM\gbak -b ´ +
´-user SYSDBA -password masterkey ´ +
´D:\OSCM\BD_OSCM.GDB ´ +
´D:\OSCM\BD\BD_OSCM_´+Horario+´.GBK´),SW_SHOW);


Repeat
if not(fileexists(´D:\OSCM\BD\BD_OSCM_´+Horario+´.GBK´)) then
Begin
ContadorParaBackup:= ContadorParaBackup+1;

End
Until ((ContadorParaBackup = 3000) or
(fileexists(´D:\OSCM\BD\BD_OSCM_´+Horario+´.GBK´)));

Beep;
//if (fileexists(´D:\OSCM\BD\BD_OSCM_´+Horario+´.GBK´)) then
//Begin
ShowMessage(´Restore´);

WinExec(Pchar(´D:OSCM\gbak -r -v -user SYSDBA -password masterkey´
+´D:\OSCM\BD\BD_OSCM_´+Horario+´.GBK ´
+´D:\OSCM\BD\BD_OSCM.GDB´),sw_SHOW);
//End;


Max.jgs

Max.jgs

Curtidas 0

Respostas

Eniorm

Eniorm

10/05/2008

só uma dica...

ao inves de vc executar direto pelo WinExec... tenta algo assim

cria um stringlist com o conteudo, ou seja, as linhas de comandos que deverão ser executadas pelo prompt.

salve o striglist como um arquivo bat... daí sim use o WinExec, ou melhor, use um procedimento que força esperar o termino da execução...

ja tive problemas na execução por prompt justamente na passagem de parâmetros, o que resolveu da forma que eu mencionei.


Dica extraída do DTDelphi 2.7
411 - Executar um programa e aguardar sua finalização antes de continuar
Inclua na seção uses: Windows

{ Esta função faz isto. }

function ExecAndWait(const FileName, Params: string;
  const WindowState: Word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Coloca o nome do arquivo entre aspas. Isto é necessário devido aos espaços contidos em nomes longos }
  CmdLine := ´"´ + Filename + ´"´ + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
  cb := SizeOf(SUInfo);
  dwFlags := STARTF_USESHOWWINDOW;
  wShowWindow := WindowState;
  end;
  Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false,
  CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
  PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
  { Aguarda até ser finalizado }
  if Result then begin
  WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  { Libera os Handles }
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
  end;
end;
- Exemplo de uso:

ExecAndWait(´c:\windows\notepad.exe´, ´´, SW_SHOW);
Observações
Não se esqueça de informar o caminho (path) do arquivo completo. Esta função foi desenvolvida para Delphi 32 bits (2, 3, 4,...). 



GOSTEI 0
Ramar Faleiro

Ramar Faleiro

10/05/2008

Parabéns Enio Rodrigo,me ajudou muito,obrigado
GOSTEI 0
POSTAR