Mensagem ao salvar

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
ORA-PLSQL
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Sáb, 16 Fev 2008 5:22 pm
Localização: Paulista-PE

Boa tarde, na tela eu tenho um botão para salvar e criei o código abaixo, caso seja clicado quando nenhum campo estiver preenchido, porém ao invés de emitir a mensagem, ele informa:

Selecionar tudo

FRM-40401 No changes to save.

Selecionar tudo

		  If
	    	   ( :cadastro_componentes.codigo       is null )  
	     and ( :cadastro_componentes.descricao    is null )
	  	 and ( :cadastro_componentes.unidade      is null ) 
	     and ( :cadastro_componentes.tipo         is null )
	  	 and ( :cadastro_componentes.custo_prod   is null ) 
	  	 and ( :cadastro_componentes.custo_improd is null )
	  	 and ( :cadastro_componentes.dt_coleta    is null ) Then
	  	 
	  	 message ('Não há alterações para salvar');
	  	 message ('Não há alterações para salvar');
	  	 raise form_trigger_failure;
		  End If;
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

é que o forms ele checa o status do bloco, e se o status for diferente de CHANGED, quer dizer que os campos não foram alterados, então ele não deixa salvar, porque se não teve alterção =D

e se eu não me engano, quando todos os campos estão nulos, o status do bloco fica como NEW, e não deixa salvar também, e ele fala que não tem alterações para salvar, o outro status do bloco é o QUERY, qui é depois qui você executa a query no bloco =D

então o forms só deixa você salvar quando o status do bloco for igual a changed
para verificar isso é assim:

Selecionar tudo

GET_BLOCK_PROPERY('NOME_DO_BLOCO', status); 
:-o
ORA-PLSQL
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Sáb, 16 Fev 2008 5:22 pm
Localização: Paulista-PE

Mas a minha dúvida é porque ele não dispara a mensagem que coloquei no botão, caso os campos estejam em branco.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Pra usar a tua mensagem, você deve pegar o erro do Forms (por exemplo, FRM-99999) e, tratar na trigger ON-ERROR deste teu bloco.

Daí, você trata o erro e a informação que julgar necessário.

Segue abaixo um exemplo do próprio Help do Forms:

Selecionar tudo

DECLARE 
   lv_errcod  NUMBER       := ERROR_CODE; 
   lv_errtyp  VARCHAR2(3)  := ERROR_TYPE; 
   lv_errtxt  VARCHAR2(80) := ERROR_TEXT; 
BEGIN 
   IF (lv_errcod = 40nnn) THEN 
   /* 
   **  Perform some tasks here 
   */ 
   ELSIF (lv_errcod = 40mmm) THEN 
   /* 
   **  More tasks here 
   */ 
... 
... 
ELSIF (lv_errcod = 40zzz) THEN 
   /* 
   **  More tasks here 
   */ 
ELSE 
   Message(lv_errtyp||'-'||to_char(lv_errcod)||': '||lv_errtxt); 
   RAISE Form_Trigger_Failure; 
END IF; 
END;
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

coloca esse seu codigo na trigger pre-insert que 99% certeza dela aparecer.
ORA-PLSQL
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Sáb, 16 Fev 2008 5:22 pm
Localização: Paulista-PE

Bom dia, fiz dessa forma, porém continua a disparar a mensagem do forms ao invés da minha:

Selecionar tudo

Declare
 
 nCodErro   number       := ERROR_CODE;
 vTipoErro  varchar(3)   := ERROR_TYPE;
 vErroTexto varchar(100) := ERROR_TEXT;
 
Begin
 
 If (nCodErro = 40401) Then
  
  message('Não alterações para salvar');
  message('Não alterações para salvar');
 
 Else 
   Message(vTipoErro||'-'||to_char(nCodErro)||': '||vErroTexto); 
   RAISE Form_Trigger_Failure;
   
 End If;
End;
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Em que Trigger você colocou este código?
Na ON-ERROR do teu bloco?
ORA-PLSQL
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Sáb, 16 Fev 2008 5:22 pm
Localização: Paulista-PE

Sim, na on-error do meu bloco.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Desculpa brother...

Foi falha minha, esse FRM-40401, não se trata de erro, e sim de mensagem...

Vou ver se tenho algum exemplo aqui, mas, se não me falha a memória, era na ON-MESSAGE que eu havia colocado a validação.

Assim que localizar aqui eu te mando, mas, pra adiantar, se quiser ir testando ai.
Responder
  • Informação
  • Quem está online

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