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

Carlos H. Cantu listas em warmboot.com.br
Sábado Julho 31 10:23:02 -03 2021


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?

[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

GSvl> Mais alguém testando FB4 com o Firedac no Delphi10.3.3?

GSvl> Eu fiz um teste aqui com o FB4 com o parâmetro "DataTypeCompatibility =
GSvl> 3.0" para não ter que lidar com os novos tipos agora, pois sabidamente o
GSvl> FireDAC não os suportará.
GSvl> E meu programa que já funcionava em FB3 funciona bem com o FB4, mesmo os
GSvl> TFields que eu temia muito funcionam muito bem.
GSvl> Mas tenho uma exceção ao lidar com transações explícitas, o qual uso muito
GSvl> em minhas aplicações, algo assim:
GSvl>     try
GSvl>       q1.Connection.StartTransaction;
GSvl>       q1.SQL.Add('select  result_value FROM PROC_TESTE(''BLABLA'')  ');
GSvl>       q1.SQL.Add(';');
GSvl>       q1.Open;
GSvl>       q1.Connection.Commit;
GSvl>     except
GSvl>       on e:exception do
GSvl>       begin
GSvl>         q1.Connection.Rollback;
GSvl>         ELog('Erro ao calcular tempo de confecção: '+e.Message);
GSvl>       end;
GSvl>     end;
GSvl> Como pode ver, algo bem trivial, mas quando chamo uma procedure
GSvl> (exec/select from procedure) e a própria procedure gera uma exception
GSvl> dentro dela mesma (exception blablabla; exit) o programa prossegue como
GSvl> pré-determinado e vai para o rollback, mas daí o FB4 me envia uma outra
GSvl> mensagem como "firebird unable to find savepoint(...)", e morre lá nos
GSvl> domínios das units do FireDAC onde há os métodos dele.
GSvl> O mesmo não ocorre com o FB3, então eu vou cancelar por ora a homologação
GSvl> para o FB4, mas gostaria de continuar estudando o problema e descobrir se
GSvl> mais alguém na lista está presenciando problemas assim. Pelo que percebi é
GSvl> apenas com procedures que disparam exception. Eu suspeito que o FB4 desfaz
GSvl> a transação e o Firedac ao dar um rollback depois não encontra uma
GSvl> transação pendente para o rollback e que não há nada que eu possa fazer,
GSvl> pois o jeito planeja onde inicio a transação e finalizo estão corretas e
GSvl> beiram o trivial.




Mais detalhes sobre a lista de discussão lista