Como fazer número sequencial do Interbase

Firebird

13/10/2004

Galera, gostaria de saber como posso criar via programação delphi ou diretamento no firebird um sequencial de código de acordo com o usuário irá realizando o cadastro.
Seria algo parecido como o do Access (Autonumeração), no oracle usamos o NEXTVALL nas Stored Procedure e no firebird não sei como fazer.
Se alguém puder me ajudar........ : :o


Tony_gomes

Tony_gomes

Curtidas 0

Respostas

Guibas

Guibas

13/10/2004

você pode usar trigger com generetor ou stored proc com generetor ou ainda se utilizar de uma tebela pra guardar o valor atual...

faça uma pesquisa no fórum que tem muitos artigos a esse respeito.


GOSTEI 0
Tony_gomes

Tony_gomes

13/10/2004

Meu amigo,

É a 1º vez que mexo com o Firebird, estou dando manutenção em sistema cuja a proc abaixo eu mesmo que criei de acordo com as que já estavam no banco, notei que no firebird, quando seleciono algum generator noto que há um ´dependencie´ do generator com a proc.
Quando visualizo o fonte da proc, não vejo nada dizendo que esta proc está relacionada com este generator, mas quando seleciono ´ Show Depend On Object da proc , vejo que a porcaria da proc está relacionada com o generator.

Agora vai a duvida, dentro desta proc eu devo colocar o código assim:
CREATE GENERATO NOME_DO_GENERATOR ??

CREATE PROCEDURE ´INSERECODTICKET´
RETURNS
(
´ATUAL´ INTEGER
)
AS
BEGIN EXIT; END ^



GOSTEI 0
Gandalf.nho

Gandalf.nho

13/10/2004

O mais comum (e automático) é usar uma trigger que dispara sem a intervenção do usuário. Crie uma trigger BEFORE INSERT para a tabela desejada e coloque o seguinte código:

IF NEW.NOME_CAMPO IS NULL THEN
NEW.NOME_CAMPO = GEN_ID(NOME_GENERATOR, 1);


GOSTEI 0
Tony_gomes

Tony_gomes

13/10/2004

Colega,
Como disse acima, não estou familiarizado com o Interbase, fiz que vc escrveu porém não rolou, esta é minha trigger, porém o Firebird reclama dizendo q está errada.


CREATE TRIGGER ´INSERE_CD_TICKET´ FOR ´TICKET´
BEFORE INSERT POSITION 0 AS
BEGIN

IF NEW.TICKET_CD_CODIGO IS NULL THEN
NEW.TICKET_CD_CODIGO = GEN_ID(´TICKET_CD_CODIGO´,1);

END


onde: TICKET é o nome da minha tabela e TICKET_CD_CODIGO é o generator que acabei de criar.


GOSTEI 0
Gandalf.nho

Gandalf.nho

13/10/2004

O nome do generator na função GEN_ID não deve ficar entre aspas.

CREATE TRIGGER ´INSERE_CD_TICKET´ FOR ´TICKET´
BEFORE INSERT POSITION 0 AS
BEGIN

IF NEW.TICKET_CD_CODIGO IS NULL THEN
NEW.TICKET_CD_CODIGO = GEN_ID(TICKET_CD_CODIGO,1);

END


GOSTEI 0
Tony_gomes

Tony_gomes

13/10/2004

Obrigado mesmo pela ajuda!!!
Foi de muita ajuda.....estas dicas....pra quem nunca tinha feito um select no Interbase me sai bem..........
Valeu mesmo;;;;;;;;;; :D

Vc´s estão de parabéns.


GOSTEI 0
POSTAR