Forçar um erro

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 13 Abr 2005 5:09 pm
Localização: Volta Redonda - RJ
Grata,

Analista de Sistemas

Bom dia!

Mais um probleminha...

Antes de fazer um INSERT, eu verifico no TRIGGER PRE-INSERT se os valores informados atendem a uma regra de negócio, se não atender, dou uma mensagem e RAISE FORM_TRIGGER_FAILURE.

Porém, mesmo não atendendo a condição e executando o FORM_TRIGGER_FAILURE o form passa pelo FORM_SUCCESS e dá a mensagem de "registro incluído com sucesso", o que não é verdade, pois o registro não foi inserido.

Como forçar um erro, no PRE-INSERT para que o FORM_SUCCESS seja igual a FALSE?

Aguardando,
aoliveira
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Seg, 24 Out 2005 11:46 am
Localização: Blumenau-SC
[ Alex ]

Verifique a se na trigger ON-INSERT do bloco não há apenas o código :
NULL;

Quando este problema aconteceu comigo era isso.
Espero que ajude.

[]'s
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Teoricamente, as validações devem ser feiras nas WHEN-VALIDATE-RECORD. Nelas, o raise faz com que a validação seja falsa, e não passa pra outras triggers.

A PRE-INSERT, é disparada apenas quando tudo no FORMS está ok, e ele está prestes a incluir a linha no banco...

Talvez a melhor idéia aí seja colocar a validação nas When-Validate-Record se possível.
Analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 13 Abr 2005 5:09 pm
Localização: Volta Redonda - RJ
Grata,

Analista de Sistemas

Bom, até funcionou usando a crítica na TRIGGER WHEN-VALIDATE-RECORD, porém, veja o exemplo.

Incluí um registro que será criticado, mas essa crítica ocorrerá somente quando eu sair do registro, certo? (Usando a trigger WHEN-VALIDATE-ITEM).

Se eu sair do registro e imediatamente clicar no botão de SALVAR, ele dará a crítica mas efetuará também o código do botão SALVAR (que no meu caso, pergunta: "Deseja incluir o registro?"). Neste ponto, ele já fez a critica e deu a mensagem de erro ao sair do registro, mas faz a pergunta do botão, tornando esse código sem razão de existir nesta hora.

Entende o problema?

Como fazer para, ao criticar na WHEN-VALIDATE-RECORD, ele parar nesta rotina, até o cidadão corrigir a informação, sem executar o código de SALVAR que ele, porventura venha a clicar?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Analista escreveu:Se eu sair do registro e imediatamente clicar no botão de SALVAR, ele dará a crítica mas efetuará também o código do botão SALVAR (que no meu caso, pergunta: "Deseja incluir o registro?"). Neste ponto, ele já fez a critica e deu a mensagem de erro ao sair do registro, mas faz a pergunta do botão, tornando esse código sem razão de existir nesta hora.
Se você colocou a consistência na WHEN-VALIDATE-RECORD, e dentro dessa consistência, colcou o RAISE FORM_TRIGGER_FAILURE, você nem consegue sair do registro...

Pode tentar salvar, pode tentar sair do registro, ele não deixa sair...

Mas a trigger é WHEN-VALIDATE-RECORD, e não WHEN-VALIDATE-ITEM.
(a ITEM, faz a mesma coisa, mas não deixa o cara sair do item em questão sem antes validar ele). Se dentro dela tem um RAISE, ele não deixa sair do item!

Veja esse exemplo: (dentro de uma WVR)

Selecionar tudo

IF :TABELA.CAMPO = '1'
THEN 
  MESSAGE('não PODE SER 1');
  RAISE FORM_TRIGGER_FAILURE;
END IF;
O carinha não consegue fazer nada se o campo for 1.
Tenta aí...

:-o
Analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 13 Abr 2005 5:09 pm
Localização: Volta Redonda - RJ
Grata,

Analista de Sistemas

Ihhhhhhhh!

Acho que complicou!

Porque o código com a RAISE FORM_TRIGGER_FAILURE está exatamente na WHEN-VALIDATE-RECORD!!!! E eu consigo clicar em outro botão!

E agora?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Provavelmente, o botão não é NAVIGABLE, ou sejá, ele roda como se o código estivesse dentro do próprio registro.

Neste caso, tenta o seguinte:
Coloca dentro do botão, antes de qualquer coisa um VALIDATE; ou um VALIDATE RECORD_SCOPE;

Assim, ele vai forçar a validação antes de executar o commit e os outros códigos.

(apenas uma idéia)
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes