Fórum Restore com Firebird embarcado #49924
19/03/2005
0
Deve ser uma bobagem, mas estou usando o firebird na forma embarcada. Está funcionando perfeitamente, porém eu tenho uma rotina de restore e backup onde eu utilizo TIBbackupservice e TIBrestoreservice. Se eu finalizo os processos fbserver.exe e fbguard.exe e rodo o meu programa, funciona todas as funções exceto esta. Aparece a mensagem ´Cannot attachj to services manager´.
Abaixo esta a rotina e o objeto :
object Restore: TIBRestoreService
Params.Strings = (
´user_name=sysdba´
´password=masterkey´)
LoginPrompt = False
TraceFlags = []
Verbose = True
PageBuffers = 0
Options = [Replace]
Left = 480
Top = 112
end
try
DM.Restore.DatabaseName.Clear;
DM.Restore.DatabaseName.add(dir + ´BASEST.FDB´);
DM.Restore.BackupFile.Clear;
DM.Restore.BackupFile.Add(texto);
DM.Restore.Active := true;
Memo1.Lines.Clear;
Memo1.Lines.Add(´Restore Iniciado às ´ + FormatDateTime(´hh:nn:ss´, now) + ´ horas´);
DM.Restore.ServiceStart;
While not DM.Restore.Eof do
Memo1.Lines.Add(DM.Restore.GetNextLine);
DM.Restore.Active := false;
Memo1.Lines.Add(´Restore Finalizado às ´ + FormatDateTime(´hh:nn:ss´, now) + ´ horas´);
except
on E:Exception do
begin
Application.MessageBox(Pchar(´Erro1.´+#13+
´Contate o administrador do sistema.´+13+
´Erro:´+13+e.Message),
´Erro´, MB_ICONERROR + MB_OK);
passou := false;
end;
end;
Detalhe, esta rotina funciona se o fbserver.exe estiver executando. Como faço para fazer esta rotina funcionar na forma embarcada?
Grato pela atenção dispensada.
Rookie
Curtir tópico
+ 0Posts
19/03/2005
Afarias
não faz!
Só tem sentido backup on-line em sistemas multi-usuário. Para fazer um backup com o FB embedded basta desconectar o Database e fazer a cópia do arquivo.
T+
Gostei + 0
19/03/2005
Rookie
Obrigado por me responder, porém acha que não fui claro na minha exposição. O meu programa trabalha, vamos dizer assim, uma massa de dados por vez. A necessidade de tirar backup e restore é para o caso do usuário retornar a uma massa de dados que ele já trabalhou, por isso eu coloquei essas funções no programa. É uma função para o usuário e não para o administrador do sistema. Não é uma aplicação que roda em rede, é stand-alone. Porém por exigência superior é necessário que ele rode na forma embarcada e não está funiconando pelo motivo já exposto.
Espero ter sido mais claro e se vc puder me ajudar antecipadamente lhe agradeço.
Um abraço,
rookie
Gostei + 0
19/03/2005
Afarias
A versão Embedde do FB não suporta Services API -- ou seja -- vc não pode usar IBBackupService ou IBRestoreService com o FB Embedded.
Como disse antes, para fazer um backup dos dados apenas crie uma função q copie o arquivo GDB
T+
Gostei + 0
20/03/2005
Rookie
Gostei + 0
20/03/2005
Rookie
Ainda dentro do assunto Firebird Embarcado, tem como saber se na máquina que estiver rodando o programa, o modo que se encontra o firebird, se é embarcado ou não? Pergunto isso pq se não for na forma embarcada eu deixo a rotina como está hoje, pois funciona, se não faço uma outra copiando e restaurando na mão.
Estive pensando nessa solução abaixo, porém se tiver uma mais segura e melhor bolada, eu te agradeço.
var
nHandle: HWnd;
begin
nHandle := FindWindow(´fb_server´,´Firebird Server´);
if nHandle <> 0 then
............ (Firebird não embarcado)
else
............ (Firebird embarcado);
Gostei + 0
22/03/2005
Afarias
usar a api de serviços do Windows é outra forma, usar o comando NET (net start |find ´Firebird´) é outra, checar diretamente a gds32.dll é outra (informações de versão ou tamanho), etc...
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)