Registro alterado por outro Usuario!

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
bertosro
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 18 Ago 2006 11:13 am
Localização: São Paulo - SP
Bertosro
MSN / TALK - roberto.fernandes@gmail.com

Olá Pessoal Boa TARDE A Todos.
È o Seguinte estou com a seguinte duvida.
Tenho um forms BASE TABLE baseado na tabela "pln_proj_autores".
Na Tabela "pln_proj_autores" tenho uma trigger que atualiza os dados de inclusão e atualização.

Selecionar tudo

CREATE OR REPLACE TRIGGER trg_log_proj_autores
 BEFORE
  INSERT OR UPDATE
 ON pln_proj_autores
REFERENCING NEW AS NEW OLD AS OLD
 FOR EACH ROW
BEGIN
  IF  INSERTING THEN
     :new.PPAU_USER_INCL := NVL(UPPER(SYS_CONTEXT('USERENV','OS_USER')),'JOB');
     :new.PPAU_DT_INCL   := SYSDATE;
  ELSE
     :new.PPAU_USER_ATLZ := UPPER(SYS_CONTEXT('USERENV','OS_USER'));
     :new.PPAU_DT_ATLZ   := SYSDATE;
  END IF;
END;
/
O que ocorre e quando realizo a inclusão ou alteração de um registro e que o campk do forms não reflete o que a trigger atualizou e ao tentar manipular o mesmo registro novamente ocorre o erro que foi alterado por outro usuário.
Segue imagens.

Imagem

Imagem
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

Isso aconteceu porque o registro muda após o forms enviar o comando pro banco.

Acho que você podia fazer algo assim pra fugir desse problema:
* Coloque a atualização dessas informações no forms. (pre-insert, pre-update)
* Na trigger, teste se os campos dali já estão atualizados. (tipo, testa quem está mudando a linha e a hora). Caso já esteja certinho, não faz nada! Significa que o forms mesmo fez a alteração.
* Se está diferente, atualiza na trigger.

Dessa forma a trigger vai continuar funcionando pra alguma outra alteração (manual, por exemplo, ou de alguma procedure de banco). E vai ser ignorada caso a informação já esteja correta (vinda do forms)

Deve ter uma forma melhor de resolver isso, mas como eu to sem o forms e TEMPO pra fazer o teste, daí não consegui pensar em nada melhor por agora :-(
mprocha
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Sex, 11 Jul 2008 11:14 am
Localização: Campinas - SP
Marcos Pinheiro da Rocha
Desenvolvedor Java/Forms/PL-SQL

Deixa eu ver se entendi:
- você alterou ou Inseriu um registro
- Clicou em salvar ou deu F10 (commit)
- a trigger atualizou os campos tambem
- depois você tentou alterar o mesmo registro
- e deu o erro

Vou te dar uma sujestão sem conhecer seu aplicativo, olha porque você não efetua um <Reflesh> na forms após salvar, para manter no buffer os mesmos dados que estão no banco !
Faça assim: Após salvar (commitar) execute um EXECUTE_QUERY novamente, e depois tente alterar de novo !
Essa é a ideia que me ocorreu nesse momento.
Boa sorte
Responder
  • Informação
  • Quem está online

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