Array
(
)

Restore de um arquivo GBk

Wagnermarrane
   - 03 mar 2006

Boa tarde pessoal,

Pessoal eu tenho um sistema que efetua a geração de do bakup em um arquivo GBK. Porém eu gostaria de desenvolver algo que possa gerar automaticamente este arquivo GBK.... e uma outra aplicação que faça a restauração deste arquivo.

Estive pesquisando mas achei pouca coisa.

Se alguém tiver algo referente poderia postar de que forma eu poderia fazer isso

Abraço

Wagner


Paullsoftware
   - 03 mar 2006

Qual o delphi que vc usar?
No Delphi 7 Tem os componentes da paleta Interbase Admin nela existe dois componentes que uso são eles: TIbBackupService e TIbRestoreService...

os códigos são +/- assim:
para Criar o backup...
#Código

Try
with IBBackupService1 do
begin
Attach;
DatabaseName := Edit1.Text;
BackupFile.Add(Edit2.Text);
Active := True;
ServiceStart;
ShowMessage(´Backup realizado com sucesso´);
end;
except
on msg:exception do
MessageDlg(´Ocorreu o seguinte erro:´+#10+msg.Message,mtWarning,[mbOK],0);
end;

para restaurar...
#Código
Try
with IBRestoreService1 do
begin
Attach;
Options := [Replace];
DatabaseName.Add(Edit4.Text);
BackupFile.Add(Edit3.Text);
Active := True;
ServiceStart;
ShowMessage(´Restore realizado com sucesso´);
end;
except
on msg:exception do
MessageDlg(´Ocorreu o seguinte erro:´+#10+msg.Message,mtWarning,[mbOK],0);
end

...
achei um artigo que mostra o uso desses componentes segue o link abaixo: http://www.sqlmagazine.com.br/Colunistas/LucianoPimenta/05_Backup_FB_IB.asp do Luciano Pimenta...

espero ter ajudado! :wink:


Wagnermarrane
   - 04 mar 2006

muito obrigado...

Abraço


Wagnermarrane
   - 06 mar 2006

o código funcionou perfeitamente, porem quando eu peço para ele executar uma compressão após a geração do arquivo de backup ele acusa que o arquivo se encontra em uso

First chance exception at $77E649D3. Exception class EFOpenError with message ´Cannot open file ´C:\Arquivos de programas\Abcs\Premium\BD\premium.gbk´. O arquivo já está sendo usado por outro processo´. Process FTPSend.exe (3556)

o codigo que eu montei é este:

#Código

procedure TSendFTP.BackupClick(Sender: TObject);
var Arq_DB, Arq_Backup : string;
begin
Arq_DB:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gdb´;
Arq_Backup:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gbk´;
Try

with IBBackupService1 do
begin
active:=true;
// Attach;
DatabaseName := arq_DB;
BackupFile.Add(arq_Backup);
Active := True;
ServiceStart;
TrayIcon.ShowBalloonHint(´FTP´,´Backup realizado com sucesso´, bitInfo, 10);
active:=false;
end;
compactar.Click;
except
on msg:exception do
TrayIcon.ShowBalloonHint(´FTP´,´Ocorreu um erro na geração de backup´, bitError, 10);
end;

end;


ele starta o serviço, gera o arquivo, porem eu naum consigo progresseguir com outra operação com o arquivo gerado.

Abraço

Wagner


Paullsoftware
   - 06 mar 2006

certo, aqui eu trabalho numa boa com esses componentes, tenta dar um stop no serviço fazer alguma outra rotina e depois continuar o serviço novamente...


Wagnermarrane
   - 06 mar 2006


Citação:
certo, aqui eu trabalho numa boa com esses componentes, tenta dar um stop no serviço fazer alguma outra rotina e depois continuar o serviço novamente...


estive pesquisando de que formar eu poderia dar o stop no componente, porém não achei nada relacionado...

Vc sabe qual parametro tenho q passar.


Abraço

Wagner


Delphi32
   - 06 mar 2006

olha, posso estar enganado, mas tenhoa impressão de que no momento que o comando btnCompactar.Click está sendo executado, o arquivo ainda não foi criado totalmente. Isso porque o ServiceStart inicia o processo, mas não aguarda que ele seja terminado para prosseguir.

Faça o seguinte:

#Código


IBBackupService1.ServiceStart;
while not IBBackupService1.Eof do //>>Aqui você assegura que o fluxo terminar
begin //>>só continua quando o serviço de criar o arquivo.
//>>Faça alguma coisa ou nada...
end;
//>>Aqui você coloca os próximos comandos...


t+!


Wagnermarrane
   - 06 mar 2006


Citação:
olha, posso estar enganado, mas tenhoa impressão de que no momento que o comando btnCompactar.Click está sendo executado, o arquivo ainda não foi criado totalmente. Isso porque o ServiceStart inicia o processo, mas não aguarda que ele seja terminado para prosseguir.

Faça o seguinte:

#Código


IBBackupService1.ServiceStart;
while not IBBackupService1.Eof do //>>Aqui você assegura que o fluxo terminar
begin //>>só continua quando o serviço de criar o arquivo.
//>>Faça alguma coisa ou nada...
end;
//>>Aqui você coloca os próximos comandos...


t+!

cara eu monte este código, pelo o q eu entendi, porém estou outro erro:

#Código
procedure TSendFTP.BackupClick(Sender: TObject);
var Arq_DB, Arq_Backup : string;
begin
Arq_DB:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gdb´;
Arq_Backup:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gbk´;
while not eof do
begin
Try
with IBBackupService1 do
begin
DatabaseName := arq_DB;
BackupFile.Add(arq_Backup);
Active := True;
ServiceStart;

TrayIcon.ShowBalloonHint(´FTP´,´Backup realizado com sucesso´, bitInfo, 10);
end;
except
on msg:exception do
TrayIcon.ShowBalloonHint(´FTP´,´Ocorreu um erro na geração de backup´, bitError, 10);
end;
end;
compactar.Click;
end;


First chance exception at $77E649D3. Exception class EInOutError with message ´I/O error 6´. Process FTPSend.exe (3108)


Delphi32
   - 06 mar 2006

Você colou o código no lugar errado. Use o seguinte:

#Código


procedure TSendFTP.BackupClick(Sender: TObject);
var Arq_DB, Arq_Backup : string;
begin
Arq_DB:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gdb´;
Arq_Backup:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gbk´;
Try

with IBBackupService1 do
begin
active:=true;
// Attach;
DatabaseName := arq_DB;
BackupFile.Add(arq_Backup);
Active := True;
ServiceStart;
while not eof do
begin
//
end;
TrayIcon.ShowBalloonHint(´FTP´,´Backup realizado com sucesso´, bitInfo, 10);
active:=false;
end;
compactar.Click;
except
on msg:exception do
TrayIcon.ShowBalloonHint(´FTP´,´Ocorreu um erro na geração de backup´, bitError, 10);
end;

end;


t+!


Wagnermarrane
   - 07 mar 2006


Citação:
Você colou o código no lugar errado. Use o seguinte:

#Código


procedure TSendFTP.BackupClick(Sender: TObject);
var Arq_DB, Arq_Backup : string;
begin
Arq_DB:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gdb´;
Arq_Backup:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gbk´;
Try

with IBBackupService1 do
begin
active:=true;
// Attach;
DatabaseName := arq_DB;
BackupFile.Add(arq_Backup);
Active := True;
ServiceStart;
while not eof do
begin
//
end;



Cara o problemas é que trava e não sai

t+!


Wagnermarrane
   - 08 mar 2006

sobe - up


Delphi32
   - 08 mar 2006

O banco é muito grande? porque acho que não está travado, mas sim fazendo o backup. Vou colocar a seguir o código que eu uso para fazer backup e você pode adaptá-lo para sua situação:

ps.: Troquei o nome dos componentes para facilitar. No código abaixo também coloquei o usuário e senha padrão do interbase/firebird.

#Código


Screen.Cursor := crHourGlass;
try
Memo1.Lines.Clear;
Memo1.Lines.Add(´Iniciando o backup do banco de dados...´);
Application.ProcessMessages;
with IBBackupService1 do
begin
ServerName := ´localhost´;
LoginPrompt := False;
Params.Add(´user_name=SYSDBA´);
Params.Add(´password=masterkey´);
Active := True;
try
Verbose := True;
Options := [];
//if CheckBox1.Checked then Options := Options + [MetadataOnly];
//if not CheckBox2.Checked then Options := Options + [NonTransportable];
//if CheckBox3.Checked then Options := Options + [IgnoreLimbo];
DatabaseName := ´C:\CAMINHO_DO_SEU_BANCO.FDB´;
BackupFile.Clear;
BackupFile.Add(´C:\NOME_DO_ARQUIVO_DE_BACKUP.FBK´);
ServiceStart;
while not Eof do
begin
Memo1.Lines.Add(GetNextLine);
Application.ProcessMessages;
end;
finally
Active := False;
end;
end;
Memo1.Lines.Add(´Backup finalizado...´);
Application.ProcessMessages;
ShowMessage(´O Backup foi concluído com sucesso!´);
except
ShowMessage(´Erro ao tentar fazer backup do banco de dados!´);
end;
Screen.Cursor := crDefault;


Repare que eu coloco um Memo que mostra as mensagens do progresso do backup. Faça isso também para saber se está realmente travando ou não.

t+!


Delphi32
   - 08 mar 2006

cara, viajei... coloquei o código para fazer backup.... e o que você quer é restaurar, certo? aqui vai o código correto:

#Código


with IBRestoreService1 do
begin
ServerName := ´localhost´;
LoginPrompt := False;
Params.Add(´user_name=SYSDBA´);
Params.Add(´password=masterkey´);
Application.ProcessMessages;
Active := True;
try
Verbose := True;
Options := [Replace];
PageBuffers := 3000;
PageSize := 4096;
DatabaseName.Add(´C:\NOME_DO_BANCO.FDB´);
BackupFile.Add(´C:\NOME_DO_ARQUIVO_DE_BACKUP.FBK´);
ServiceStart;
while not Eof do
begin
Memo1.Lines.Add(GetNextLine);
Application.ProcessMessages;
end;
finally
Active := False;
end;
end;


t+!