auto-incremento no interbase

15/03/2003

0

Boa noite a todos!!!!

Gostaria de saber como faço para criar um campo auto-increment no interbase 6 (tentei o exemplo q tem aqui no site mas não consegui)


Desde já agradeço


Kandrus

Kandrus

Responder

Posts

16/03/2003

Anonymous

Vou te mandar dos 2 jeitos que sei..
esse aqui é o aconselhavel..

******** Ultimo Registro 1 *********
With QCidade do Begin
SQL.Clear;
SQL.Add (´Select Max(Codigo) as Autonumero from Cidades´);
open;
end;
if QCidade [´Autonumero´] > 0 then
editCodigo.Text := ´00´ + IntToStr(StrToInt(QCidade[´Autonumero´])+ 1 );
EditNome.SetFocus;


******** Ultimo Registro 2 *********
if dmPrincipal.IQCliente.RecordCount = 0 then
begin
editCodigo.Text := ´001´;
end
else
begin
dmPrincipal.IQCliente.Last;
editCodigo.Text := FloatToStr(dmPrincipal.IQClienteCodigo.Value +1)
end;
******************

espero ter ajudado.. fui..


Responder

16/03/2003

Phfdelphi

Tem algumas formas de você criar campos auto incremento no IB utilizando triggers, generators, etc... diretamento no IB. Se você estiver ligando o interbase numa aplicação delphi a melhor solução é criar uma tabela que contenha os valores de auto incremento, por exemplo:

Você quer colocar um número auto-incremento para ser o campo ID do cliente, pois bem, crie uma tabela de ID que vai conter o campo ID_CLIENTE e lá você atribui o valor 1, no evento AfterInsert da tabela Clientes você pega esse valor 1 e joga no ID da tabela Clientes e depois atribui o valor 2 (1+1) no campo ID_CLIENTE na tabela ID.

CLIENTES ID
-----------------------------------------------------------
ID_CLIENTE = 1 | ID_CLIENTE = 2


e assim por diante, você vai criando outros campos na tabela ID que vai servir como o código auto incremento.

OK?


Responder

16/03/2003

Anonymous

Basta vc alterar o exemplo abaixo para usar as suas tabelas e campos.

No caso minha tabela chama-se FORNECEDOR e o campo chave primaria chama-se CODFORNECEDOR.
Altere para seu padrao, copie e cole no IBConsole( ou outro q rode sentencas SQL...).

Este é o MELHOR meio de se construir um AutoIncremento pois o uso do metodo pega ultimo codigo na tabela+soma mais um+move para o campo+grava o registro, pode trazer problemas pois se houver um aumento do trafego momentaneamente e este procedimento demorar um pouco, outro usuario pode pegar o mesmo codigo para o novo registro ...(Claro isto é uma Hipotese.... Mas vai q acontece ???)
Enquanto q o AutoIncremento no Proprio Banco este problema nao acontece... pois o banco ira processar as requisicoes para gerar o novo codigo uma a uma, montando uma fila... Entao é impossivel haver a geracao de um mesmo codigo para registros diferentes. Fora isto a velocidade é outra pois o processamento é feito no banco e nada vai e volta pela Rede.... O unico problema é q vc so tem o codigo gerado DEPOIS q o registro for incluido, ai vc tem q dar um select buscando somente o codigo do registro.

/*Cria o campo AutoIncremento no BANCO*/
CREATE GENERATOR Gen_ID_FORNECEDOR;
SET GENERATOR Gen_ID_FORNECEDOR to 0;

/*Faz com q ao Incluir um registro o AutoIncremento forneça o Numero para CODFORNECEDOR*/
SET TERM !! ;
CREATE TRIGGER Gen_ID_FORNECEDOR FOR FORNECEDOR
BEFORE INSERT AS
BEGIN
new.CODFORNECEDOR = gen_id(Gen_ID_FORNECEDOR, 1);
END !!
SET TERM ; !!


Um Abraço
Werlon Goulart


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar