Eu tenho dois blocos em meu programa. Do segundo bloco, eu atualizo os dados no primeiro via código PL/SQL. Quando eu volto ao primeiro bloco, os dados ainda não estão atualizados. Existe alguma maneira de dar um refresh no form, ou refazer a consulta mas voltando direto ao código exibido anteriormente?? Usando apenas execute_query ele retorna todos os dados, exibindo o primeiro ítem da consulta e não o código anterior!
Tentei usar um enter_query seguido de execute_query, mas ele não executa nada até que o user entre com alguma consulta manualmente.
Tentei também armazenar o nº do registro do código atualizado e depois usar um go_record, mas ficou extremamente lento.
Existe alguma solução?
enter_query - execute_query
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você atualiza esse campo via UPDATE ?Quando eu volto ao primeiro bloco, os dados ainda não estão atualizados.
Se sim, você pode buscar o valor do campo que está no BANCO, usando GET_ITEM_PROPERTY('bloco.campo', DATABASE_VALUE);
No outro caso, (do execute_query), talvez você possa salvar o código da PK daquela linha e alterar a clausula WHERE pra buscar exatamente a linha que você quer... :-/
- Toad
- Rank: DBA Pleno
- Mensagens: 253
- Registrado em: Sex, 18 Nov 2005 2:14 pm
- Localização: Seattle, WA
- Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c
matheus.dev
twitter.com/developer__c
É mais ou menos isso. Eu insiro alguns registros em uma tabela.
O Bloco 1 exibe essas informações, mas como eu acabei de inserir, ele ainda não está mostrando.
São dados novos.
O Bloco 1 exibe essas informações, mas como eu acabei de inserir, ele ainda não está mostrando.
São dados novos.
- Toad
- Rank: DBA Pleno
- Mensagens: 253
- Registrado em: Sex, 18 Nov 2005 2:14 pm
- Localização: Seattle, WA
- Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c
matheus.dev
twitter.com/developer__c
O que eu fiz até agora foi:
E usando o loop:
Ele acha o número do registro, vai até o registro que eu quero e já retorna os dados atualizados, inclusive os que eu acabei de inserir, mas a tabela é enorme. Está demorando demaaais!
Lembrando que eu fiz isso porque uso o Forms 4.5
No Plus eu poderia fazer assim:
Mas... Alguém pode me ajudar!?
cursor cursor_atual is SELECT codigo FROM tbl_func order by codigo;
open cursor_atual;
fetch cursor_atual into matricula_registro;
cur_reg := 0;
loop
cur_reg := cur_reg + 1;
if (cursor_atual%notfound) or (matricula_registro = :bloco1.codigo) then
exit;
else
fetch cursor_atual into matricula_registro;
end if;
end loop;
close cursor_atual;
do_key('execute_query');
go_record(cur_reg);
Lembrando que eu fiz isso porque uso o Forms 4.5
No Plus eu poderia fazer assim:
SELECT registro into cur_reg FROM (SELECT codigo, ROWNUM registro FROM tbl_func) WHERE codigo = :bloco1.codigo;
Armazena a consulta em um array antes
- Toad
- Rank: DBA Pleno
- Mensagens: 253
- Registrado em: Sex, 18 Nov 2005 2:14 pm
- Localização: Seattle, WA
- Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c
matheus.dev
twitter.com/developer__c
Dr_Gori, mais uma vez você me ajudou!
Funcionou assim:
Obrigado mesmo!!
Abraços!
Funcionou assim:
DECLARE
def_where VARCHAR2(4000):= null;
BEGIN
def_where := 'bloco1.codigo = ' || to_char(codigo);
SET_BLOCK_PROPERTY('bloco1',DEFAULT_WHERE,def_where);
do_key('execute_query');
def_where := null;
SET_BLOCK_PROPERTY('bloco1',DEFAULT_WHERE,def_where);
Abraços!
-
- Rank: Programador Júnior
- Mensagens: 15
- Registrado em: Qui, 03 Mai 2007 5:35 pm
- Localização: São Paulo - SP
Boa tarde!
Estou com o mesmo problema, tentei utilizar o
mas na hora de compilar o trigger dá o seguinte erro: 'GET_ITEM_PROPERTY' is not a procedure or is undefined.
Por favor, saberia dizer o que acontece?
Obrigada!!
Att.,
Thatiane
Estou com o mesmo problema, tentei utilizar o
GET_ITEM_PROPERTY('bloco.campo', DATABASE_VALUE);
Por favor, saberia dizer o que acontece?
Obrigada!!
Att.,
Thatiane
-
- Rank: Programador Júnior
- Mensagens: 15
- Registrado em: Qui, 03 Mai 2007 5:35 pm
- Localização: São Paulo - SP
Sim, claro!!
Uso o forms 6i, e o código está no trigger WHEN-BUTTON-PRESSED do segundo bloco (tenho um primeiro, e o segundo, onde faço as alterações para que o primeiro seja atualizado).
------
Obrigada!
Uso o forms 6i, e o código está no trigger WHEN-BUTTON-PRESSED do segundo bloco (tenho um primeiro, e o segundo, onde faço as alterações para que o primeiro seja atualizado).
If :Transf_Valores.Cod_Cl_Dest Is Null Then
Fnd_Message.Set_String ('Informe o Centro de Custo - Destino!');
Fnd_Message.Error;
Raise Form_Trigger_Failure;
Else
If :Transf_Valores.Papel_Ac_Tr > :Papel_Ac_Ed Or
:Transf_Valores.Grafica_Ac_Tr > :Grafica_Ac_Ed Or
:Transf_Valores.Mobra_Ac_Tr > :Mobra_Ac_Ed Or
:Transf_Valores.Foto_Ac_Tr > :Foto_Ac_Ed Or
:Transf_Valores.Terc_Ac_Tr > :Terc_Ac_Ed Then
Fnd_Message.Set_String ('Não é possível transferir: Valor Informado maior que valor disponível.');
Fnd_Message.Error;
Raise Form_Trigger_Failure;
Else
:Papel_Ac_Ed := :Papel_Ac_Ed - :Transf_Valores.Papel_Ac_Tr;
:Grafica_Ac_Ed := :Grafica_Ac_Ed - :Transf_Valores.Grafica_Ac_Tr;
:Mobra_Ac_Ed := :Mobra_Ac_Ed - :Transf_Valores.Mobra_Ac_Tr;
:Foto_Ac_Ed := :Foto_Ac_Ed - :Transf_Valores.Foto_Ac_Tr;
:Terc_Ac_Ed := :Terc_Ac_Ed - :Transf_Valores.Terc_Ac_Tr;
Declare
v_destino Number := :TRANSF_VALORES.COD_CL_DEST;
v_cod_as Varchar2(1000) := :TRANSF_VALORES.COD_AS_DEST;
v_Papel_AC Number;
v_Graf_AC Number;
v_Mobra_Ac Number;
v_Foto_Ac Number;
v_Terc_Ac Number;
v_rowid Varchar2(2000);
Begin
Select Papel_AC
, Graf_AC
, Mobra_AC
, Foto_AC
, Terc_AC
, rowid
Into v_Papel_AC
, v_Graf_AC
, v_Mobra_Ac
, v_Foto_Ac
, v_Terc_Ac
, v_rowid
From Abrl_Custo_AC_V
Where Cod_Cl = v_destino
AND Cod_As = v_cod_as;
UPDATE ABRL_CUSTO_AC_V
SET PAPEL_AC = v_Papel_AC + :Transf_Valores.Papel_Ac_Tr
, GRAF_AC = v_Graf_AC + :Transf_Valores.Grafica_Ac_Tr
, MOBRA_AC = v_Mobra_Ac + :Transf_Valores.Mobra_Ac_Tr
, FOTO_AC = v_Foto_Ac + :Transf_Valores.Foto_Ac_Tr
, TERC_AC = v_Terc_Ac + :Transf_Valores.Terc_Ac_Tr
Where Rowid = v_rowid;
Commit;
GET_ITEM_PROPERTY (:ABRL_CUSTO_AC.Papel_Ac_Ed, DATABASE_VALUE);
Exception
When Others Then
v_Papel_AC := 0;
v_Graf_AC := 0;
v_Mobra_Ac := 0;
v_Foto_Ac := 0;
v_Terc_Ac := 0;
v_rowid := null;
End;
End If;
End If;
app_custom.close_window('TRANSF_VALORES');
------
Obrigada!
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Neste caso, o primeiro parâmetro do GET_ITEM_PROPERTY teria que ser uma string no formato bloco.campo (sem o ":").GET_ITEM_PROPERTY (:ABRL_CUSTO_AC.Papel_Ac_Ed, DATABASE_VALUE);
Outra coisa é que GET_ITEM_PROPERTY é uma função, então é necessário atribuir o valor de retorno a uma variável / item / etc, como:
declare
v_database varchar2(255);
begin
v_Database := GET_ITEM_PROPERTY ('ABRL_CUSTO_AC.Papel_Ac_Ed', DATABASE_VALUE);
end;
-
- Rank: Programador Júnior
- Mensagens: 15
- Registrado em: Qui, 03 Mai 2007 5:35 pm
- Localização: São Paulo - SP
Bom dia!
Ok, alterei e códig, agora o retorno da função é carregada numa variável, mas não consegui fazer o que realmente quero: Quando sai do 2º bloco, e voltei para 1º, os dados estavam da mesma forma... Tive que realizar a consulta novamente, para que os dados fossem atualizados...
Depois de chamar a função, como devo "acionar" o conteudo dessa variável?
Obrigada!
Ok, alterei e códig, agora o retorno da função é carregada numa variável, mas não consegui fazer o que realmente quero: Quando sai do 2º bloco, e voltei para 1º, os dados estavam da mesma forma... Tive que realizar a consulta novamente, para que os dados fossem atualizados...
Depois de chamar a função, como devo "acionar" o conteudo dessa variável?
Obrigada!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 9 visitantes