BACKUP DO BANCO DE DADOS MYSQL DELPHI 7

Delphi

08/03/2014

Alguém pode me ajudar. Tenho o delphi 7 e o componente MyDac, mas este componente não possui a propriedade backup. Já o delphi 2009 em diante possui e já assisti videos aulas ensinado como fazer. Alguem pode me ajudar com o delphi 7 . Meu sistema está funcionando redondo, mas preciso salvar o banco a cada fim de expediente.

Um abraço a todos!!!
Adailson Cosme

Adailson Cosme

Curtidas 0

Melhor post

Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson, no meu programa eu uso a função:

function TfrmConfBd.CreateProcessSimple(cmd: string):boolean;
var SUInfo:  TStartupInfo;
   ProcInfo: TProcessInformation;
begin
   FillChar(SUInfo, SizeOf(SUInfo), #0);
   SUInfo.cb      := SizeOf(SUInfo);
   SUInfo.dwFlags := STARTF_USESHOWWINDOW;
   SUInfo.wShowWindow := SW_HIDE;
   result := CreateProcess(nil, PChar(cmd), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SUInfo, ProcInfo);
   if result then
   begin
      WaitForSingleObject(ProcInfo.hProcess, INFINITE);
      CloseHandle(ProcInfo.hProcess);
      CloseHandle(ProcInfo.hThread);
   end;
end;


e depois o seguinte comando :

   aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers --port=' + edtlPorta.text;
   aux := aux + ' --user=' + edtlUsuario.Text + ' --password=' + edtlSenha.Text;
   aux := aux + ' --result-file=Backup\backup.sql --databases ' + edtlBanco.Text +'"';

//   ShowMessage(aux);
   if not createProcessSimple(aux) then
      ShowMessage('BACKUP NÃO FOI PROCESSADO!')
   else
      ShowMessage('Backup Realizado!');


sendo que o programa mysqldump está no mesmo diretório do meu programa.

espero que ajude.
GOSTEI 1

Mais Respostas

Adailson Cosme

Adailson Cosme

08/03/2014

Obrigado!! Vou testar.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Marcos, obrigado pela dica.
Sem abusar da sua experiência e boa vontade...vc poderia me ajudar a como carregar esse banco,.
ex.:OpenDialogs..!?

O meu banco não tem senha...como faço com os edit's que vc postou? Desculpe a minha ignorância!
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Marcos, obrigado pela dica.
Sem abusar da sua experiência e boa vontade...vc poderia me ajudar a como carregar esse banco,.
ex.:OpenDialogs..!?

O meu banco não tem senha...como faço com os edit's que vc postou? Desculpe a minha ignorância!


#codigo

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers --port=' + edtlPorta.text;
aux := aux + ' --user=' + edtlUsuario.Text + ' --password=' + edtlSenha.Text;
aux := aux + ' --result-file=Backup\backup.sql --databases ' + edtlBanco.Text +'"';
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson,

caso seu banco não tenha senha, altere
aux := aux + ' --user=' + edtlUsuario.Text + ' --password=' + edtlSenha.Text;
para
aux := aux + ' --user=' + edtlUsuario.Text + ' --password= ';

o aquivo criado é no padrão sql e possui o nome backup.sql, você pode alterar o nome da forma que desejar

para restaurá-lo eu uso a rotina abaixo:

aux := 'cmd.exe /c "mysql -u root '; //usuário root sem senha
aux := aux + edtlBanco.Text + ' < Backup\backup.sql"'; // edtlBanco.text é o nome da base de dados


// ShowMessage(aux);
if not createProcessSimple(aux) then
ShowMessage('RESTAURAÇÃO NÃO FOI PROCESSADA!')
else
lblInfo.Color := clRed;
lblInfo.Caption := 'Saia do sistema';
lblInfo.Refresh;
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

com o opendialogs é

  if OpenDialog1.Execute then
  begin
    arquivo := OpenDialog1.FileName;
  end
  else
  begin
    ShowMessage('Escolha algum arquivo, para executar a restauração.');
    exit;
  end;
  btnRestaurar.Caption := 'AGUARDE...';
  aux := 'cmd.exe /c "mysql -u root ';
  aux := aux + 'basededados < ' + arquivo + '"';

//  Memo1.Lines.Add(aux);

  if not createProcessSimple(aux) then
    ShowMessage('RESTAURAÇÃO NÃO FOI PROCESSADA!')
  else
  begin
    ShowMessage('Restauração Realizada!');
    ShowMessage('SAIA DO SISTEMA E ENTRE NOVAMENTE');
    btnRestaurar.Caption := 'Restaurar';
  end;
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Valeu mesmo!! Dica nota 10(dez)!!!
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Só mais uma ajuda!!

Está gravando com o banco vazio ...me dê mais uma ajuda.
...esse mydump.exe é só o executável ? Eu setou o colocando dentro da pasta da aplicação C:\Projeto Sad\

Veja o código e função:

public
{ Public declarations }
function CreateProcessSimple(cmd: string):boolean;


function Tfrm_cad_processo.CreateProcessSimple(cmd: string):boolean;
var SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
FillChar(SUInfo, SizeOf(SUInfo), #0);
SUInfo.cb := SizeOf(SUInfo);
SUInfo.dwFlags := STARTF_USESHOWWINDOW;
SUInfo.wShowWindow := SW_HIDE;
result := CreateProcess(nil, PChar(cmd), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SUInfo, ProcInfo);
if result then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;


procedure Tfrm_cad_processo.sButton1Click(Sender: TObject);
var
aux:string;
begin
aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers --port=' ;
aux := aux + '--user=' + ' --password=';
aux := aux + '--result-file=Backup\xurumelas.sql --databases' +'"';
// ShowMessage(aux);
if not createProcessSimple(aux) then
ShowMessage('BACKUP NÃO FOI PROCESSADO!')
else
ShowMessage('Backup Realizado!');
end;


SERÁ TEM ALGO ERRADO?
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson

altere para o seguinte:

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers ' ;
aux := aux + '--user=root --password= ';
aux := aux + '--result-file=Backup\xurumelas.sql --databases nomedobancodedados"';

o --result-file é o arquivo que será criado, no meu exemplo é criado dentro de uma pasta Backup que há dentro do diretório do progrma.

o --database é o nome do banco de dados que desejamos fazer o backup

para verificar se o comando está funcionando abra um prompt de comando e execute o comando manualmente:

mysqldump --opt --flush-logs --triggers --user=root --password= --result-file=xurumelas.sql --databases nomedobancodedados

e veja se há alguma mensagem ou se executou corretamente.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Marcos,

Eu estou usando o Xampp. e o comando não está sendo reconhecido via cmd.
O xampp está conectado com o aparche e mysql. Tanto é que a aplicação funciona e se conecta, mas não gera o banco.sql. O nome do meu banco é SAD e fiz todas as alteraçoes que vc me passou. Me ajuda mais um pouco...
Será q vu ter q desinstala-lo e instalar o mysql.exe ?

....consegui entrar no mysqld pelo xamp: c:\xamppp\mysql\bin\mysql.exe

mas ainda não gera o arquivo atraves do prompt!!
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson,

no diretório c:\xamppp\mysql\bin\ deve ter os dois programas, o mysql.exe e o mysqldump.exe,

copie-os para dentro do diretório do executável do seu programa e execute, via prompt de comando o seguinte comando:

mysqldump --opt --flush-logs --triggers --user=root --password= --result-file=xurumelas.sql --databases SAD

e verifique se criou o arquivo xurumelas.sql, senão tire um print screen do prompt de comando com o resultado, para poder te ajudar.

Depois que funcionar pelo prompt de comando poderemos passar o comando para o delphi.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

[img:descricao=PRINT DA TELA]http://arquivo.devmedia.com.br/forum/imagem/362363-20140309-154748.png[/img]
dá ENTER e aparece a seta abaixo.

Ainda não funcionou, mas sei que vai funcionar!!
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson,

isso está ocorrendo pois você está usando o comando dentro do mysql, no seu windows vá em iniciar -> todos programas -> acessórios -> Prompt de comando, nas janela 'DOS' que abrir vá até o diretório e execute o comando.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

[img]http://arquivo.devmedia.com.br/forum/imagem/362363-20140309-210654.png[/img]

não reconheceu os cmd's.
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Isso ocorreu pois o mysqldump não está no diretório que você está usando, vá até o diretório que possui o executável ou copie-o para o diretório que você está usando.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Desculpe estar te Chateando....
Me explique melhor...

A pasta onde está a minha aplicação ==> C:\Projeto Sad

Onde devo colocar os executáveis?
Em C:\ ou em C:\Projeto Sad ? Nesta segunda opção eu já coloquei.

Um abraço!!


Estou no trabalho. Ainda não poço testar. Quando chegar em casa eu texto. Se vc puder me adiantar ?
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson,

estamos aqui para ajudar, não se preocupe.

Se os executáveis já estão em C:\Projeto Sad, então quando você estiver no prompt de comando do windows digite:

cd \"Projeto Sad" ou cd c:\"Projeto Sad"
tecle enter
aí você deverá estar no mesmo diretório que estão os executáveis, então é só usar o comando indicado anteriormente.

Qualquer coisa nos avise.
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson,

estamos aqui para ajudar, não se preocupe.

Se os executáveis já estão em C:\Projeto Sad, então quando você estiver no prompt de comando do windows digite:

cd \"Projeto Sad" ou cd c:\"Projeto Sad"
tecle enter
aí você deverá estar no mesmo diretório que estão os executáveis, então é só usar o comando indicado anteriormente.

Qualquer coisa nos avise.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Ok! Então desse modo q vc falou: cd \"Projeto Sad" ou cd c:\"Projeto Sad" eu teria que colocar isso dentro dos comandos do delphi?...me ajuda
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Postado em: 09/03/2014 18:04:48
Olá Adailson,

isso está ocorrendo pois você está usando o comando dentro do mysql, no seu windows vá em iniciar -> todos programas -> acessórios -> Prompt de comando, nas janela 'DOS' que abrir vá até o diretório e execute o comando.

Postado em: 09/03/2014 19:36:08
não reconheceu os cmd's.

Postado em: 09/03/2014 22:24:18
Isso ocorreu pois o mysqldump não está no diretório que você está usando, vá até o diretório que possui o executável ou copie-o para o diretório que você está usando.

Postado em: 10/03/2014 10:56:58
Desculpe estar te Chateando....
Me explique melhor...

A pasta onde está a minha aplicação ==> C:\Projeto Sad

Onde devo colocar os executáveis?
Em C:\ ou em C:\Projeto Sad ? Nesta segunda opção eu já coloquei.

Um abraço!!
Estou no trabalho. Ainda não poço testar. Quando chegar em casa eu texto. Se vc puder me adiantar ?

Postado em: 10/03/2014 12:16:13
Olá Adailson,

estamos aqui para ajudar, não se preocupe.

Se os executáveis já estão em C:\Projeto Sad, então quando você estiver no prompt de comando do windows digite:

cd \"Projeto Sad" ou cd c:\"Projeto Sad"
tecle enter
aí você deverá estar no mesmo diretório que estão os executáveis, então é só usar o comando indicado anteriormente.

Qualquer coisa nos avise.

Postado em: 10/03/2014 19:53:52
Ok! Então desse modo q vc falou: cd \"Projeto Sad" ou cd c:\"Projeto Sad" eu teria que colocar isso dentro dos comandos do delphi?...me ajuda


Olá Adailson,

não é para colocar dentro dos comandos do delphi não, ainda estamos tentando fazer o comando funcionar dentro do comando de prompt, depois que der certo é que passaremos para o delphi.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Ok! Acabei de pegar sua resposta!!
Enfim consegui! Os comandos foram reconhecidos.
Apareceu um outro obstáculo: Entende-se que o Xampp usa uma senha para se conectar ....!!!analise para mim esta imagem...
O Xampp é executado junto com o windows e não pede senha..
Aparece: ACESSO NEGADO
Usa Senha:YES
[img]http://arquivo.devmedia.com.br/forum/imagem/362363-20140311-091652.png[/img]
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Olha a conexão que o delphi usa:

[img]http://arquivo.devmedia.com.br/forum/imagem/362363-20140311-094705.png[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/362363-20140311-094415.png[/img]

GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Ok! Acabei de pegar sua resposta!!
Enfim consegui! Os comandos foram reconhecidos.
Apareceu um outro obstáculo: Entende-se que o Xampp usa uma senha para se conectar ....!!!analise para mim esta imagem...
O Xampp é executado junto com o windows e não pede senha..
Aparece: ACESSO NEGADO
Usa Senha:YES
[img]http://arquivo.devmedia.com.br/forum/imagem/362363-20140311-091652.png[/img]


Olá Adailson,

por favor coloque um espaço depois do "--password=" e me informe.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Ok! Deu Certo!!!

Banco Criado com sucesso!!!!
Show de bola! Nem acredito!! Legal!!

Agora me ajuda a transferí-los para o delphi com os códigos iniciais(abaixo), tomando-se por base que minha aplicação vai estar na unidade C:\Projeto Sad\
...e que o MYDUMP.EXE e o MYSQL.EXE estão dentro desta pasta no diretório.

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers' ;
aux := aux + '--user=root --password= ';
aux := aux + '--result-file=Backup\xurumelas.sql --databases sad"';

GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Bom dia Adailson,

que bom que funcionou,

agora, para usar o comando no Delphi você pode usar o abaixo:


aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers ' ;
aux := aux + '--user=root --password= ';
aux := aux + '--result-file=Backup\xurumelas.sql --databases sad"';

lembrando que o arquivo xurumelas.sql será criado dentro da pasta Backup, que deve estar criada dentro do diretório do programa.

Caso não queira usar a pasta de Backup e salvar na mesma pasta do programa, altere a última linha para:

aux := aux + '--result-file=xurumelas.sql --databases sad"';
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Bom dia Marcos!

No momento estou no trabalho, mas quando chegar em casa testarei os comando no delphi.
Só para eu não perder tempo. ..
Lembra que eu te falei que minha aplicação esta em ==> C:\Projeto Sad ????? Essa parte do código abaixo é assim mesmo?

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers ' ;

...pois o dump.exe está em C:\Projeto Sad.
Eu não teria que apontá-lo para C:\Projeto Sad.

...e esse arquivo cmd.exe ? Será necessário colocá-lo em C:\Projeto Sad


Um abraço e obrigado!
Até mais tarde!!
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Bom dia Marcos!

No momento estou no trabalho, mas quando chegar em casa testarei os comando no delphi.
Só para eu não perder tempo. ..
Lembra que eu te falei que minha aplicação esta em ==> C:\Projeto Sad ????? Essa parte do código abaixo é assim mesmo?

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers ' ;

...pois o dump.exe está em C:\Projeto Sad.
Eu não teria que apontá-lo para C:\Projeto Sad.

...e esse arquivo cmd.exe ? Será necessário colocá-lo em C:\Projeto Sad


Um abraço e obrigado!
Até mais tarde!!

Olá Adailson,
Você só precisará apontar para c:\Projeto sad, se o executável do projeto estiver em outro diretório, o delphi ou o windows buscará executar o programa que está no mesmo diretório ou nos diretórios que estão no caminho (path) do windows.

O arquivo cmd.exe já está no caminho (path) do windows, ele é que executa o prompt de comando do windows, portanto não é necessário colocá-lo em c:\Projeto Sad, não.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Tem como transcrever o apontamento deste código (aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers ' ;) para a pasta do projeto: C:\Projeto Sad ? Estou com dúvidas quanto ao apontamento.
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Tem como transcrever o apontamento deste código (aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers ' ;) para a pasta do projeto: C:\Projeto Sad ? Estou com dúvidas quanto ao apontamento.


Olá Adailson,

se o executável do seu projeto está no mesmo diretório em que estão os programas mysqld e mysqldump, não precisa fazer mais nada não.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Tem como transcrever o apontamento deste código (aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers ' ;) para a pasta do projeto: C:\Projeto Sad ? Estou com dúvidas quanto ao apontamento.
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Tem como transcrever o apontamento deste código (aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers ' ;) para a pasta do projeto: C:\Projeto Sad ? Estou com dúvidas quanto ao apontamento.


Olá Adailson,

se o executável do seu projeto está no mesmo diretório em que estão os programas mysqld e mysqldump, não precisa fazer mais nada não.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Ola amigo!

Pelo que me recordo o comando não deu certo pelo delphi somente pelo prompt de comando quando entramos dentro da pasta( C:\Projeto Sad) , onde o meu projeto esta juntamente com os aplicativos mydump e mysql.
este códigos abaixo não estão direcionados para a pasta c:\ ??? Através do /c ??? Como faço para direcionar, pois não deu certo!!

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers' ;
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Bom dia Adailson,

que bom que funcionou,

agora, para usar o comando no Delphi você pode usar o abaixo:


aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers ' ;
aux := aux + '--user=root --password= ';
aux := aux + '--result-file=Backup\xurumelas.sql --databases sad"';

lembrando que o arquivo xurumelas.sql será criado dentro da pasta Backup, que deve estar criada dentro do diretório do programa.

Caso não queira usar a pasta de Backup e salvar na mesma pasta do programa, altere a última linha para:

aux := aux + '--result-file=xurumelas.sql --databases sad"';


Talvez você esteja executando dentro do delphi e não através do executável que deve estar no diretório do projeto, para executar pelo delphi você também tem que copiar os executáveis mysql e mysqldump para onde está o executável.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Bom dia, amigo!
Não está funcionando pelo delphi!!
Os dois arquivos : mysql.exe e o mysqldump.exe estão dentro da pasta do projetos,

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers' ;
aux := aux + '--user=root --password= ';
aux := aux + '--result-file=Backup\xurumelas2.sql --databases sad"';

...pelo prompt de cmd funcionou, desde que eu entra na pasta atraves /Cd Sad Projeto.

será que eu não deveria entrar dentro da pasta, alterando este código?

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers' ; ....para.....

aux := 'cmd.exe /c d/Projeto Sad"mysqldump --opt --flush-logs --triggers' ;
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Deu tudo certo!!!
Muito Obrigado por tudo!!

...Tinha declarado a função sem o '(' ;

Muito Obrigado por tudo!!
Depois eu contacto!!

Agora vou começar a fazer o carregamento deste arquivo gravado!!!
Fique com Deus!!!
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Que bom que deu certo,

quanto a colocar no comando o diretório "Projeto Sad', eu não sei, pois não consegui fazê-lo para diretórios que possuem espaço em seu nome.

Se tiver dúvida na restauração nos avise.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Olá amigo!!

Quanto à restauração ainda não estou conseguindo. Depois eu te peço uma orientação.
O que está acontecendo agora é que quando eu vou restaurar o banco utilizando um gerenciador(DBforge studio) aparece um erro(não sei se é de sintaxe). Veja
[img]http://arquivo.devmedia.com.br/forum/imagem/362363-20140313-163113.png[/img]

E o banco não chega a carregar.
Já exclui os registros de chaves existentes, tentei carregar por cima etc... e nada.
Podes me ajudar?


Um abraço.

GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Bom dia adailson,

eu não conheço o DBforge studio, mas essa mensagem é de perda de conexão com o servidor MySQL.

Percebi que você está executando o comando sql com o banco 'sad' selecionado, tente deixar selecionado o 'sad.localhost' e execute o comando sql (Sad.sql).

Você pode tentar restaurar pelo prompt de comando do windows:

mysql -u root sad < Backup\Sad.sql

execute o comando acima dentro do diretório "c:\PROJETO SAD DGST".

Até mais.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Olá Amigo!!
Vou esquecer um pouco o gerenciador de banco dbforge studio!!
Em relação a restauração pelo delphi não está carregando o arquivo. Tem alguma coisa errada com este código?

procedure Tfrm_cad_processo.btnrestaurarClick(Sender: TObject);
var
aux,arquivo:string;

begin
if OpenDialog1.Execute then
begin
arquivo := OpenDialog1.FileName;
end
else
begin
ShowMessage('Escolha algum arquivo, para executar a restauração.');
exit;
end;
btnRestaurar.Caption := 'AGUARDE...';
aux := 'cmd.exe /c "mysql -u root ';
aux := aux + 'backup < ' + arquivo + '"';

if not createProcessSimple(aux) then
ShowMessage('RESTAURAÇÃO NÃO FOI PROCESSADA!')
else
begin
ShowMessage('Restauração Realizada!');
ShowMessage('SAIA DO SISTEMA E ENTRE NOVAMENTE');
btnRestaurar.Caption := 'Restaurar';
end;
end;

O backup está sendo salvo em C:\Projeto sad\backup
O nome do banco é SAD
Pra encerrar este tópico só falta o carregamento!

Me ajuda mais uma vez!
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson,

Na linha:

aux := aux + 'backup < ' + arquivo + '"';

você está restaurando o banco de dados para um banco de dados nomeado 'backup'.

Como o seu banco de dados tem o nome de 'Sad', você deve alterar a linha para:

aux := aux + 'Sad < ' + arquivo + '"';

Qualquer coisa nos avise.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Além do detalhe do nome do banco, tem alguma outra coisa que possa estar errado no código, pois não carregou. Aparece a mensagem de 'carregado' mas não carrega. Não tem erro de sintaxe!!! E ja testei com dados do banco original e a cópia...
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson,

então vamos verificar o que está ocorrendo.

Usando o prompt de comando do windows vá até o diretório do seu projeto e digite o comando abaixo:

mysql -u root Sad < backup\Sad.sql

e me informe o que ocorrer;
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

O mysql não é reconhecido como comando interno.

Ja tentei em todos os diretórios: ==>C:\Projeto sad ; C:\projeto sad\backup

[img]http://arquivo.devmedia.com.br/forum/imagem/362363-20140314-223841.png[/img]

Já me certifiquei de que o arquivo sad.sql se encontra nos diretorios!!

Um abraço!!


GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

O mysql não é reconhecido como comando interno.

Ja tentei em todos os diretórios: ==>C:\Projeto sad ; C:\projeto sad\backup

[img]http://arquivo.devmedia.com.br/forum/imagem/362363-20140314-223841.png[/img]

Já me certifiquei de que o arquivo sad.sql se encontra nos diretorios!!

Um abraço!!




Isso é porque o mysql não está no diretório, copie-o para dentro do diretório c:\Projeto Sad.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Deu certo!!
Realmente o mysql nao estava.....
Nota 10!!!
Obrigado!!
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

...Pelo delphi ele não está entendendo que o o ARQUIVO a ser procurado pelo componente dialogs do delphi não está na pasta Backup/ da aplicação.
Será que o arquivo está declarado certo?(string).
Por favor dê mais uma olhada no código pra mim..
obrigado
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson,

por favor me mostre o seu código para a restauração.
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Veja o código:

FUNÇÃO:

function CreateProcessSimple(cmd: string):boolean;
procedure btnrestaurarClick(Sender: TObject);
private
{ Private declarations }

procedure Tfrm_cad_processo.btnrestaurarClick(Sender: TObject);
var
aux,arquivo:string;
begin
if OpenDialog1.Execute then
begin
arquivo := OpenDialog1.FileName;
end
else
begin
ShowMessage('Escolha algum arquivo, para executar a restauração.');
exit;
end;
btnRestaurar.Caption := 'AGUARDE...';
aux := 'cmd.exe /c "mysql -u root ';
aux := aux + 'Sad < ' + arquivo + '"';

if not createProcessSimple(aux) then
ShowMessage('RESTAURAÇÃO NÃO FOI PROCESSADA!')
else
begin
ShowMessage('Restauração Realizada!');
ShowMessage('SAIA DO SISTEMA E ENTRE NOVAMENTE');
btnRestaurar.Caption := 'Restaurar';
end;
end;

***********************************************************************************************************************************
function Tfrm_cad_processo.CreateProcesssimple(cmd: string):boolean;
var SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
FillChar(SUInfo, SizeOf(SUInfo), #0);
SUInfo.cb := SizeOf(SUInfo);
SUInfo.dwFlags := STARTF_USESHOWWINDOW;
SUInfo.wShowWindow := SW_HIDE;
result := CreateProcess(nil, PChar(cmd), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SUInfo, ProcInfo);
if result then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;

Obrigado!!!
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson

estranho, está igual ao que uso e aqui funciona corretamente, você pode postar o resultador da variável aux, para poder analisar?
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Veja, meu amigo!
Obrigado!
[img]http://arquivo.devmedia.com.br/forum/imagem/362363-20140316-212514.png[/img]

....resultado da variável. Já dei espaços entre o < , tirei espaço, etc..
Engraçado que no prompt de comando funciona, mas no delphi quando busca o arquivo não...

caso eu não consiga, me dê o comando no CMD direto(completo incluindo a pasta sem a busca através da variável!!, pois me confundo após o <.
ou seja, digitando tudo no prompt de comando.
GOSTEI 0
Marcos Saffran

Marcos Saffran

08/03/2014

Olá Adailson,

talvez seja por causa do nome do seu diretório ter espaços, esse é um problema que ainda não consegui resolver.

Você pode configurar a variável 'aux' conforme abaixo:

aux := 'cmd.exe /c "mysql -u root ';
aux := aux + 'Sad < Backup\Sad.sql"'; // aqui o comando mysql buscará o arquivo dentro da pasta Backup, que está dentro do diretório do programa

para executar no prompt de comando, dentro do diretório 'c:\PROJETO SAD DGST', use o seguinte:

mysql -u root Sad < Backup\Sad.sql
GOSTEI 0
Adailson Cosme

Adailson Cosme

08/03/2014

Valeu meu amigo!!
Vou mudar o nome da pasta para um único nome, para ver se funciona!!
Valeu e muito obrigado por tudo!!
Depois vou ver se crio outro tópico para datar a pasta com horario
GOSTEI 0
Jose Silva

Jose Silva

08/03/2014

primeiramente valeu a todos pela ajuda
mas gostaria de saber como faco para criar um backup por dia
vamos dizer que ao clicar no botao salvar o backup cria uma pasta com o nome
do dia, hora e mes e salvar dentro dela po backup

uso o delphi7
mysql 5.0
GOSTEI 0
Nelson Santos

Nelson Santos

08/03/2014

Desenvolva softwares 3D em Delphi 7
www.3dsistemas.com.br
GOSTEI 0
Fábio Ribeiro

Fábio Ribeiro

08/03/2014

Pessoal, desculpem reviver este tópico!
Primeiro agradeço pois este tópico me ajudou bastante neste problema do Backup.
Esta rotina no qual informaram funcionou corretamente tanto para Backup quanto para o Restore, porém, so funciona caso o Mysqldump e Mysql estejam dentro da raiz do executavel. Se eu tento alterar o diretório mandando pegar o Mysqldump e Mysql de dentro da Pasta BIN do mysql o mesmo não funciona pelo delphi.
Executanto o mesmo comando que e executado no delphi com essa função no CMD, funciona normalmente.

Podem me ajudar?
GOSTEI 0
Fábio Ribeiro

Fábio Ribeiro

08/03/2014

Vi algo sobre adicionar o caminho no PATH do windows. Fiz o procedimento e inserir ele, porém também não funcionou.
Ele não executa a restauração e os backups feitos ficam vazios com tamanho 0kb.
GOSTEI 0
Janderson Souza

Janderson Souza

08/03/2014

Ola pessoal, eu acompanhei as duvidas e sugestoes, no meu arquivo de backup com extensão SQL, gera um arquivo em branco, poderiam me ajudar?

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers --port=' + edtlPorta.text;
aux := aux + ' --user=' + edtlUsuario.Text + ' --password=' + edtlSenha.Text;
aux := aux + ' --result-file=backup\backup.sql --vendas ';

Esse codigo esta no botao.
GOSTEI 0
Janderson Souza

Janderson Souza

08/03/2014

Ola pessoal, eu acompanhei as duvidas e sugestoes, no meu arquivo de backup com extensão SQL, gera um arquivo em branco, poderiam me ajudar?

aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers --port=' + edtlPorta.text;
aux := aux + ' --user=' + edtlUsuario.Text + ' --password=' + edtlSenha.Text;
aux := aux + ' --result-file=backup\backup.sql --vendas ';

Esse codigo esta no botao.





Bom,deescobrir o motivo, porque ele estava gerando arquivo de backup 0KB.
O motivo era que o mysql.exe, e o mysqldump.exe, estavam em uma pasta no diretorio C:, onde o nome era maior que 8 caracteres, se for maior ele gera arquivo em branco, ou seja 0KB.
Eu renomeei a pasta do meu programa. Onde agora ele tem apenas 5 caracteres, e ta bacana.
Eu chamo pelo delphi atraves do ShellExecute.
Apanhei bastante, mas valew!!
GOSTEI 0
Luiz Silva

Luiz Silva

08/03/2014

Pessoal, li esse forum e gostaria de perguntar. Para realizar o processo de backup do banco eu gostaria de escolher o local onde irei salvar por exemplo num pendrive o arquivo sql. Como faço isso nos códigos acima? usando por exemplo o open dialogs?
GOSTEI 0
POSTAR