Buscar

Como criar generators em banco de dados Interbase/Firebird, e incrementa-lo em aplicações Delphi.

Código

Como criar generators em banco de dados Interbase/Firebird, e incrementa-lo  em aplicações Delphi.

Auto-incremento é normalmente utilizado em campos que correspondem a chaves primárias nas tabelas.
Vamos criar dois generator dentro de um banco de dados:

CREATE GENERATOR GEN_CLIENTE_ID;
CREATE GENERATOR GEN_CONTA_ID;

Agora precisamos criar um procedimento, dentro do banco, de dados  para incrementar os generators.

SET TERM ^ ;
CREATE PROCEDURE GER_AUTOINC (TABELA VARCHAR(30))
RETURNS ( NOVO_CODIGO INTEGER)
AS
BEGIN
  IF (:TABELA = 'CLIENTES')  THEN
    NOVO_CODIGO = GEN_ID(GEN_CLIENTE_ID,1);
  IF (:TABELA = 'CONTAS')  THEN
    NOVO_CODIGO = GEN_ID(GEN_CONTA_ID,1);
END^
SET TERM ; ^


Procedimento na aplicação, para retornar o valor do generator incrementado :

1. faça a conexão com o banco de dados, usando os componentes disponíveis na paleta InterBase
2. coloque um IBStoredProc no formulário
3. no IBDataSet da tabela, crie um evento BeforePost (antes de gravar) e digite o código abaixo, que tem como função através do componente IBStoredProc, passar os parâmetros database, nome do procedure criado dentro do banco de dados e o nome da tabela.

procedure TForm1.IBDataSet1BeforePost(DataSet: TDataSet);
begin
  if IBDataSet1.State = DsInsert then
  begin
    IBStoredProc1.Database := IBDatabase1;
    IBStoredProc1.StoredProcName := 'GER_AUTOINC';
    IBStoredProc1.ParamByName('TABELA').AsString := 'CLIENTES';
    IBStoredProc1.Prepare;
    try
      IBStoredProc1.ExecProc;
      IBDataSet1CODIGO.AsInteger := IBStoredProc1.ParamByName('Novo_Codigo').AsInteger;
    finally
      IBStoredProc1.UnPrepare;
    end;
  end;
end;

Ao gravar um novo registro (comando Post), o generator correspondente, será incrementado e retornado ao campo chave da tabela passada pelo parâmetro.



Por : Paulo Maitan - pmaitan@ig.com.br
 

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Banco de dados
Adicionada dia: 11/05/10
Por: Paulo Roberto Maitan
Visualizada: 11564 vezes

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