delphi com auto incremento

Delphi

17/10/2008

Mais um problema que me aparece e eu nao consegui resolver. Tenho uma tabela no access com um campo auto incremente. No delphi uso o ado. Como tratar o campo auto incremente, pois se no delphi eu mandar gravar no banco sem preencher o campo auto incremente, o banco deixa o campo em branco.

O que eu consegui ate agora foi fazer um select para achar o ultimo registro do banco:

inclusao. select last(codigo) from clientes;

isso seleciona o codigo do ultimo registro. Como faço para colocar o resultado desse select no campo referente ao codigo??

tem alguma outra forma de fazer o que eu quero?


Danikenji

Danikenji

Curtidas 0

Respostas

Leonardo_age

Leonardo_age

17/10/2008

Olá amigo,

No seu caso eu verificaria se o banco realmente esta como Autoincrement, mas caso queira tentar de outra forma, ao invés de

inclusao. select last(codigo) from clientes; 


use


inclusao. select max(codigo) from clientes; 


Pois pode haver uma exclusão na tabela e por algum motivo o ultimo registro não ter o maior código.

Seguindo... após isso quando vc for montar a o sql de insert passe o código obtido desta query incrementando 1.

Caso você use esse código muitas vezes, sugiro que monte uma função de busque o número de sequencia, mais ou memos assim:

function SEQ(tabela,campo : String) : String; 
begin 
   SQLInclusao.Active := False;; 
   SQLInclusao.SQL.Text:=  select max(codigo) as cod from clientes;
   SQLInclusao.Active := True; ; 

   if SQLInclusao.Isempty then 
      Result := ´1´
   else
      Result := InttoStr(SQLInclusao.fieldbyName(´cod´).asInteger + 1);
end;



Espero ter ajudado!


GOSTEI 0
Danikenji

Danikenji

17/10/2008

entao, ate consegui incrementar no novo registro, mas agora o problema esta ocorrendo quando eu deleto o ultimo registro.

quando deleto o ultimo registro, na hora que eu vou inserir um novo ele pega o mesmo codigo que estava no registro que foi excluido.

Sera que tem como nao fazer ele pegar o codigo do registro que foi excuido?

Pois no meu sistema, os registros excluidos sao gravados em outra tabela para uma possivel consulta de exclusoes do sistema.


GOSTEI 0
Leonardo_age

Leonardo_age

17/10/2008

No IB /Firebird existe um recurso chamado Generators, que são utilizados para fazer o que você quer, mas no Access infelizmente não conheço.

Mas deixe-me entender melhor, quer dizer então que ao excluir um registro ele é transferido para outra tabela na mesma base de dados (.mdb)? Por que se for, não seria o caso de você criar um flag na tabela do tipo fl_Deletado podendo conter as opções N e S? Assim ao invés de deletar de uma tabela, inserir em outra, apenas será dado um update na tabela de clientes.

Quando quiser filtrar por clientes ativos seu select teria mais essa clausula [b:dd2ab81b67]fl_Deletado = ´N´[/b:dd2ab81b67], qdo quisesse consultar clientes inativos [b:dd2ab81b67]fl_Deletado = ´S´[/b:dd2ab81b67]


Abraços


GOSTEI 0
POSTAR