auto-incremento no interbase
15/03/2003
0
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
Posts
16/03/2003
Anonymous
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..
16/03/2003
Phfdelphi
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?
16/03/2003
Anonymous
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
Clique aqui para fazer login e interagir na Comunidade :)