Contador

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
tostesr1
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qua, 01 Jun 2005 12:30 am
Localização: RJ

Olá Pessoal,

Quando fazemos uma consulta no formulario onde são retornados todos os registros, Abaixo (rodapé) no Forms Runtime é apresentado um contador,no qual a cada mundança de linha(next_record) e acrescido um número.

Ex.: Registros: 1/?, 2/?, 3/?, 4/? etc...

Estou querendo fazer o mesmo, só que dentro do meu Canvas.

Criei 2 campos e 1 Botão:

O 1° Campo vai receber o contador.

O 2° Campo vai receber o total das linhas recuperadas no BD.

E o Botão vai ser responsável pela troca de linhas, ao mesmo tempo em
que conta + 1 no campo1.

Abaixo segue o código do botão (trigger When-Button-Pressed):

Selecionar tudo

IF :SYSTEM.LAST_RECORD <> 'TRUE' THEN
	NEXT_RECORD;
        :TABELA.CAMPO1 := :TABELA.CAMPO1 + 1;
END IF;
Nesta rotina o contador é executado apenas uma vez, a partir daí apenas
a procedure NEXT_RECORD funciona.

Se alguém puder me dar uma solução para este problema, ou melhor, tiver uma outra solução...

Desde já, Agradeço!

Obs.: Criei um Trigger(Post-Query) a nível de bloco para preencher o Campo2:

Selecionar tudo

BEGIN
   SELECT COUNT(*) INTO CAMPO2
      FROM TABELA;
      :TABELA.CAMPO1 := 1;
END;
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

tostesr1 escreveu:Obs.: Criei um Trigger(Post-Query) a nível de bloco para preencher o Campo2:

BEGIN
SELECT COUNT(*) INTO CAMPO2
FROM TABELA;
:TABELA.CAMPO1 := 1;
END;
Abra o olho! :-)
A trigger POST-QUERY é executada pra cada linha que é retornada! Se você está colocando esse COUNT na POST-QUERY, está executando a mesma coisa centenas de vezes! :shock:

Eu acho que o jeito mais fácil de você fazer isso é criar um campo não BASE TABLE, e justamente, na POST-QUERY você colocar 1, 2, 3, etc nele...
Depois, muda a propriedade Number of Items Displayed para 1. Assim, vai aparecer sempre o registro "corrente".
Avatar do usuário
anderson
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 06 Jun 2005 1:08 pm
Localização: Toledo - PR
Contato:
Anderson Nuernberg
---

opa, ai vai umas dicas...

primeiro... coloque um valor default para o campo... Zero, e certifique-se que ele seja number...

segundo... inverta os comandos...

Selecionar tudo

IF :SYSTEM.LAST_RECORD <> 'TRUE' THEN 
  :TABELA.CAMPO1 := :TABELA.CAMPO1 + 1; 
  NEXT_RECORD; 
END IF; 
e veja o que acontece...

ou então tente o seguinte... declare uma variável number e use ela para incrementar o valor... em algumas ocasiões dessa maneira que você fez pode ocorre erros...

Selecionar tudo

DECLARE
  contador NUMBER := 0;
BEGIN
  IF :system.last_record <> 'TRUE' THEN 
    contador := :tabela.campo1;
    contador := contador + 1;
    :tabela.campo1 := contador;
    next_record; 
  END IF; 
END;
tente algumas dessas alternativas e poste se alguma funfou...

[]´s
Responder
  • Informação
  • Quem está online

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