[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