Ajuda como montar uma trigger para auto_incremento

Delphi

30/07/2004

Caros amigos estou migrando do Paradox para o Firebird.

Comecei a criar as minhas tabelas e preciso criar campos auto_incrementos.

Vocês poderiam comentar este código que peguei na net. Está tudo ok? Posso utilizá-lo nas minhas tabelas?

Generator
CREATE GENERATOR GEN_CLIENTE_ID;
SET GENERATOR GEN_CLIENTE_ID TO 0;


TRIGGER
AS
DECLARE VARIABLE AUX_ID INTEGER;
begin
if (new.id = 0) then
begin
select max(cliente.id) from cliente into :aux_id;
if (:aux_id is null) then
aux_id = 0;
aux_id = aux_id+1;
new.id = :aux_id;
end
end

Será de grande ajuda

No Aguardo
Raphael


Rbfonseca

Rbfonseca

Curtidas 0

Respostas

Inutaishou

Inutaishou

30/07/2004

Amigo, o Generator armazena o código atual do último registro da tabela... Só pra isso ele serve...

Já o Trigger, é o que faz todo o trabalho de inserção do código autoinc...

Crie o Trigger da seguinte forma:
CREATE TRIGGER CLIENTE_BI FOR CLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    NEW.ID = GEN_ID(GEN_CLIENTE_ID,1);
END
^


Ele já estará fazendo o autoincremento do seu campo...

Porém, dessa forma, qualquer auteração que você fizer no campo de código em uma inserção será descartada! Cuidado quanto a isso... Para evitar que as alterações feitas por você manualmente sejam descartadas, coloque a seguinte linha logo após o Begin:
  IF (NEW.ID IS NULL) THEN


PS: Se você usar o IBExpert, fica mais fácil para criar seus triggers...

[]´s,


GOSTEI 0
Eniorm

Eniorm

30/07/2004

Eu uso assim:

CREATE GENERATOR nome_do_gerador;
COMMIT;
SET TERM !! ;
CREATE TRIGGER nome_da_trigger FOR tabela
   BEFORE INSERT POSITION 0
   AS BEGIN
   NEW.codigo_da_tabela = GEN_ID(nome_do_gerador, 1);
END;!!
SET TERM ; !!


Quando for ´zerar´ toda a tabela pelo comando delete from nomedatabela
para voltar a autonumeração para o início, ou seja, voltar para o 0, use o comando:

set generator nomedogenerator to 0;
commit;



GOSTEI 0
Sandra

Sandra

30/07/2004

Peço desculpas a quem respondeu este tópico. Porém, se encontra em duplicidade!
http://delphiforum.icft.com.br/forum/viewtopic.php?t=49393


rbfonseca,

Por favor, escolha o fórum adequado de acordo com a sua dúvida e não duplique mensagens.
Releia as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.


GOSTEI 0
POSTAR