Capturar mensagens firebird

Prezados amigos.
Estou dando manutencao num projeto onde a logica de negocios está toda no banco de dados Firebird, inclusive as mensagens de erro.
O problema é que dentro do scriptcase eu nao consigo ver essas mensagens adequadamente.
Por exemplo, se uma trigger dispara uma mensagem de erro, a tela de formulario ou controle fica vazia. Dai eu habilito o debug para descobrir que o firebird disparou uma mensagem de erro relativo a logica de negocios, por exemplo “Saldo nao pode ficar negativo”.
Existe alguma maneira de capturar essa mensagem de erro e mostrar no scriptcase como se fosse um alerta?

Não se emite mensagens em triggers.

Oi Haroldo.
Dentro de uma trigger do firebird tem isso aqui
if (valor_liquido < 0) then BEGIN
exception mensagem ‘VALOR LIQUIDO NAO PODE FICAR NEGATIVO’;
END

Pois é, não é uma boa prática executar exceptions em triggers.

E o SC não vai identificar esses erros.

problema é como eu falei, a logica de negocios ta toda no banco, os calculos e validacoes
. Ja peguei assim.

Então vc está em uma verdadeira encrenca.

Neste caso, o que vc sugere para tentar resolver esse problema?

Se vc tem a possibilidade de mexer no banco de dados, remnover os exceptions e no lugar gravar uma tabela de erro com registros por sessão php, no formulário capturar esse registro e exibir a mensagem.

Outra forma seria em fez de forumulario usar controle e tratar toda relação com o banco manualmente aplicando adequandamente transações e roollbacks para garantir a integridade do sistema.

Eu, particularmente aboli regras de negócio no banco de dados a muito tempo.

Metodologias como MVC, MVVM, VIPER trazem mais segurança, melhor documentação e portabilidade a regras de negócio.

Na verdade, isso acontece dentro de um controle. No evento onValidateSuccess é chamada uma stored procedure que inclui registros no banco de dados. Durante esses inserts e updates, os triggers envolvidos acabam disparando mensagns de erro.

E se houver um exception o que ocorre?
Desfaz todo o processo?

Se não usar as macros do SC e usar código php na unha consegue controlar os exceptions.

Evento onvalidatesucess, o nome já diz, evento executado quando não houve erros.

Se houver uma exception disparada por trigger ou procedure, a transacao inteira é desfeita.
Vou tentar chamar a procedure no metodo on validate

Mesmo assim com as macros do SC executando a SP não vai capturar o erro.

tem que usar aldo do tipo…

try {
    $db->query($stored_procedure); 
}
catch (PDOException $err) {
  //sua msg $err
}

consegui.
Usei o sc_lookup, em vez de sc_exec_sql
Exemplo :
sc_lookup(ds,“chamado da procedure”);
if ({ds}===false) {
$mensagem = {ds_erro};
// Aqui eu posso formatar a mensagem
sc_error_message($mensagem);

}
Deu certo !!!

So mais um detalhe que nao esta muito claro na documentacao do scriptcase.
A variavel de retorno do erro segue o mesmo nome da variavel dataset.
Entao, se eu usar sc_lookup(dscliente, “alguma coisa”) o erro vem para a variavel {dscliente_erro} e assim por diante

Se sua SP faz o controle de transação, ótimo então.