Fórum delphi com auto incremento #365211
17/10/2008
0
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
Curtir tópico
+ 0Posts
18/10/2008
Leonardo_age
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
22/10/2008
Danikenji
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
22/10/2008
Leonardo_age
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
Clique aqui para fazer login e interagir na Comunidade :)