auto numeração em access

Delphi

21/07/2004

aee galera.. qual a melhor forma de fazer uma autonumeracao tipo no cadastro de clientes cada um vai ter o codigo .. qria q isso gerasse automaticamente como faço isso em delphi? usando Access e ADO??

vlw
galera


Slack

Slack

Curtidas 0

Respostas

Sandra

Sandra

21/07/2004

slack,

No access existe o tipo de campo ´autonumeração´... não poderia ser feito diretamente com ele? Se for o caso, basta utilizá-lo no momento da criação da tabela.


GOSTEI 0
Alexsandro

Alexsandro

21/07/2004

meus amigos,

Criei uma tabela Access com o campo auto incrmento, mas quando vou incluir um novo registro o campo chave não está incrementado. O que preciso fazer no componente? Tem algum tratamento?

Muito Obrigado,

Alex


GOSTEI 0
Sandra

Sandra

21/07/2004

:shock: :P Nossa, faz tempo que respondi este tópico!


Alexsandro,

Que eu me lembre, não há necessidade de nenhum tratamento nos componentes de acesso, pelo menos no programainha (bem simples mesmo) que fiz. [b:331b9cfb3a]Acho[/b:331b9cfb3a] que o código só aparecia depois que os dados são gravados na tabela.

Porém, quais componentes está usando?


GOSTEI 0
Alexsandro

Alexsandro

21/07/2004

Oi Sandra,

Estou usando um campo DBEDIT do Delphi. Já disseram aqui que a auto numeração só aprece depois de eu salvar os dados, mas não é isso que eu quero. Eu gostaria de ao pressionar o botão de incluir que o delphi me trouxesse automaticamente o novo registro com o novo código...

Agradeço sua ajuda.

Alex


GOSTEI 0
Unk

Unk

21/07/2004

Não use a auto numeração, faça uma rotina para incrementar em tempo de execução!


GOSTEI 0
Alexsandro

Alexsandro

21/07/2004

Pessoal,

Percebi que não tem jeito, eu preciso implementar na mão o recurso da auto-numeração, e por isso gostaria de saber em qual evento devo implementar a rotina. Vocês teriam algum exemplo?

Obrigado,

Alex


GOSTEI 0
Alexsandro

Alexsandro

21/07/2004

Pessoal,

Percebi que não tem jeito, eu preciso implementar na mão o recurso da auto-numeração, e por isso gostaria de saber em qual evento devo implementar a rotina. Vocês teriam algum exemplo?

Obrigado,

Alex


GOSTEI 0
Sandra

Sandra

21/07/2004

Alex,

Experimente esse exemplo bem simples, no evento onNewRecord da tabela que necessita da auto incrementação:

with Query1 do begin
  Close;
  SQL.Text := ´Select Max(SeuCampo) from SuaTabela´;
  Open ;
  If Fields[0].isNull then
    SuaTabela.FieldByName(´SeuCampo´).asInteger := 1
  else
    SuaTabelaSeuCampo.AsInteger := Fields[0].AsInteger + 1;
end;


Espero que ajude.


GOSTEI 0
Alexsandro

Alexsandro

21/07/2004

Muito Obrigado Sandra,

Alex


GOSTEI 0
Icheuk

Icheuk

21/07/2004

Caro Alexsandro.

Talvez o tipo de problema que voce teve foi por ter outras tabelas associadas a ela e por isso precisa desta chave(auto incremento) coreto, eu ja tive este problema.

Qual solucao que achei mais viavel, dentro do meu banco de dados eu criei um campo denominado CHAVE neste campo eu gera um numero composto por (Empresa+Usuario+data+Hora) pois o sistema é multi empresa, ou seja desta forma nao vai haver duplicidade ok.

Bom no momento que adicionei um registro o campo auto incremente ainda nao foi criado pois o access deve garantir que se o usuario cancelar a operacao este numero de auto incremente nao vai ser perdido ou seja ele so disponibiliza o numero ao gravar o registro efetivamente, pois voce pode estar em rede com varios usuarios concorrendo ao mesmo tempo por um registro gravado, mas voltando a logica.

Esta chave eu guardo em uma variavel no sistema e assim que gravar o registro e nao houver nenhum erro na gravacao eu executo uma pesquisa neste registro atraves desta chave, neste momento eu passo a ter o codigo do auto incremente e posso associa-lo a outras tabelas relacionadas a este cadastro.

De qualquer forma a Solucao da Sandra tambem é bem legal.

Eu cheguei a esta solucao devido a outras necessidades que possuia no momento do desenvolvimento.

Mas espero ter esclarecido a logica do access para disponibilizar a chave de auto incremente apenas apos gravar o registro efetivamente.

Um grande abraco e boa sorte.

Ivan


GOSTEI 0
POSTAR