Fórum WinExec com (Backup e Restore) com resolver...? #59728
10/05/2008
0
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;
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
Curtir tópico
+ 0
Responder
Posts
16/05/2008
Eniorm
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
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,...).
Responder
Gostei + 0
08/04/2013
Ramar Faleiro
Parabéns Enio Rodrigo,me ajudou muito,obrigado
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)