Tratamendo de Duplicidade em Bloco Multi Record

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Maverick
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qua, 22 Fev 2006 3:17 pm
Localização: RJ
Espero que ajude

Abraços,

Maverick

Galera, boa tarde...

helpem-me.

Tenho um bloco multi-record de chave composta por dois campos.

Preciso exibir um alert informando o erro se no momento em que eu clicar no botão, existir duplicidade entre as chaves do bloco...

A pk da tabela já cuida disso, porém, meu chefe quer alertazinho...

Ao que tudo indica, precisarei varrer o bloco e comparar todos os registros...

Alguém pode me dar uma idéia.....
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

beleza maverick

você precisa dessa validacao no momento em que você estiver salvando num bloco base table??
Maverick
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qua, 22 Fev 2006 3:17 pm
Localização: RJ
Espero que ajude

Abraços,

Maverick

Exatamente,

Tenho um par

'RJ' 1
'SP' 1
'SP' 2
'RO' 1
'RR' 1
'RJ' 1

São minhas chaves...
quando eu salvar tenho que exibir um alert de erro quando ele encontrar o segundo 'RJ' 1
.
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

ok..

eu utilizo no pre-insert fazendo um select na propria tabela dando um count com os campos da chave se retornar 1 é porque ele já existe disparendo assim a mensagem


para update caso possa existir no seu caso eu utilizo a seguinte forma eu armazeno os valor da chave primaria em itens ocultos no mesmo bloco( alimento eles no post-query com o valor original)

exemplo
:estado.sg_estado_original (não base table) := :estado.sg_estado (base table)

dai na trigger pre-update eu verifico se os dois itens estao com o mesm valor

caso não estejam eu dou um select no banco da mesma forma do criado no pre-insert

demorei pra entender esse processo, se você tiver alguma duvida estamos ai...

vlw
Avatar do usuário
TBou
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 136
Registrado em: Qui, 05 Ago 2004 9:33 am
Localização: Campo Grande - MS
Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

eu costumo alimentar um vetor com a chave primaria desta tabela aiw no when-validate item dos itens da chave eu verifico se já existe esta chave no vetor...
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

opa thiago... beleza?

mais e se caso a pessoa sem querer digita algo no seu item chave e volta o valor anterior, ao validar ele da essa mensagem??
Avatar do usuário
TBou
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 136
Registrado em: Qui, 05 Ago 2004 9:33 am
Localização: Campo Grande - MS
Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

OPas...detalhe no caso você quarda o record que esta gravado aqueos dados tambem no vetor ai na validação você verifica se o record for o mesmo quer dizer que não esta duplicado e sim apenas validando o item novamente.

da certinho só precisa fazer umas tratativas como apagar do vertor no key-delrec e estas coisas pois se apagar o registro e escrever ele denovo não deve ploquear...
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

hum... tendi...

legal thiagao... boa troca de esperiencias...


abrçs
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

Assim, com já tem a PK, se eu não me engano, quando você vai inserir um campo que já tem na tabela, ele retorna um erro ORA falando que a constraint foi violada.... ai você pode tratar no ON-ERROR também...

obs.: só não falo o erro qui é porque o banco aqui caiu =D
Avatar do usuário
TBou
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 136
Registrado em: Qui, 05 Ago 2004 9:33 am
Localização: Campo Grande - MS
Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

é como nosso colega disse,
o banco já bloqueia retornando um erro ORA, mas neste caso da erro apenas quando você da o F10 (salva) e tambem não diz em qual linha esta a duplicação, ou seja se eu ter uma tabela com 50 registros vai dar um pouco de trabalho achar qual codigo digitei duplicado (nem vamos entrar em detalhes se ter 500 registros então né).

a fazendo este tratamento via vetor (aparentemente arcaico) logo que vamos sair do registro duplicado o sistema já vai bloquear o registro.
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

então, aqui onde eu trabalho, todos os forms são feitos em um padrão né....

ai quando acontece um erro de violação de UK, ele mostra o erro de informações incorretas, e pula direto para o campo que está violando a UK, não sei se é o padrão que faz isso, mais creio que isso é um processo automático do forms mesmo...

=D
Responder
  • Informação
  • Quem está online

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