AutoInc
Tenho uma tabela feita em Paradox, onde o campo Cod foi definido como autoinc, acontece que quando um registro é excluído, 3 por exemplo, outro novo cliente não poderá assumir aquele Código 3 disponível.
Como posso fazer para corrigir esse tipo de problema?
Antecipadamente agradeço.
Aloísio Santos
aloisiosantos@bol.com.br
Fone:(74) 9979-6194 :roll:
Como posso fazer para corrigir esse tipo de problema?
Antecipadamente agradeço.
Aloísio Santos
aloisiosantos@bol.com.br
Fone:(74) 9979-6194 :roll:
Anonymous
Curtidas 0
Respostas
Aroldo Zanela
21/03/2003
Quanto trabalhamos com tabelas Paradox e apagamos o seus registros, o contador do campo AutoIncremento não é zerado, criando muitas vezes um grande inconveniente. Para resolver esse problema, use a seguinte função:
function ResetAutoInc(FileName: TFileName; Base: Longint): Boolean;
begin
with TFileStream.Create(FileName, fmOpenReadWrite) do
begin
Result := (Seek($49, soFromBeginning) = $49) and (Write(Base, 4) = 4);
Free;
end;
end;
O parâmetro FileName é o nome da tabela, incluindo o caminho. E o parâmetro Base é o valor inicial para o contador do AutoIncremento. Veja um exemplo de uso:
procedure TForm1.Button1Click(Sender: TObject);
begin
ResetAutoInc(´C:\Temporario\Cliente.db´, 1);
end;
Pirateado de: http://www.elivaldo.com.br
function ResetAutoInc(FileName: TFileName; Base: Longint): Boolean;
begin
with TFileStream.Create(FileName, fmOpenReadWrite) do
begin
Result := (Seek($49, soFromBeginning) = $49) and (Write(Base, 4) = 4);
Free;
end;
end;
O parâmetro FileName é o nome da tabela, incluindo o caminho. E o parâmetro Base é o valor inicial para o contador do AutoIncremento. Veja um exemplo de uso:
procedure TForm1.Button1Click(Sender: TObject);
begin
ResetAutoInc(´C:\Temporario\Cliente.db´, 1);
end;
Pirateado de: http://www.elivaldo.com.br
GOSTEI 0
Sandra
21/03/2003
Olá, Luck!
:arrow: Ao invés de usar o + (autoincremento) automático, faça-o manualmente, usando SQl:
1-Mude o tipo do campo para I (integer).
2-No evento OnNewRecord da tabela, coloque:
Fica mais fácil. :wink:
:arrow: Ao invés de usar o + (autoincremento) automático, faça-o manualmente, usando SQl:
1-Mude o tipo do campo para I (integer).
2-No evento OnNewRecord da tabela, coloque:
procedure TDM.TB_ClienteNewRecord(DataSet: TDataSet); begin With Query1 Do Begin Close ; SQL.Text := ´Select Max(Cod_Cliente) from Cliente´ ; Open ; If Fields[0].isNull Then TB_Cliente.FieldByName(´Cod_Cliente´).asInteger := 1 ; Else TB_ClienteCod_Cliente.AsInteger := Fields[0].asInteger + 1 ; End ; end;
Fica mais fácil. :wink:
Tenho uma tabela feita em Paradox, onde o campo Cod foi definido como autoinc, acontece que quando um registro é excluído, 3 por exemplo, outro novo cliente não poderá assumir aquele Código 3 disponível.
Como posso fazer para corrigir esse tipo de problema?
Antecipadamente agradeço.
Aloísio Santos
aloisiosantos@bol.com.br
Fone:(74) 9979-6194 :roll:
GOSTEI 0
Marcelo
21/03/2003
Tenho uma tabela feita em Paradox, onde o campo Cod foi definido como autoinc, acontece que quando um registro é excluído, 3 por exemplo, outro novo cliente não poderá assumir aquele Código 3 disponível.
Como posso fazer para corrigir esse tipo de problema?
Antecipadamente agradeço.
Aloísio Santos
aloisiosantos@bol.com.br
Fone:(74) 9979-6194 :roll:
Olha luci,,,
Isso, na verdade, nao eh um problema, e sim algo muito bom, que eu lhe recomendo nao tentar mudar, pois quando um CODIGO é excluido e subistituido um outro cadastro com a mesma referencia de CODIGO, voce estara sujeito a fazer com que o restante do programa que tem esse codigo como referencia, ser assumido pelo outro cadastro, que pode nao ter nada a ver com o outro cadastro!!! mas se vc deseja fazer isso,(que nao eh recomendavel) vc pode fazer assim:
Mude o campo da tabela para Alpha, e faca uma busca do ultimo cadastro e acrescente + 1, com esse codigo:
[b:ed3527de7a]ECodito.text:=IntToStr(Table1.RecordCount + 1);[/b:ed3527de7a]
e Coloque no evento ONEnter do ECodigo.Text esse:
[b:ed3527de7a]EDescricao.SetFocus;[/b:ed3527de7a]
Valeu?
at+...
GOSTEI 0
Anonymous
21/03/2003
Oi, Luck
Vários colegas já resolveram sua dúvida. Ótimo.
Como informação adicional, uma vez que já passei por isso, lembro que os campos autoincremento apresentam uma vantagem adicional por não
repetirem números que são excluídos. Imagine uma empresa que tem um cadastro de clientes padrão, e um cadastro adicional dos mau pagadores.
Muito provavelmente o mau pagador será excluído do cadastro padrão bem rápido (prá quê ficar mandando mala direta se a compra anterior ele não pagou ?). No entanto, possivelmente a empresa vai querer mantê-lo no cadastro de mau pagador por mais tempo, inclusive para que ele venha a
fazer uma nova compra alguns meses depois.
Se assim que ele foi excluído do cadastro padrão o seu número de código foi utilizado para um novo cliente, este novo cliente estará com o mesmo código
do mau pagador... na primeira consulta que se fizer, o novo cliente será
taxado de mau pagador... Claro que há diversas formas de se evitar isso e com certeza você já adotou alguma delas. Espero ter sido útil. CarlosRM.
Vários colegas já resolveram sua dúvida. Ótimo.
Como informação adicional, uma vez que já passei por isso, lembro que os campos autoincremento apresentam uma vantagem adicional por não
repetirem números que são excluídos. Imagine uma empresa que tem um cadastro de clientes padrão, e um cadastro adicional dos mau pagadores.
Muito provavelmente o mau pagador será excluído do cadastro padrão bem rápido (prá quê ficar mandando mala direta se a compra anterior ele não pagou ?). No entanto, possivelmente a empresa vai querer mantê-lo no cadastro de mau pagador por mais tempo, inclusive para que ele venha a
fazer uma nova compra alguns meses depois.
Se assim que ele foi excluído do cadastro padrão o seu número de código foi utilizado para um novo cliente, este novo cliente estará com o mesmo código
do mau pagador... na primeira consulta que se fizer, o novo cliente será
taxado de mau pagador... Claro que há diversas formas de se evitar isso e com certeza você já adotou alguma delas. Espero ter sido útil. CarlosRM.
GOSTEI 0