Fórum Tipo Cardinal #418926

25/06/2012

0

Boa noite a todos,

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

Willian Amor

Responder

Posts

28/06/2012

Willian Amor

Boa noite a todos,

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

Gostei + 0

28/06/2012

Marco Salles

Esses Options esta se referindo a qual dos componentes

IBValidationService , IBBackupService , IBRestoreService ??

Responder

Gostei + 0

28/06/2012

Willian Amor

Esses Options esta se referindo a qual dos componentes

IBValidationService , IBBackupService , IBRestoreService ??



Ola bom dia amigo,

obrigado por me responder.

Esse Options se referem ao IBValidationService.
Responder

Gostei + 0

28/06/2012

Marco Salles

Esses Options esta se referindo a qual dos componentes

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


?????????????
Responder

Gostei + 0

28/06/2012

Willian Amor

Esses Options esta se referindo a qual dos componentes

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

Gostei + 0

28/06/2012

Marco Salles

Hummmm

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

Responder

Gostei + 0

02/07/2012

Willian Amor

Hummmm

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
Responder

Gostei + 0

02/07/2012

Willian Amor

Hummmm

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

Gostei + 0

03/07/2012

Willian Amor

Sobe
Responder

Gostei + 0

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

Aceitar