Estou com um problema no LOOP.
No LOOP peço que faça um insert no bloco. POrém pode acontecer que um determinado campo seja nulo, quando eu deixo nulo ele não salva no banco. alguém sabe tratar esse problema.....
Insert quando null
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Se tu quer salvar os dados de um bloco, qual o motivo do loop? Ele não é base table?
Ele não salva apenas um campo ou não salva um registro inteiro quando um campo m especifico é nulo?
Este erro acontece só com um campo em especial ou qualquer campo do formulário?
É apontado algum erro ou apenas para o processo?
Ele salva os registros posteriores ao registro com dado nulo?
Ele não salva apenas um campo ou não salva um registro inteiro quando um campo m especifico é nulo?
Este erro acontece só com um campo em especial ou qualquer campo do formulário?
É apontado algum erro ou apenas para o processo?
Ele salva os registros posteriores ao registro com dado nulo?
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
Sim são dois campos não base table.....
Não salva o registro todo. Mais quando um campo especifico está nulo. Quando esse campo esta preenchido salva tudo.
Não aponta nenhuma erro, ele deveria salvar normalmente.
So salva esse campo especifico quando estiver preenchido....
Mais deveria salvar também quando nulo
Não salva o registro todo. Mais quando um campo especifico está nulo. Quando esse campo esta preenchido salva tudo.
Não aponta nenhuma erro, ele deveria salvar normalmente.
So salva esse campo especifico quando estiver preenchido....
Mais deveria salvar também quando nulo
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
VOu Postar aqui o codigo.
Bom esse codigo já postei ate aqui. De tanto problema que me traz..
Bom esse codigo já postei ate aqui. De tanto problema que me traz..
nr_rep Number;
REP NUMBER;
v_top_rec Number;
v_cur_rec Number;
v_cur_block Varchar2(100) := :System.current_block;
v_nro_rec Number;
Begin
validar_obrigatorios;
go_block('anticorpo1');
v_top_rec := get_block_property('anticorpo1', top_record);
v_cur_rec := get_block_property('anticorpo1', current_record);
first_record;
If :cd_anticorpo1 Is Not Null and :vl_anticorpo1 is not null
or :cd_anticorpo1 is null and :vl_anticorpo1 is null Then
Select count(1) Into v_nro_rec
From pra p
Where p.nr_amostra = :resultados_gerais.nr_amostra
And p.nr_controle = :resultados_gerais.nr_controle
And p.nr_repeticao = :resultados_gerais.nr_repeticao
And p.cd_servico = :resultados_gerais.cd_servico;
-- And p.cd_anticorpo = :cd_anticorpo1;
if v_nro_rec > 0 then
Delete From pra
Where nr_amostra = :nr_amostra
And nr_repeticao = :nr_repeticao;
end if;
Loop
If :system.record_status In ('NEW', 'INSERT') Then
If :cd_anticorpo1 Is Not Null And :vl_anticorpo1 Is Not Null Then
Begin
Insert Into pra
(nr_amostra,
nr_controle,
nr_repeticao,
cd_servico,
cd_anticorpo,
dt_realizacao,
dt_atualizacao,
cd_usuario,
vl_anticorpo)
Values
(:resultados_gerais.nr_amostra,
:resultados_gerais.nr_controle,
:resultados_gerais.nr_repeticao,
:resultados_gerais.cd_servico,
:cd_anticorpo1,
:resultados_gerais.dt_realizacao,
:resultados_gerais.dt_atualizacao,
:global.cd_pessoafisica,
:vl_anticorpo1);
Exception
When Others Then
controle_de_msg('ERR', Sqlerrm);
End;
forms_ddl('commit');
end if;
End If;
Exit When :system.last_record = 'TRUE';
next_record;
End Loop;
go_record(v_top_rec);
go_record(v_cur_rec);
go_block(v_cur_block);
End If;
--finaliza bloco 1
--Iniciar bloco anticorpo 2
If :cd_anticorpo2 Is Not Null and :vl_anticorpo2 is not null
or :cd_anticorpo2 Is Null and :vl_anticorpo2 is null Then
go_block('anticorpo2');
v_top_rec := get_block_property('anticorpo2', top_record);
v_cur_rec := get_block_property('anticorpo2', current_record);
first_record;
Select count(1) Into v_nro_rec
From pra p
Where p.nr_amostra = :resultados_gerais.nr_amostra
And p.nr_controle = :resultados_gerais.nr_controle
And p.nr_repeticao = :resultados_gerais.nr_repeticao
And p.cd_servico = :resultados_gerais.cd_servico
And p.cd_anticorpo = :cd_anticorpo2;
if v_nro_rec > 0 then
Delete From pra
Where nr_amostra = :nr_amostra
And nr_repeticao = :nr_repeticao;
end if;
Loop
/* if :vl_resultado2 = 000 then
:cd_anticorpo2 := null;
:vl_anticorpo2 := null;
end if;*/
If :system.record_status In ('NEW', 'INSERT') Then
If :cd_anticorpo2 Is Not Null And :vl_anticorpo2 Is Not Null Then
Begin
Insert Into pra
(nr_amostra,
nr_controle,
nr_repeticao,
cd_servico,
cd_anticorpo,
dt_realizacao,
dt_atualizacao,
cd_usuario,
vl_anticorpo)
Values
(:resultados_gerais.nr_amostra,
:resultados_gerais.nr_controle,
:resultados_gerais.nr_repeticao,
:resultados_gerais.cd_servico,
:cd_anticorpo2,
:resultados_gerais.dt_realizacao,
:resultados_gerais.dt_atualizacao,
:global.cd_pessoafisica,
:vl_anticorpo2);
Exception
When Others Then
controle_de_msg('ERR', Sqlerrm);
End;
end if;
forms_ddl('commit');
End If;
Exit When :system.last_record = 'TRUE';
next_record;
End Loop;
go_record(v_top_rec);
go_record(v_cur_rec);
go_block(v_cur_block);
End If;
If :parameter.acao = 'I' Then
commit_form;
habilitar_botoes;
else
:system.message_level := 25;
Commit;
:system.message_level := 0;
message('Operação Realizada com Sucesso!');
end if;
End;
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Primeiramente eu preciso entender um pouco o que tu estas a fazer para então poder dar a melhor sugestão.
Porque o bloco é não base table?
Como esta estruturado seu loop?(preferencia postar o código)
Qual o motivo de salvar um registro nulo? ou estas informações são parde de um registro e o que você esta fazendo é atualiza-lo?
Porque o bloco é não base table?
Como esta estruturado seu loop?(preferencia postar o código)
Qual o motivo de salvar um registro nulo? ou estas informações são parde de um registro e o que você esta fazendo é atualiza-lo?
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Mais uma coisa, se este código esta a lhe dar tantos problemas assim, esta na hora de repensar sua tela e quems sabe refazer ela de forma a não precisar deste código.
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
tIPO, ELES NÃO são DATA TABLE.
porque PRECISO DE UMA TELA COM 2 RESULTADOS. POREM FICAM SALVO EM UM BLOCO SO E UM CAMPO SO CHAMADO CD_ANTICORPO, VL_ANTICORPO. NÃO ESTOU ATUALIZADO. SÃO PARTE DE UM REGISTRO...
porque PRECISO DE UMA TELA COM 2 RESULTADOS. POREM FICAM SALVO EM UM BLOCO SO E UM CAMPO SO CHAMADO CD_ANTICORPO, VL_ANTICORPO. NÃO ESTOU ATUALIZADO. SÃO PARTE DE UM REGISTRO...
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Ele não salva pois sua lógica os impede...
Graças a este comando, se os dois campos estiverem vazios ou cheios, ele obriga a salvar, caso um esteja vazio e o outro não ele não salvara.
If :cd_anticorpo1 Is Not Null
And :vl_anticorpo1 Is Not Null
Or :cd_anticorpo1 Is Null
And :vl_anticorpo1 Is Null Then
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
rETIREI ESSE CODIGO.
PORÉM AINDA NÃO SALVA.....
PERCEBI QUANDO RETIRO O
DENTRO DO LOOP ANTES DO INSERT.
ELE NÃO ME DEIXA INSERIR POR ESTAR NULO....
PORÉM AINDA NÃO SALVA.....
PERCEBI QUANDO RETIRO O
If :cd_anticorpo1 Is Not Null And :vl_anticorpo1 Is Not Null Then
ELE NÃO ME DEIXA INSERIR POR ESTAR NULO....
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Por acaso algum destes campos é obrigatório na tabela?
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Ai esta, se na tabela ele é obrigatório vce não tem como inserir sem o informar não importa o que a tela diz... você não conseguirá persistir esta informação no banco...
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
Gfkauer....
POis depois que postei aqui, fiquei pensando nisso.
Mais mesmo assim obrigada pela ajuda. Pensei em uma forma de gerar um relatorio atraves desse tela. e imprimir da mesma forma.
Mais gostaria de uma dica sua. Qual seria a melhor forma de fazer esse codigo.... Nesse situação....
Tenho duas colunas, na tela. Uma chamada cd_anticorpo1 e outra cd_anticorpo2
Porem vão salvar em um mesmo campo chamado cd_anticorpo1...
Sabe qual melhor forma??...
Obrigada pela atenção
POis depois que postei aqui, fiquei pensando nisso.
Mais mesmo assim obrigada pela ajuda. Pensei em uma forma de gerar um relatorio atraves desse tela. e imprimir da mesma forma.
Mais gostaria de uma dica sua. Qual seria a melhor forma de fazer esse codigo.... Nesse situação....
Tenho duas colunas, na tela. Uma chamada cd_anticorpo1 e outra cd_anticorpo2
Porem vão salvar em um mesmo campo chamado cd_anticorpo1...
Sabe qual melhor forma??...
Obrigada pela atenção
-
- Moderador
- Mensagens: 1177
- Registrado em: Qui, 15 Out 2009 10:28 am
- Localização: Recife
teria que testar com IF,
ou então
se um estiver nulo grava o 2, mas ai tem que ver qual a sua regra, de quando grava 1 e quando grava o 2,
ou então
nvl(anticorpo1, anticorpo2)
no insert,se um estiver nulo grava o 2, mas ai tem que ver qual a sua regra, de quando grava 1 e quando grava o 2,
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes