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,
Forçar um erro
- dr_gori
- 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
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.
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.
-
- Rank: Programador Júnior
- Mensagens: 24
- Registrado em: Qua, 13 Abr 2005 5:09 pm
- Localização: Volta Redonda - RJ
Grata,
Analista de Sistemas
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?
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?
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
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...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.
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)
IF :TABELA.CAMPO = '1'
THEN
MESSAGE('não PODE SER 1');
RAISE FORM_TRIGGER_FAILURE;
END IF;
Tenta aí...
-
- Rank: Programador Júnior
- Mensagens: 24
- Registrado em: Qua, 13 Abr 2005 5:09 pm
- Localização: Volta Redonda - RJ
Grata,
Analista de Sistemas
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?
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?
- dr_gori
- 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
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)
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)
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes