[firebase-br] Mais alguém testando FB4 com o Firedac no Delphi10.3.3?

Gladiston Santana gladiston em vidy.com.br
Segunda Agosto 2 09:50:32 -03 2021


Não, a primeira exceção é planejada dentro da própria SP, exemplo:
create or alter procedure  PROC_TESTE (...)
     if (exists(
        select 1 from custos_ativsub a
        where a.descricao=:p_descricao
      )) then
      begin
        --- Essa é uma exceção disparada dentro do programa e vai retornar
a mensagem de erro que eu disser abaixo
        exception ERR 'Ação solicitada ('||:p_acao||') '||
          'não é permitida porque existe uma subatividade de mesmo nome
"'||:p_descricao||'".';
        suspend;
        exit;
      end
(...)
Daí meu programa com o código abaixo....
     try
       q1.Connection.StartTransaction;
       q1.SQL.Add('select  result_value FROM PROC_TESTE(''BLABLA'')  ');
       q1.SQL.Add(';');
       q1.Open;
       q1.Connection.Commit;
     except
       on e:exception do
       begin
         ELog('Erro: '+e.Message+' (operação desfeita)');
         q1.Connection.Rollback;
       end;
end;
...O programa vai interceptar a exception, registrar o erro e dar o
RollBack, mas o rollback em si mesmo retornará uma segunda mensagem de erro
"firebird unable to find savepoint(...)" com uma numeração de savepoint,
provavelmente criada artificialmente como "at savepoint231". Eu pesquisei
bastante e o mais próximo que cheguei está aqui:

https://firebirdsql.org/file/documentation/html/en/refdocs/fbdevgd30/firebird-30-developers-guide.html
(...)Firedac1.Options.EnableNested: Controls nested transactions. The
default value is True. Firebird does not support nested transactions as
such but FireDac can emulate them using savepoints. For more details, see
note(3) below.

Essa "emulação" que o FDac faz me parece ser a origem do problema, mas em
algum momento o Firedac do Delphi 10.3.x e resolveu tal problema porque
nunca vi isso acontecer com o FB3 na época de migração, contudo parece ter
voltado com o FB4. Me parece que posso resolver simplesmente desabilitando
o tal "Firedac1.Options.EnableNested", mas se eu fizer isso poderei ter
resultados inesperados em códigos muito antigos que funcionam perfeitamente
bem. Então eu tô parando a homologação até concluir que a estrada à frente
é perfeitamente segura para se chegar ao FB4.

Obrigado pela ajuda.

Em sáb., 31 de jul. de 2021 às 10:25, Carlos H. Cantu via lista <
lista em firebase.com.br> escreveu:

> Se vc chamar a mesma SP (provocando a exceção) pelo iSQL ou IBExpert,
> etc. o Firebird tb retorna o mesmo erro quando vc manualmente dá
> rollback?
>
>


Mais detalhes sobre a lista de discussão lista