Form em modo de consulta

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
davidcastilholi
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 47
Registrado em: Qui, 07 Abr 2011 3:54 pm
Localização: Jussara PR
David

Boa tarde pessoal, estou retomando minhas atividades em forms e estou com a seguinte dúvida:

Criei uma tela de cadastro de feriados, e nessa tela criei um botão de consulta chamando uma LOV e carregando os campos na tela de cadastro mesmo, mas quando carrego os campos e tento fazer a alteração o form tenta criar outro registro.

Como faço para deixar o form em modo de consulta para quando a lov carregar os campos na tela de cadastro, e com isso eu fazer a alteração do registro.

Muito obrigado.
Avatar do usuário
dr_gori
Moderador
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

Não entendi muito bem o fluxo.
Parece que o form já está entrando em modo de consulta.

O botão de consulta que você criou tem apenas um SHOW_LOV ?
Coloca mais informações pra gente entender melhor o que está acontecendo.
davidcastilholi
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 47
Registrado em: Qui, 07 Abr 2011 3:54 pm
Localização: Jussara PR
David

O forms não esta em modo de consulta, preciso fazer isso.

Sim no botão que chama a LOV so tem o SHOW_LOV

Preciso que quando fosse clicado no botão que chama a LOV, o forms carregar as informações para edição.
Avatar do usuário
dr_gori
Moderador
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

Bom, quando o forms está em QUERY_MODE, o usuário deve digitar informações nos campos que serão os filtros pra consulta.
Aí ele clica no EXECUTE_QUERY e pronto.

A partir daí, ele está em modo de edição das linhas retornadas.
davidcastilholi
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 47
Registrado em: Qui, 07 Abr 2011 3:54 pm
Localização: Jussara PR
David

Fiz da forma como disse e deu certo, segue abaixo como ficou o código.

Selecionar tudo

EXECUTE_QUERY;

DECLARE
	VA_SHOW_LOV BOOLEAN;
BEGIN
VA_SHOW_LOV := SHOW_LOV('LOV_FERIADO',320,100);
davidcastilholi
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 47
Registrado em: Qui, 07 Abr 2011 3:54 pm
Localização: Jussara PR
David

Faltou uma parte do código:

Selecionar tudo

EXECUTE_QUERY;

DECLARE
	VA_SHOW_LOV BOOLEAN;
BEGIN
	VA_SHOW_LOV := SHOW_LOV('LOV_FERIADO',320,100);
END;
davidcastilholi
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 47
Registrado em: Qui, 07 Abr 2011 3:54 pm
Localização: Jussara PR
David

Bom dia, fiz um documento exemplificando o que eu preciso.

segue em anexo.
Anexos
FORM.pdf
Exemplo
(690.04 KiB) Baixado 527 vezes
davidcastilholi
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 47
Registrado em: Qui, 07 Abr 2011 3:54 pm
Localização: Jussara PR
David

alguém pode me ajudar...
Avatar do usuário
dr_gori
Moderador
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

Então:

Como funciona um bloco:
O bloco possui todas características pra se editar, consultar, incluir linhas em uma tabela. (normalmente, existe uma tecla que faz isso.)
Quando você roda o EXECUTE_QUERY, ele busca linhas da tabela, e traz pro bloco.
Se você alterar essas linhas, e der um COMMIT, ele salva na tabela.
Não importa quantas linhas você alterou. Ele é esperto o suficiente pra alterar todas linhas mexidas.

Se você incluir uma nova linha nesse bloco, ele é esperto o suficiente pra incluir ela. O mesmo se você excluir uma linha. Pode excluir várias e depois salvar.

Então esse tipo de programação com um botão "confirma", "Inclui", "Exclui", etc.
Isso a gente se vê mais em telas WEB HTML, onde cada ação é individual. (e cada ação dispara um programa diferente).

Um bloco é muito melhor que isso.
Você não precisa ter NENHUM código pra ter todas operações Create, Update, Delete.
A única programação aí seria o botão da LOV, com um SHOW_LOV e mais nada.

Se for necessário MESMO ter esse tipo de botão, tudo bem. Mas a única coisa dentro dele vai ser o comando COMMIT, um outro pra apagar a linha, etc.

Tudo esse código que você postou que está no botão CONFIRMAR, o ideal é que ele esteja na PRE_INSERT.
Daí ele vai o DT_CADASTRO := SYSDATE pra cada linha, e não apenas pra essa.

Essa trigger vai ser disparada automaticamente quando você der o COMMIT.
Em resumo, não precisa nada disso.

A validação de IF MARCA IS NULL, pode ficar na trigger WHEN-VALIDATE-RECORD.
Dessa forma, você não vai conseguir sair da linha sem ter validado isso.

O QUE EU FARIA:
Eu tiraria todos esses botões da tela e colocaria um bloco MULTI-RECORD, que é bem mais fácil de entender.
Depois, eu ia criar uma trigger WHEN-Validate-Record com as devidas consistências.
E uma trigger PRE-INSERT com os campos que devem ser populados automaticamente.

Só!
Avatar do usuário
dr_gori
Moderador
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

Aqui eu fiz um form bem simples, que faz o seguinte:
* Permite consultar, incluir e alterar em um bloco multi-record.
* Busca a descrição do departamento na LOV.

Não foi utilizado ***nenhuma*** programação. A única linha de código é um SHOW_LOV que está na trigger de BUTTON_PRESSED do botão da LOV. (este botão é opcional, visto que é possível chamar a LOV com a tecla F9).

Para criar a tabela emp e dept, utilizei este script:
https://apexplained.wordpress.com/2013/ ... in-oracle/

Algumas considerações:
* A origem do bloco é uma query! Ela busca a descrição do campo DNAME.
exemplo_lov.zip
(11.9 KiB) Baixado 470 vezes
Responder
  • Informação
  • Quem está online

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