Buscar

Pegar o valor do generator atravéz de uma stored procedure

Código

No Interbase não há campos de autonumeração. Ao invés disso há os Generators, que atendem a necessidade de obter números seqüenciais não repetidos para serem usados no banco de dados em campos tipo: número da nota fiscal, chaves primárias, entre outros. Eles trazem uma vantagem em relação aos campos autonumerados, que é a possibilidade de saber o valor do número seqüencial antes de inserí-lo na tabela.

 

O nosso primeiro passo é criar uma tabela exemplo.

 

CREATE TABLE "EXEMPLO"

(

  CAMPO1 INTERGER NOT NULL,

  CAMPO2 VARCHAR(30),

  PRIMARY KEY ("CAMPO1")

);
 

 

A seguir vamos criar um Generator para fornecer-nos o número seqüencial que iremos usar para preencher “CAMPO1” da tabela “EXEMPLO”.

 

CREATE GENERATOR "GEN_EXEMPLO";
 

 

O valor do Generator não é incrementado automaticamente pelo Interbase. É responsabilidade do desenvolvedor incrementá-lo quando necessário. Para isso é usado o comando “Gen_Id”. A sua sintaxe é:

 

Valor = Gen_Id(<Generator>, <Incremento>)

 

onde <Generator> é o nome do Generator e <Incremento> é a quantidade de unidades que se deseja incrementar em <Generator>

(<Generator> = <Generator> + <Incremento>).
 

 

Provavelmente a maneira mais prática e fácil de obter o número do Generator é usar Stored Procedures, pois se passa a ter um único ponto para buscar a informação e o processamento será feito no servidor.

 

O código na nossa Stored Procedure é:

 

SET TERM ^ ;

CREATE PROCEDURE EXEMPLO_PEGAR_GENERATOR

RETURNS (VALOR_GENERATOR INTEGER)

AS

BEGIN

  VALOR_GENERATOR = GEN_ID(GEN_EXEMPLO, 1);

END^

SET TERM ; ^
 

 

Aqui o comando “SET TERM” é usado porque é necessário que cada linha de comando da Stored Procedure seja finalizada com um ponto e virgula (;). Como a Stored Procedure também precisa ser finalizada por um caracter terminador faz-se necessário alterá-lo para o perfeito funcionamento do Interbase.

 

Até aqui nós só preparamos nosso banco de dados para ser usado pela aplicação que criaremos a seguir. O nosso exemplo será em Delphi usando os componentes da Palette do Interbase.

 

Crie uma nova aplicação e insira e configure os componentes IBDatabase, IBTransaction e IBStoredProc (ver programa exemplo anexo Exemplo.zip). O código para obter o valor do Generator é descrito a seguir:

 

procedure TForm1.ButtonGetGeneratorClick(Sender: TObject);
begin
   IBTransaction1.StartTransaction; // Inicia transação

   // Prepara para executar a Stored Procedure
   if not IBStoredProc1.Prepared then
      IBStoredProc1.Prepare;

   // Executa
   IBStoredProc1.ExecProc;

   // Pega o valor do Generator
   LabelGen.Caption := IntToStr(IBStoredProc1.ParamByName('VALOR_GENERATOR').AsInteger);

   IBTransaction1.Commit; // Commit da transação
end;

 

 

Agora podemos usar o valor do Generator para inserir dados na nossa tabela. Ao invés de exibir o valor obtido em um componente TLabel, podemos atribuir esse valor a uma variável e usá-lo em no comando "INSERT".

 

INSERT INTO EXEMPLO (CAMPO1, CAMPO2)

VALUES (:PARAM1, :PARAM2)


onde PARAM1 receberia o valor do Generator e PARAM2 seria uma descrição.
 

 

Todo código usado aqui foi testado, inclusive o programa exemplo que acompanha este artigo. Espero ter ajudado a esclarecer como usar essa característica do Interbase. Um grande abraço a todos.

 

Dalmo Cirne

 

Publicidade

Vote na dica




Quantidade de votos: 1 voto
Aceitação: 20%


Detalhes da dica

Categoria: Banco de dados
Adicionada dia: 30/12/04
Por: Daniel_Figueiredo
Visualizada: 13032 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009