Como faço para que não apareça uma mensagem quando eu COMMIT

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Avatar do usuário
tfg
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 83
Registrado em: Seg, 03 Mai 2004 3:38 pm
Localização: Novo Hamburgo - RS

Tenho um SQL que é executado quando eu pressiono um botão. No final tem um COMMIT que sempre dispara uma mensagem no Forms dizendo que "Nenhum registro foi alterado". Como faço pra que não apareça essa mensagem?
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

Simples! você muda o MESSAGE_LEVEL quando vai comitar. Isso pode ser feito assim:

Selecionar tudo

DECLARE
  VLEVEL NUMBER;
BEGIN
  VLEVEL:=:SYSTEM.MESSAGE_LEVEL;
  :SYSTEM.MESSAGE_LEVEL:=25;          
  COMMIT;
  :SYSTEM.MESSAGE_LEVEL:=VLEVEL;    
END;
Essa mensagem acontece porque realmente, nenhum registro do seu Forms foi alterado. Você pode usar nessa caso o STANDARD.COMMIT, que vai comitar apenas o que alterou no BANCO. (SQL, Updates, etc sem comitar as coisas do forms)
Zida
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 53
Registrado em: Ter, 08 Jun 2004 2:59 pm
Localização: Toledo - PR

Ou tb você pode tratar a mensagem de acordo com o que você deseja.
Para isto basta acrescentar os gatilhos de form ON-MESSAGE, e ON-ERROR.

Dentro do gatilho ON-MESSAGE, você pode fazer o seguinte:

Selecionar tudo

DECLARE
  TIPO_MENSAGEM   VARCHAR2(03) := MESSAGE_TYPE;
  CODIGO_MENSAGEM NUMBER       := MESSAGE_CODE;
BEGIN
  IF (TIPO_MENSAGEM = 'FRM') AND (CODIGO_MENSAGEM = 40400) THEN
      --Registro aplicado e salvo
      BELL;
      MESSAGE ('Registro salvo com sucesso');
END;
então quando houver a mensagem com o codigo FRM-40400 ao invez de o forms lhe dar a mensagem padrão, ele trara a sua mensagem. O mesmo você pode utilizar no ON-ERRORS dessa forma:

Selecionar tudo

DECLARE
  TIPO_ERRO   VARCHAR2(03) := ERROR_TYPE;
  CODIGO_ERRO NUMBER       := ERROR_CODE;
BEGIN
  IF (TIPO_ERRO = 'FRM') AND (CODIGO_ERRO = 41803) THEN
      --Não há registro anterior a partir do qual copiar valor
      NULL;
  END IF;
END;
E assim quando ocorrer essa mensagem de erro FRM-41803, o oracle não mostrara nada em seu formulario.
lamanita
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 42
Registrado em: Seg, 17 Mai 2004 2:41 pm
Localização: Porto Alegre - RS
Samuel, o lamanit@

FIZ ASSIM:

COLOQUEI NA ON-MESSAGE O SEGUINTE CÓDIGO:

Selecionar tudo

DECLARE 
  TIPO_MENSAGEM   VARCHAR2(03) := MESSAGE_TYPE; 
  CODIGO_MENSAGEM NUMBER       := MESSAGE_CODE; 
BEGIN 
  IF (TIPO_MENSAGEM = 'FRM') AND (CODIGO_MENSAGEM = 40405) THEN 
      --Registro aplicado e salvo 
      BELL; 
      hw_lib.prc_mensagem('E', false, 'Registro salvo com sucesso'); 
  END IF;
END;
E NA ON-ERROR O SEGUINTE CÓDIGO:

Selecionar tudo

DECLARE 
  TIPO_ERRO   VARCHAR2(03) := ERROR_TYPE; 
  CODIGO_ERRO NUMBER       := ERROR_CODE; 
BEGIN 
  IF (TIPO_ERRO = 'FRM') AND (CODIGO_ERRO = 40405) THEN 
      --Não há registro anterior a partir do qual copiar valor 
      NULL; 
  END IF; 
END;
MAS AINDA ASSIM A MENSAGEM NO CHANGES TO APPLY CONTINUA APARECENDO...
está PARECENDO QUE ELA NÃO VEM DO FORMS OU DE QUALQUER TRIGGER DO FORM.
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

Tenta fazer o seguinte:

Cria uma trigger KEY-COMMIT no seu form.
Dentro dela, você coloca aquele código:

Selecionar tudo

DECLARE
  VLEVEL NUMBER;
BEGIN
  VLEVEL:=:SYSTEM.MESSAGE_LEVEL;
  :SYSTEM.MESSAGE_LEVEL:=25;         
  COMMIT;
  :SYSTEM.MESSAGE_LEVEL:=VLEVEL;   
END;
lamanita
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 42
Registrado em: Seg, 17 Mai 2004 2:41 pm
Localização: Porto Alegre - RS
Samuel, o lamanit@

Também não funcionou, o erro acontece quando é acionado uma procedure de uma lib que commita os dados. Não posso só dar o commit normal sem chamar essa lib padrão.
ohoseki
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qui, 05 Jan 2006 9:44 am
Localização: sp

Não dá para substituir o commit por

forms_ddl('commit');
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

Olá ohoseki

Se você faz um forms_ddl('commit');, você está fazendo commit apenas no banco e não no Forms.

Exemplo:
* Você altera uma informação num campo. O Forms não envia automaticamente essa alteração pro banco. Fica alterado apenas no bloco do seu forms.
* Ou seja, se você der um forms_ddl('commit'), você estará apenas comitando alguma possível alteração que já está no banco... O que você acabou de mexer, não será comitado.

Lembre-se, que as informações só são enviadas para o banco se você der um POST ou é claro, um commit mesmo...

:-o
marcelo9i
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 20
Registrado em: Ter, 25 Out 2005 3:10 pm
Localização: RJ
Marcello Rodrigo

Outra forma:

Selecionar tudo

COMMIT  COMMENT ' '; 
Responder
  • Informação
  • Quem está online

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