Valeu Rafael,

Eu estou utilizando banco ORACLE.

Grato,


----- Original Message ----- 
From: "Rafael Amantéa Mogone" <[EMAIL PROTECTED]>
To: <delphi-br@yahoogrupos.com.br>
Sent: Monday, March 20, 2006 10:11 AM
Subject: RES: [delphi-br] PL/SQL Triggers


Bom dia!



Guilherme, acredito que isto seja viável sim ...

Você pode criar uma trigger no before insert da tabela que verifica se o
sequence é mesmo o proximo numero com condição para que, se o valor do
sequence não for o próximo numero a ser incluso, você o atualiza e faz a
inclusão ...

Você não especificou qual BD vc usa, porém aqui vai um exemplo de trigger
before insert que faz esta verificação:



CREATE TRIGGER TG_Cliente_Codigo FOR Cliente

ACTIVE BEFORE INSERT POSITION 0

AS

DECLARE VARIABLE NCodigo INTEGER;

DECLARE VARIABLE RESULTS INTEGER;

DECLARE VARIABLE LOOPING CHAR(1);

BEGIN

  IF ((NEW.Codigo IS NULL) OR (NEW.Codigo = 0)) THEN BEGIN

     LOOPING = 'S';

     RESULTS = 0;

     WHILE (LOOPING = 'S') DO BEGIN

        NCodigo = GEN_ID(GEN_Cliente_Codigo,1);

        SELECT COUNT(Codigo) FROM CLIENTE WHERE Codigo = :NCodigo INTO
RESULTS;

        IF (RESULTS = 0) THEN

           LOOPING = 'N';

     END

     NEW.Codigo = :NCodigo;

  END

END



O que faz esta trigger?

Testa se você enviou o código nulo ou 0.

Se enviou, ele pega o valor do sequence (GEN_Cliente_Codigo - é um
generator, utilizado em firebird), e vai aumentando e testando até achar um
valor que não esteja cadastrado na tabela.

Conforme seu banco de dados, você deve alterar.

Este exemplo é mais para mostrar que isso é possível, viável e muito útil
para evitar o key violation ehehehehe



Espero que ajude,



Rafael Amantéa Mogone

Programador Delphi + Firebird

Bauru / SP





  _____

De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Guilherme Silva
Enviada em: segunda-feira, 20 de março de 2006 09:21
Para: delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] PL/SQL Triggers



Olá a todos,


Tenho uma aplicação que inclui dados em uma tabela e esta possui vários
outros mecanismos externos de importação. A tabela possui uma sequence.
Quando eu incluo através do software a sequence é executada, caso seja por
meios externos essa sequence não está sendo executada.

Tería alguma forma de eu craiar uma TRIGGER que analisaria os dados que
estarão sendo gravados e caso estejam com numeros superiores à da sequence
eu faria um UPDATE para o valor da sequence ?

alguém poderia me dizer se isso é viável ?

Grato,

Guilherme





[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>



Links do Yahoo! Grupos










-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a