GARANTIR DESCONTO

Fórum BACKUP DO BANCO DE DADOS MYSQL DELPHI 7 #472368

08/03/2014

0

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

Responder

Post mais votado

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.

Marcos Saffran

Marcos Saffran
Responder

Gostei + 1

Mais Posts

08/03/2014

Adailson Cosme

Obrigado!! Vou testar.
Responder

Gostei + 0

08/03/2014

Adailson Cosme

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!
Responder

Gostei + 0

08/03/2014

Adailson Cosme

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 +'"';
Responder

Gostei + 0

08/03/2014

Marcos Saffran

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;
Responder

Gostei + 0

08/03/2014

Marcos Saffran

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;
Responder

Gostei + 0

08/03/2014

Adailson Cosme

Valeu mesmo!! Dica nota 10(dez)!!!
Responder

Gostei + 0

08/03/2014

Adailson Cosme

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?
Responder

Gostei + 0

08/03/2014

Marcos Saffran

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.
Responder

Gostei + 0

09/03/2014

Adailson Cosme

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!!
Responder

Gostei + 0

09/03/2014

Marcos Saffran

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.
Responder

Gostei + 0

09/03/2014

Adailson Cosme

[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!!
Responder

Gostei + 0

09/03/2014

Marcos Saffran

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.
Responder

Gostei + 0

09/03/2014

Adailson Cosme

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

não reconheceu os cmd's.
Responder

Gostei + 0

09/03/2014

Marcos Saffran

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.
Responder

Gostei + 0

10/03/2014

Adailson Cosme

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 ?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar