Senhores bom dia,
Estou com a seguinte dúvida, preciso fazer a verificação de duplicidade de um item, mas não encontrei nada parecido com o meu caso aqui no forum.
Quando eu gravo o primeiro item, ele não é gravado fisicamente na tabela, então não dá para eu fazer um select na base.
Teria alguma maneira de fazer isso direto no bloco ?
Grato
Att.
Tiago Pimenta
Verificar item duplicado
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 213
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Existe o comando POST, que envia tudo pra banco, mas sem fazer commit. Só faz os updates, inserts, etc. Ou seja, se você fizer um POST, você pode fazer SELECT na base tranquilamente.
(no Forms, quando você dá o comando COMMIT ou COMMIT_FORM, ele primeiro dá um POST enviando tudo pro banco). Só depois ele faz um STANDARD.COMMIT, que é o COMMIT do banco.
(no Forms, quando você dá o comando COMMIT ou COMMIT_FORM, ele primeiro dá um POST enviando tudo pro banco). Só depois ele faz um STANDARD.COMMIT, que é o COMMIT do banco.
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 213
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
dr_gori, primeiro obrigado por responder tão rápido, mas o meu caso eu precisava de fazer a validação no when-validade-item do código do item.
Ai que o bixo pega, pois como o item ainda não foi fisicamente para a tabela, está só na memória.
Abraços.
Ai que o bixo pega, pois como o item ainda não foi fisicamente para a tabela, está só na memória.
Abraços.
-
- Rank: Programador Sênior
- Mensagens: 52
- Registrado em: Qua, 15 Out 2008 4:05 pm
- Localização: taquara-RS
pois é, é isso que o dr_gori quis dizer, ao invés de validar no when-validate validaria no post,
mas qual é sua realidade? você tem um bloco multi record e quer validar se já existe dentro do próprio bloco? se for isso. você terá que varrer o bloco e ver se tem registros duplicados,
manda mais detalhes,
vlw!
mas qual é sua realidade? você tem um bloco multi record e quer validar se já existe dentro do próprio bloco? se for isso. você terá que varrer o bloco e ver se tem registros duplicados,
manda mais detalhes,
vlw!
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 213
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
Foi isso que eu quis dizer Eder, tenho um bloco multi record no qual eu preciso varre-lo no when-validate-item se já existe aquele item ou não.
Não posso fazer com select no banco, pois esses dados ainda não estão fisicamente gravados, estão alocados na memória ( Essa parte não sei como o forms armazena ), pois estão no bloco mas não vão para a tabela até eu dar commit.
[ ]s
Não posso fazer com select no banco, pois esses dados ainda não estão fisicamente gravados, estão alocados na memória ( Essa parte não sei como o forms armazena ), pois estão no bloco mas não vão para a tabela até eu dar commit.
[ ]s
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Veja se você não consegue fazer POST em cada linha.
Como eu disse, quando você faz POST, os dados vão do bloco até o banco! Dai você pode fazer validações usando select sim.
(tem algumas triggers que são restritas e não suportam alguns comandos. Teria que ver se esse é um caso).
Leia sobre esse comando POST pra entender bem o que ele faz!
Como eu disse, quando você faz POST, os dados vão do bloco até o banco! Dai você pode fazer validações usando select sim.
(tem algumas triggers que são restritas e não suportam alguns comandos. Teria que ver se esse é um caso).
Leia sobre esse comando POST pra entender bem o que ele faz!
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 213
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
No meu caso não é indicado pelo seguinte:
1# Ele não grava na tabela se eu não salvar o registro, ou seja, posso ir no bloco filho e preencher 10 registros que ele fica alocado na memória.
2# No when-validade-item tem alguns processos que são realizados, então se eu já fizer essa verificação do item duplicado, eu não preciso rodar esses processos. Fora que também é melhor para o usuário, imagina ele digitar 20 campos e só depois eu falar para ele que já tem aquele item ?
[ ]s
1# Ele não grava na tabela se eu não salvar o registro, ou seja, posso ir no bloco filho e preencher 10 registros que ele fica alocado na memória.
2# No when-validade-item tem alguns processos que são realizados, então se eu já fizer essa verificação do item duplicado, eu não preciso rodar esses processos. Fora que também é melhor para o usuário, imagina ele digitar 20 campos e só depois eu falar para ele que já tem aquele item ?
[ ]s
-
- Rank: Programador Sênior
- Mensagens: 52
- Registrado em: Qua, 15 Out 2008 4:05 pm
- Localização: taquara-RS
ok,
você vai ter que varrer o bloco, algo do tipo >>
qualquer coisa posta ai!
vlw!
você vai ter que varrer o bloco, algo do tipo >>
DECLARE
vCampo VARCHAR2(30) := :BLOCK.TEXT_ITEM;
vDuplicados NUMBER := 0;
BEGIN
FIRST_RECORD;
LOOP
IF :BLOCK.TEXT_ITEM = vCampo THEN
vDuplicados := vDuplicados + 1;
END IF;
IF :SYSTEM.last_record = 'TRUE' THEN
EXIT;
ELSE
NEXT_RECORD;
END IF;
IF vDuplicados > 1 THEN
MESSAGE('Registro duplicados');
MESSAGE('Registro duplicados');
END IF;
END LOOP;
END;
qualquer coisa posta ai!
vlw!
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 213
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
Valeu Eder, acho que era isso mesmo que eu procurava
[ ]s
[ ]s
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Acho que até agora você não entendeu o que faz o comando POST.1# Ele não grava na tabela se eu não salvar o registro, ou seja, posso ir no bloco filho e preencher 10 registros que ele fica alocado na memória.
POST é um comando do forms. Este comando justamente pega todos as linhas do seu BLOCO (que estão na memória) e envia pro banco, mas SEM COMITAR... Só faz os INSERTS e UPDATES, mas não faz COMMIT.
Com isso é possível fazer SELECT, pois seus dados passaram do FORMS pro banco. O post "transforma" tudo que você alterou/criou em comandos SQL e aplica no banco sem comitar.
Editado pela última vez por dr_gori em Qua, 29 Jun 2011 3:05 pm, em um total de 1 vez.
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 213
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
dr_gori, agora que eu entendi, me desculpe.
[ ]s
[ ]s
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 23 visitantes