Fórum Tipo Cardinal #418926
25/06/2012
0
Estou tentando desenvolver um sistema para fazer as rotinas de backups da base de dados do meu sistema.
Criei um backup e um restore usando Delphi 7 juntamente com os componentes IBBackupService, IBRestoreService da Paleta Interbase Admin.
Criei um formulário onde o usuário irá definir quais opções do backup e restore utilizar do componente através de checkbox no formulário.
O Backup funcionou perfeitamente assim como o restore.
Porém quiz eu ir mais a fundo nos teste e consegui corromper uma base de dados de testes minha para testar o backup. Com a base de dados corrompida o backup nao foi realizado. no Debug me aparece a seguinte mensagem:
database file appears corrupt (C:\USERS\WILL\DESKTOP\TESTE.FDB wrong page type page 861170 is of wrong type (expected 5, found 8))
Pesquisei na net e vi em alguns lugares dizeres que teria que usar o IBValidadeService também da paleta Interbase Admin para fazer a checagem da base de dados. Então criei no meu Formulario um local para marcar as opções de checagem.
Porém quando tento compilar o delphi acusa o um erro dizendo que um tipo cardinal é requerido.
Código abaixo:
Options :=[];
if checkDB.Checked then
Options := Options + [CheckDB];
if checkLimboTransaction.Checked then
Options := Options + [LimboTransactions];
if checkIgnoreChecksumChecagem.Checked then
Options := Options + [IgnoreChecksum];
if CheckKillShadowns.Checked then
Options := Options + [KillShadows];
if CheckMendDB.Checked then
Options := Options + [MendDB];
if CheckSweepDB.Checked then
Options := Options + [SweepDB];
if CheckValidateDB.Checked then
Options := Options + [ValidateDB];
if CheckValidateFull.Checked then
Options := Options + [ValidateFull];[Error] uBackupPrincipal.pas(387): Ordinal type required
Minhas dúvidas são as seguinte:
- Preciso realmente do IBValidadeService? Caso não como posso fazer o backup da base visto que quando ocorre o erro o arquivo de backup é apagado automaticamente.
- Caso necessario o IBValidadeService, como passar os parametros das opções em tipo cardinal?
Willian Amor
Curtir tópico
+ 0Posts
28/06/2012
Willian Amor
Estou tentando desenvolver um sistema para fazer as rotinas de backups da base de dados do meu sistema.
Criei um backup e um restore usando Delphi 7 juntamente com os componentes IBBackupService, IBRestoreService da Paleta Interbase Admin.
Criei um formulário onde o usuário irá definir quais opções do backup e restore utilizar do componente através de checkbox no formulário.
O Backup funcionou perfeitamente assim como o restore.
Porém quiz eu ir mais a fundo nos teste e consegui corromper uma base de dados de testes minha para testar o backup. Com a base de dados corrompida o backup nao foi realizado. no Debug me aparece a seguinte mensagem:
database file appears corrupt (C:\USERS\WILL\DESKTOP\TESTE.FDB wrong page type page 861170 is of wrong type (expected 5, found 8))
Pesquisei na net e vi em alguns lugares dizeres que teria que usar o IBValidadeService também da paleta Interbase Admin para fazer a checagem da base de dados. Então criei no meu Formulario um local para marcar as opções de checagem.
Porém quando tento compilar o delphi acusa o um erro dizendo que um tipo cardinal é requerido.
Código abaixo:
Options :=[];
if checkDB.Checked then
Options := Options + [CheckDB];
if checkLimboTransaction.Checked then
Options := Options + [LimboTransactions];
if checkIgnoreChecksumChecagem.Checked then
Options := Options + [IgnoreChecksum];
if CheckKillShadowns.Checked then
Options := Options + [KillShadows];
if CheckMendDB.Checked then
Options := Options + [MendDB];
if CheckSweepDB.Checked then
Options := Options + [SweepDB];
if CheckValidateDB.Checked then
Options := Options + [ValidateDB];
if CheckValidateFull.Checked then
Options := Options + [ValidateFull];[Error] uBackupPrincipal.pas(387): Ordinal type required
Minhas dúvidas são as seguinte:
- Preciso realmente do IBValidadeService? Caso não como posso fazer o backup da base visto que quando ocorre o erro o arquivo de backup é apagado automaticamente.
- Caso necessario o IBValidadeService, como passar os parametros das opções em tipo cardinal?
Alguem?
Gostei + 0
28/06/2012
Marco Salles
IBValidationService , IBBackupService , IBRestoreService ??
Gostei + 0
28/06/2012
Willian Amor
IBValidationService , IBBackupService , IBRestoreService ??
Ola bom dia amigo,
obrigado por me responder.
Esse Options se referem ao IBValidationService.
Gostei + 0
28/06/2012
Marco Salles
IBValidationService , IBBackupService , IBRestoreService ??
Ola bom dia amigo,
obrigado por me responder.
Esse Options se referem ao IBValidationService.
Mas olha so os set definidos para este tipo
TValidateOption = (LimboTransactions, CheckDB, IgnoreChecksum, KillShadows, MendDB,
SweepDB, ValidateDB, ValidateFull);
uses
unit IBServices;
Não tem os valores passados por voce
Options :=[]; if checkDB.Checked then Options := Options + [CheckDB]; if checkLimboTransaction.Checked then Options := Options + [LimboTransactions]; if checkIgnoreChecksumChecagem.Checked then Options := Options + [IgnoreChecksum]; if CheckKillShadowns.Checked then Options := Options + [KillShadows]; if CheckMendDB.Checked then Options := Options + [MendDB]; if CheckSweepDB.Checked then Options := Options + [SweepDB]; if CheckValidateDB.Checked then Options := Options + [ValidateDB]; if CheckValidateFull.Checked then Options := Options + [ValidateFull];
?????????????
Gostei + 0
28/06/2012
Willian Amor
IBValidationService , IBBackupService , IBRestoreService ??
Ola bom dia amigo,
obrigado por me responder.
Esse Options se referem ao IBValidationService.
Mas olha so os set definidos para este tipo
TValidateOption = (LimboTransactions, CheckDB, IgnoreChecksum, KillShadows, MendDB,
SweepDB, ValidateDB, ValidateFull);
uses
unit IBServices;
Não tem os valores passados por voce
Options :=[]; if checkDB.Checked then Options := Options + [CheckDB]; if checkLimboTransaction.Checked then Options := Options + [LimboTransactions]; if checkIgnoreChecksumChecagem.Checked then Options := Options + [IgnoreChecksum]; if CheckKillShadowns.Checked then Options := Options + [KillShadows]; if CheckMendDB.Checked then Options := Options + [MendDB]; if CheckSweepDB.Checked then Options := Options + [SweepDB]; if CheckValidateDB.Checked then Options := Options + [ValidateDB]; if CheckValidateFull.Checked then Options := Options + [ValidateFull];
?????????????
Amigo, me desculpe mas não entendi.
no caso eu verifico se o checkbox checkDB está marcado se tiver ele faz o CheckDB e assim sucessivamente.
não consigo nem colocos como True como está em tempo de projeto que da o mesmo erro.
Gostei + 0
28/06/2012
Marco Salles
Agora entendi sua dúvida
então , analisei seu código e parece que vc tem um checkDB com o mesmo nome do Set
if checkDB.Checked then
Options := Options + [CheckDB];
A Saida mais simples é trocar o Nome do componente checkDB
Gostei + 0
02/07/2012
Willian Amor
Agora entendi sua dúvida
então , analisei seu código e parece que vc tem um checkDB com o mesmo nome do Set
if checkDB.Checked then
Options := Options + [CheckDB];
A Saida mais simples é trocar o Nome do componente checkDB
Amigo bom dia, para que Option receba a opção que eu quero.
Obrigado pela ajuda.
Fiz o que voce disse e passou só que agora quando executo e chega no codigo para iniciar o serviço aparece uma mensagem de erro.
--------------------------- Debugger Exception Notification --------------------------- Project backup.exe raised exception class EIBInterBaseError with message please retry, specifying an option. Process stopped. Use Step or Run to continue. --------------------------- OK Help ---------------------------
Sabe o que pode ser,
eu marco o check
Gostei + 0
02/07/2012
Willian Amor
Agora entendi sua dúvida
então , analisei seu código e parece que vc tem um checkDB com o mesmo nome do Set
if checkDB.Checked then
Options := Options + [CheckDB];
A Saida mais simples é trocar o Nome do componente checkDB
Amigo bom dia, para que Option receba a opção que eu quero.
Obrigado pela ajuda.
Fiz o que voce disse e passou só que agora quando executo e chega no codigo para iniciar o serviço aparece uma mensagem de erro.
--------------------------- Debugger Exception Notification --------------------------- Project backup.exe raised exception class EIBInterBaseError with message please retry, specifying an option. Process stopped. Use Step or Run to continue. --------------------------- OK Help ---------------------------
Sabe o que pode ser,
eu marco o check
Parece que nao ta preencendo a propriedade options, nao sei bem.
procedure TfrmBackup.validacao;
var
vVerificaStatus:String;
begin
Screen.Cursor:= CrHourGlass;
MemoDetalhes.Lines.Clear;
with IBValidate do
begin
//Define o nome do servidor do banco de dados
ServerName := EditCaminhoServer.Text;
DatabaseName := EditCaminhoOrigem.Text;
//Define o protocolo da rede
case RadioGroupProtocolo.ItemIndex of
0: Protocol := TCP;
1: Protocol := Local;
end;
//Configura os parâmetros do Restore
LoginPrompt := false;
Params.Clear;
Params.Values[user_name] := Editusuario.Text;
Params.Values[password] := editSenha.Text;
//Configura as opções de Checagem
// TValidateOption.Options[]check;
Options :=[];
if checkboxDB.Checked then
Options := Options + [CheckDB];
if checkLimboTransaction.Checked then
Options := Options + [LimboTransactions];
if checkIgnoreChecksumChecagem.Checked then
Options := Options + [IgnoreChecksum];
if CheckKillShadowns.Checked then
Options := Options + [KillShadows];
if CheckMendDB.Checked then
Options := Options + [MendDB];
if CheckSweepDB.Checked then
Options := Options + [SweepDB];
if CheckValidateDB.Checked then
Options := Options + [ValidateDB];
if CheckValidateFull.Checked then
Options := Options + [ValidateFull];
IBValidate.Options := Options;
try
try
Active := True;
//Inicia a operação
ServiceStart;
//Verifica se a base esta com problemas e avisao ao usuario se estiver
vVerificaStatus := GetNextLine;
if vVerificaStatus = EmptyStr then
MemoDetalhes.Lines.Add(Atenção foi detectado um problema +#13 + com sua base de dados o sistema tentará repara, por favor aguarde);
//Lista os processo no Memo
While not eof do
MemoDetalhes.Lines.Add(GetNextLine);
except
on e : exception do
begin
MemoDetalhes.Lines.Add(Erro: + e.Message);
end;
end;
finally
Active := False;
Screen.Cursor := CrDefault;
end;
end;
end;Gostei + 0
03/07/2012
Willian Amor
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)