Estou com um problemão, tenho que atualizar alguns valores dentro de um forms e estou utilizando a trigger when-list-changed em um list item, até funciona, porem atualiza somente a primeira linha e as demais não, já tetei solucionar através de cursores mas sem sucesso, com next_item no fim do codigo ele passa para o proximo registro mas não atualiza.
alguém podria me auxiliar???
Valeu!!!
Atualizar campos após selecionar um List Item
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
posta o teu código como esta hoje, para ficar mais claro o que você esta fazendo e consequentemente mais facil para resolvermos seu problema
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Qui, 20 Ago 2009 3:24 pm
- Localização: São Paulo - SP
valeu pela força Sergio.
Segue o codigo.
[]´s
Segue o codigo.
begin
if :gev_item_proposta_fotografica.cod_prod_serv is not null then
for x in
(
select VAL_UNITARIO
from gev_cp_prod_srv_forma_pagto
where COD_PROD_SERV = :GEV_ITEM_PROPOSTA_FOTOGRAFICA.COD_PROD_SERV
and COD_FORMA_PAGAMENTO = :GEV_ITEM_PROPOSTA_FOTOGRAFICA.cod_forma_pagamento
and NUM_CONTRATO_PRINCIPAL = :GEV_PROPOSTA_FOTOGRAFICA.NUM_CONTRATO_PRINCIPAL
)
loop
:GEV_ITEM_PROPOSTA_FOTOGRAFICA.VAL_UNITARIO := x.VAL_UNITARIO;
end loop;
next_item;
end if;
end;
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Este seu forms é multirow?? No caso, é uma grade?
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
coloque o seguinte codigo dentro do seu loop
e retire o seu next_item
Deve funcionar, caso contrario poste o problema novamente
if :system.last_record = 'TRUE' then
exit;
end if;
next_record;
Deve funcionar, caso contrario poste o problema novamente
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Qui, 20 Ago 2009 3:24 pm
- Localização: São Paulo - SP
Sergio continua atualizando somente o primeiro registro.
begin
if :gev_item_proposta_fotografica.cod_prod_serv is not null then
for x in
(
select VAL_UNITARIO
from gev_cp_prod_srv_forma_pagto
where COD_PROD_SERV = :GEV_ITEM_PROPOSTA_FOTOGRAFICA.COD_PROD_SERV
and COD_FORMA_PAGAMENTO = :GEV_ITEM_PROPOSTA_FOTOGRAFICA.cod_forma_pagamento
and NUM_CONTRATO_PRINCIPAL = :GEV_PROPOSTA_FOTOGRAFICA.NUM_CONTRATO_PRINCIPAL
)
loop
:GEV_ITEM_PROPOSTA_FOTOGRAFICA.VAL_UNITARIO := x.VAL_UNITARIO;
if :system.last_record = 'TRUE' then
exit;
end if;
next_record;
end loop;
--next_item;
end if;
end;
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
então o teu for que esta restringindo apenas para a primeira linha.
faça um cursor com este select e abra-o detnro loop sem for nenhum.
faça um cursor com este select e abra-o detnro loop sem for nenhum.
loop
open c_cursor;
fetch c_cursor into r_record;
close c_cursor;
:GEV_ITEM_PROPOSTA_FOTOGRAFICA.VAL_UNITARIO :=r_record.VAL_UNITARIO;
if :system.last_record = 'TRUE' then
exit;
end if;
next_record;
end loop;
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
declare
cursor c_query is
select VAL_UNITARIO
from gev_cp_prod_srv_forma_pagto
where COD_PROD_SERV = :GEV_ITEM_PROPOSTA_FOTOGRAFICA.COD_PROD_SERV
and COD_FORMA_PAGAMENTO = :GEV_ITEM_PROPOSTA_FOTOGRAFICA.cod_forma_pagamento
and NUM_CONTRATO_PRINCIPAL = :GEV_PROPOSTA_FOTOGRAFICA.NUM_CONTRATO_PRINCIPAL
r_query c_query%rowtype;
begin
if :gev_item_proposta_fotografica.cod_prod_serv is not null then
loop
open c_query;
fetch c_query into r_query;
close c_quey;
:GEV_ITEM_PROPOSTA_FOTOGRAFICA.VAL_UNITARIO := r_query.VAL_UNITARIO;
if :system.last_record = 'TRUE' then
exit;
end if;
next_record;
end loop;
end if;
end;
-
- Rank: DBA Júnior
- Mensagens: 229
- Registrado em: Sex, 05 Set 2008 2:59 pm
- Localização: Igrejinha - RS
Correção:
DECLARE
CURSOR c_query IS
SELECT val_unitario
FROM gev_cp_prod_srv_forma_pagto
WHERE cod_prod_serv = :gev_item_proposta_fotografica.cod_prod_serv
AND cod_forma_pagamento = :gev_item_proposta_fotografica.cod_forma_pagamento
AND num_contrato_principal = :gev_proposta_fotografica.num_contrato_principal
r_query c_query%ROWTYPE;
BEGIN
--/
IF :gev_item_proposta_fotografica.cod_prod_serv IS NOT NULL
THEN
--/
OPEN c_query;
LOOP
FETCH c_query
INTO r_query;
--/
:gev_item_proposta_fotografica.val_unitario := r_query.val_unitario;
EXIT WHEN :SYSTEM.last_record = 'TRUE'; --/ Opção minha
next_record;
END LOOP;
CLOSE c_quey;
END IF;
END;
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Qui, 20 Ago 2009 3:24 pm
- Localização: São Paulo - SP
Caros obrigado pela colaboração, as informações foram muito uteis. Consegui resolver o problema com o seguinte código.
Obrigado a todos.
begin
for x in
( select distinct(pfp.cod_prod_serv) cod_prod_serv,
pfp.val_unitario
from gev_cp_prod_srv_forma_pagto pfp, gev_item_proposta_fotografica ipf
where pfp.COD_FORMA_PAGAMENTO = :gev_proposta_fotografica.cod_forma_pagamento
and pfp.NUM_CONTRATO_PRINCIPAL = :GEV_PROPOSTA_FOTOGRAFICA.NUM_CONTRATO_PRINCIPAL
)
loop
update gev_item_proposta_fotografica
set val_unitario = x.val_unitario
where num_proposta_fotografica = :GEV_PROPOSTA_FOTOGRAFICA.num_proposta_fotografica
and cod_prod_serv = x.cod_prod_serv;
end loop;
forms_ddl('commit');
go_block('gev_item_proposta_fotografica');
do_key('execute_query');
go_item('gev_item_proposta_fotografica.num_proposta_fotografica');
pu_mensagem('Parabéns !. Procedimento realizado com sucesso. Não se equeça de salvar a alteração efetuada!!!');
end;
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante