Fórum Geração automática de código #211533
04/02/2004
0
Gostaria de saber se tem algum jeito de capturar o último valor cadastrado do campo código e incrementar +1. Estou fazendo da seguinte forma:
function codifica()
Open na tabela
Edit na tabela e depois:
DataModulo.tabela.Value = DataModulo.tabela.Value + 1;
Result := DataModulo.tabela.Value;
mas desta forma não tá incrementando o valor.
Me ajude por favor.
Obrigado
Júlio
Julio Cunha
Curtir tópico
+ 0Posts
04/02/2004
Cabelo
Qual o tipo de campo na tabela?
Gostei + 0
04/02/2004
Djjunior
isso porque o que vc está querendo fazer é automático na maioria dos bancos de dados! tipo no acces é só colocar autoincremento no sql server basta colocar como int e marcar como identity, em outros bancos vc vai ter que ver como funciona
mas se vc quizer fazer na mão mesmo bastaria criar uma query do tipo
select max(cod) from tabela
ou se essa tabela for muito grande derepente é mais vantajoso vc ter uma segunda tabela, na qual vc sempre vai ter o último código usado, dessa forma vc vai ter um ganho de perfoce
Gostei + 0
04/02/2004
Julio Cunha
Eu declarei como Integer e a base de dados foi feito em Interbase 6.
Gostei + 0
04/02/2004
Celsoctorres
use SQL,
eu uso o seguinte código, só que meu banco é firebird... (da na mesma),
//procedimento para gerar código automaticamente: INTERBASE
procedure autoinc(CAMPOo,TABELA:string;TABELAIB:TIBTable);
begin
with DM2 do
begin
IBQVerifica.SQL.Clear;
IBQVerifica.SQL.Add(´Select ´ + CAMPO + ´ from ´ + TABELA + ´ order by ´ + CAMPO + ´ desc´);
IBQverifica.Active:=true;
if IBQVerifica.IsEmpty then
TABELAIB.FieldByName(CAMPO).Value:=1
else
TABELAIB.FieldByName(CAMPO).Value:= IBQVerifica.FieldByName(CAMPO).Value + 1
end;
end;
Agora vamos supor que vc tenha um banco chamado teste.gdb e uma tabela que se chama TBRENKX e nesta tabela um campo inteiro que se chama NREN, e outro campo varchar....
no código escrito acima CAMPO seria NREN, TABELA seria TBRENKX, e TABELAIB, o nome da sua tabela usando o componente IBTable,
agora basta subistituir os valores,
no evento afterinsert escreva:
autoinc(´TBRENKX´,´NREN´,IBTBRENKX);
pronto, agora vai gerar o código automaticamente,
qualquer dúvida escreve aí...
blz,
Gostei + 0
04/02/2004
Cabelo
mesmo que a tabela for muito grande, vc pode dar um select max que não perde tanto a performance assim, não esqucendo que deve-se criar o índice desta tabela por este campo..
function F_Max(l_Query : TQuery) : integer;
begin
l_Query.Sql.Clear;
l_Query.Sql.Add(select max(cod) as D_COD from tabela);
l_Query.Open;
if l_Query.fieldbyname(´D_COD´).asstring <> ´´ then
begin
result := l_Query.fieldbyname(´D_COD´).asinteger + 1;
end
else
begin
result := 1;
end;
end;
Gostei + 0
04/02/2004
Julio Cunha
Opaaa, o base de dados é Interbase 6. Eu vou ter que criar esta query ligada a tabela clientes, mas só com o campo código num é isso????
Valew
Obrigado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)