except on E:Exception do

Delphi

03/10/2006

Boa tarde!

Tem como colocar um loop dentro do except de um try tipo

    try
       SQLQ_TABLE.ExecSQL;
    except on E:Exception do
      begin
        while E.Message <> ´´ do
        begin
             xRECNO := IntToStr(StrToInt(xRECNO) + 1);
             SQLQ_TABLE.ExecSQL;
        end;
      end;
    end;


Na verdade eu quero que enquanto tiver uma excecao fique incrementando 1 na variavel xRECNO ate achar um numero que nao tenha sido usado e executar a query.

    try
       SQLQ_TABLE.ExecSQL;
    except on E:Exception do
      begin
          xRECNO := IntToStr(StrToInt(xRECNO) + 1);
          SQLQ_TABLE.ExecSQL;
      end;
    end;



Claudio_f

Claudio_f

Curtidas 0

Respostas

Massuda

Massuda

03/10/2006

Tente algo assim...
var
  Sucesso: Boolean;
...
  Sucesso := False;
  repeat
    // prepara para executar a SQL
    try 
      SQLQ_TABLE.ExecSQL; 
      Sucesso := True;
    except
      on E:Exception do 
        xRECNO := IntToStr(StrToInt(xRECNO) + 1); 
    end;
  until Sucesso;



GOSTEI 0
Marco Salles

Marco Salles

03/10/2006

se eu entendi direito , uma maneira de fazer isto

var
deucerto:boolean;
begin
deucert0:=false;
while not deucerto do
  begin
      try
        try
           SQLQ_TABLE.ExecSQL;
           deucerto:=True;
        except on E:Exception do
              xRECNO := IntToStr(StrToInt(xRECNO) + 1);
        finally
          if  deucerto then
            Break
        end;
   end;


uso o bloco finally para não haver estou de memória , pq presupoe-se que havera muitas exceções.

Mas o correto é , sabendo que alguma exceção , possa ocorrer , impedi-la

exceção , seria mesmo , quando algo ocorre-se fora do ´controle´

Um programa pode ter muitas blocos Try/finally , algumas instruçoes raises e pouquissimos blocos try/except


GOSTEI 0
Claudio_f

Claudio_f

03/10/2006

Valeu pessoal, deu certo com a dica do Massuda, e ele ficara em loop muito pouco, digamos umas duas ou tres vezes ateh achar um numero valido, e em muitos casos a excecao nem vai ocorrer.

Obrigado.


GOSTEI 0
POSTAR