Geração automática de código
Estou com uma dúvida... Quero gerar o código automaticamente no cadastro de clientes mas ele não incrementa o código, fica sempre 1. Estou usando BDE, e estou começando a mexer no Delphi agora.
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
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
Curtidas 0
Respostas
Cabelo
04/02/2004
Caro Colega
Qual o tipo de campo na tabela?
Qual o tipo de campo na tabela?
GOSTEI 0
Djjunior
04/02/2004
que banco de dados vc está usando ?
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
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
Julio Cunha
04/02/2004
Caro Colega
Qual o tipo de campo na tabela?
Eu declarei como Integer e a base de dados foi feito em Interbase 6.
GOSTEI 0
Celsoctorres
04/02/2004
Olá,
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,
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
Cabelo
04/02/2004
Amigo
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;
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
Julio Cunha
04/02/2004
que banco de dados vc está usando ?
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
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