Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Geelherme

[Resolvido] Como inserir registros em campo Auto Increment

Recommended Posts

Olá amigos...

 

Estive a criar um botao que insere informações em um banco de dados Firebird, mas tem um campo IDLIGACOES que é do tipo AUTO_INCREMENT.. como fazer com ele?

 

abaixo vai o codigo...


 DM.DataModule1.ZTable1.Insert;
 DM.DataModule1.ZTable1.FieldByName('CLIENTE').Value := 'Teste';
 DM.DataModule1.ZTable1.FieldByName('IDLIGACOES').Value := '';
 DM.DataModule1.ZTable1.Post;

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, até onde eu sei, basta você levar apenas o parametro Cliente, o IDLIGACOES nao precisa passar nao, pois como é um autoincremento, quando você da um insert e posteriormente da um post, ele já insere uma linha com o cliente passado e o IDLIGACOES um numero a mais do que o anterior, automatico...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega no MySQL + Delphi ele também gera um código auto Increment sem precisar passar um valor do respectivo campo, só entro com os valores dos campos restantes de tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde a todos.

 

Para criar um campo auto incremento no Firebird, voce precisa antes criar um Generator. Faça assim:

 

1º) Dentro do console do Firebird ou até mesmo do IBExpert, onde voce criou o banco, na instrução SQL voce digita assim:

 

  Create Generator GEN_ID_FUNC;
  Set Generator GEN_ID_FUNC to 0;

Pronto, acaba de criar um gerador para uma tabela Funcionários por exemplo e configurou o seu valor inicial para 0 (zero).

 

Depois vamos criar uma Trigger (Gatilho) ainda dentro do console do Firebird ou dentro do IBExpert, com a seguinte instrução SQL:

 

    SET TERM ^ ;

	CREATE TRIGGER AUTO_INC_FUNC FOR FUNCIONARIO
	ACTIVE BEFORE INSERT POSITION 0
	AS
	begin
   	if (new.cod_func is null) then new.cod_func = gen_id(gen_id_func, 1);
	end
	^

	SET TERM ; ^

Agora lá na aplicação em Delphi, voce vai colocar o seguinte código:

 

   with DM.DataModule1.ZTable1 do begin
   		FieldByName('IDLIGACOES').Required := False;
   		Append;
   		FieldByName('CLIENTE').Value := 'Teste';
   		Post;
   end;

Repare que eu configurei a propriedade Required do campo autoincremento IDLIGACOES como false, para que ele possa passar valores nulos e não gerar erro, pois ele vai autoincrementado dentro do banco, através da Trigger (Gatilho) que criamos) lá. Essa propriedade "Required" pode ser configurada também via Object Inspector, onde a mesma possa ser configurada apenas uma única vez.

 

Repare também que eu usei o método Append ou invés de Insert, que na verdade tem a mesmo função de colocar a tabela em modo de inserção, porém há uma pequena diferença, o Append cria uma estrutura de registro em branco no final da tabela, enquanto que o Insert, cria a estrutura em branco onde estiver posicionado o ponteiro de registros da tabela. Ex. Uma tabela que contenha 50 registros e o ponteiro está posicionado no nº 25 (meio da tabela), o Insert insere uma posição acima do 25, renomeando o 25 para 26. Pode parecer bobagem, porém essa renumeração só feita dentro dos ponteiros internos da tabela, e não no campo autoincremento, Por essa razão, sempre gosto de inserir no final da tabela com o Append.

 

O Senhor é meu Pastor e nada me faltará (Sl. 23:01).

 

Jorge da Silva Abreu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de agradecer a todos que responderam

 

Jorge, a sua resposta foi excelente. Todos os meus problemas estavam nesse Required, que eu não sabia dessa possibilidade de fazê-lo dessa maneira.

O Trigger e o Generator já estavam criados, então não precisei fazê-los, mas se alguém quiser usar o auto increment, basta seguir as instruções, estão todas corretas.

 

Agradeço imensamente pela ajuda amigo, tenha um bom dia.

 

Guilherme L. Chaves

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo em que componente ou onde coloco este código la no delphi?

 

with DM.DataModule1.ZTable1 do begin

FieldByName('IDLIGACOES').Required := False;

Append;

FieldByName('CLIENTE').Value := 'Teste';

Post;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.