Código
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
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009