Pesquisar registro existente

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

Amigos,
como faço para que quando preencher o primeiro campo em um form (que um primary key), preencha automaticamente os outros campos se o registro já existir na base ?
obrigado,
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

Você esta efetuando uma consulta?
Se sim, utilize o POST-QUERY.

Caso seja um cadastro, utilize a when-validate-item (trigger nesse campo que você esta preenchendo).

Monte um bloco pl/sql e faça as consultas que vão preencher os outros campos.
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

ok funciona para when-validate-item .
Mas no caso eu tenho uma Master/Detail. O procedimento é o mesmo para preencher o Detail também? Devo colocar when-validate-item para i Detail também ?

obrigado,
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

se você fizer um relation, o detail não é exibido não?
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

Sim, é exibido todos os campos do Master e do Detail se eu pressionar a tecla F8.
Mas oque eu gostaria de fazer é que quando digitado algum valor no primeiro campo, pesquisa, e se o registro já existir na base, que preencha todos os campos do mesmo modo que faz o F8.
Tem como ?
pablo.jose
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Ter, 30 Jun 2009 4:54 pm
Localização: Brusque - SC

Bom dia.
Eu sugiro em você criar uma package na base...a package(ou procedure) faz a pesquisa no banco retornando os valores q você quer...
sugiro o seguinte comando:

function get_cliente ( vcod_cliente in cliente.cod_cliente % type ) return cliente % rowtype is

aux cliente % rowtype;

begin

select * into aux from cliente where cod_cliente = vcod_cliente;

return aux;

exception

when no_data_found then

raise_application_error( -20002 , 'Cliente não cadastrado: ' || nvl( to_char( vcod_cliente ) , 'NULL' ) || '.' );

end;

--===================================================================================================================

--Função: retorna demais campos

procedure get_valores_cliente( vcod_cliente in number ,
vdes_cliente out varchar2,
vdes_endereco out varchar2) is

aux cliente % rowtype := get_cliente( vcod_cliente => vcod_cliente );

begin

vdes_cliente := aux.des_cliente;
vdes_endereco := aux.des_endereco;

end ;

espero ter ajudado.

Abraços
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

Bom, você tem duas opções...

1. No when-validate-item você fazer um cursor com join entre todas as tabelas que deseja popular e então ir preenchendo tudo.

2.Por um campo onde você digita o valor e um botão que você precisa clicar, no when-button-press você coloca um set_block_property default_where passando esse campo que você preencheu como default_where, fazendo o go_block / go_item e em seguida o execute query.

ex:

Selecionar tudo

declare
  vsql varchar2(100);
begin
  vsql := 'codigo = '||:bloco.codigo;
  set_block_property (bloco, default_where, vsql);
  go_block('bloco');
  go_item('bloco.codigo');
  execute_query;
end;
Dessa forma, todos os details serão preenchidos, pois, você esta efetuando uma consulta, porém, terá que apertar o botão pra coisa rodar... no when-validate-item não funciona dessa forma pois você esta inserindo valores e na when-validate não da para usar go_block nem go_item e acredito que também não da para usar execute_query...

espero ter ajudado.
Responder
  • Informação
  • Quem está online

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