Estou com uma dúvida e gostaria de saber se é possível resolver.
Criei um Trigger em uma tabela e esta funcionando perfeitamente. faço uma validação e se entrar em uma determinada condição mostra uma mensagem de erro. a mensagem aparerece no rodape do forms.
Gostaria de saber se é possível exibir essa mensagem tipo um alerta...quando entrar na condição o sistema exibir um alerta na tela.
CREATE OR REPLACE TRIGGER DBAMV.TRG_U_VERIF_CD_IMATEC
Before update
ON dbamv.same_caixa
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
--Pragma Autonomous_Transaction;
Begin
IF (UPDATING) THEN
DECLARE
Cursor cCD_IMATEC Is
SELECT count(*)
FROM dbamv.same_caixa_agrupamento
WHERE cd_imatec = :new.cd_imatec;
vqt_imatec NUMBER;
Begin
OPEN cCD_imatec;
FETCH cCD_imatec INTO vqt_imatec;
Close cCD_imatec;
IF :new.cd_imatec > 0 then
IF vqt_imatec > 0 Then
raise_application_error( -20002, 'Código Imatec já utilizado !!! = '||vqt_imatec);
END IF;
END IF;
END;
END IF;
End;
/
1-Por que não faz a verificação nas triggers do próprio forms? visto ser uma validação simples e não ficar aumentando a complexidade da estrutura e negócio no banco de dados.
2- Dependendo ainda do negócio talvez constraints UNIQUE na tabela resolva seu problema de ter de criar triggers.
Eu já criei uma chave primaria na tabela....até ai tranquilo. se a pessoa tenta salvar a informa apertando F10 por exemplo o forms ta um erro no rodapé e não deixa salvar...
A ideia era mostrar essa mensagem em um alerta mesmo. tipo (O Código já esta sendo utilizado, por favor tente outro código...).
Não sou muito experiente em desenvolvimento de forms.... quando você fala utilizar as triggers do proprio forms, onde eu utilizo?
Existem algumas maneiras mas tu podes, por exemplo, criar uma trigger pre-insert (no caso de inserção) no bloco de dados que possui sua informação. Aí tu farias a consulta se o ID existe e lançarias o alerta, impedindo sua gravação.
Fiz o teste hoje novamente. Só que dessa vez não exibiu nenhuma alerta....
Só da o erro no rodapé: FRM-40509 Erro do Oracle: não é possivel ATUALIZAR o registro. (devido a trigger)
Detalhe, a query nesse caso esta retornando 1
declare
Vresult number(5);
alerta number(5);
begin
SELECT count(*) into Vresult
FROM dbamv.same_caixa_agrupamento
WHERE cd_imatec = :same_caixa.cd_imatec;
if Vresult >= 1 then
set_alert_property('alert_caixa',alert_message_text,'Código já utilizado, por favor utilizar outro código !!!' );
alerta:=show_alert('alert_caixa');
end if;
end;
Quando eu coloquei o código acima na PRE-INSERT (isso no bloco) não exibiu o alerta. lembrando que eu tenho uma trigger na tabela que valida essa informação.
, quando clica para sair do campo o forma valida os dados e exibe a mensagem. Porem só exibe a mensagem na primeira vez, se eu clica no campo novamente e depois clicar para sair o forms não exibe mais a mensagem.
é possível deixar que ele sempre exiba a mensagem até o usuário alterar os dados no campo? tipo só vai conseguir ir para o próximo campo se o valor estiver correto.
depois que exibi o alerta eu coloquei para voltar para o item com: