Buscar

Campo Autoincrement via código

Código

(*
Bom, é uma dica que pode parece desnecessária, mas analisando melhor você verá que pode ser bem útil.

Primeiro, por que criar um campo autoincrement via código, se pra obtermos isso é só escolher esse tipo na criação da tabela?

1- Como sabemos, campos autoincrement conta e não para.. Explicando: mesmo que você exclua
um registro, ele continuará contando, "pior" ainda, mesmo esvaziando toda a tabela, ele
continuará contando,exceto zerando o contador via código ou frontend do criador de tabelas,
(isso só quando a tabela é esvaziada de seus registros)

2- Às vezes, necessitamos de campo(s) em nossa(s) tabela/projeto que, seja(m) incrementados
automaticamente, mas que, aos excluirmos um registro, a posição atual do contador seja recuperada.

Então, vendo por essa ótica, é pra isso e por isso que é válido a criação de um autoincrement via código.

O método:

- Criar um campo do tipo inteiro em uma tabela;
Como sugestão, dê o nome desse campo de "CampoNumerico"
- Salve a tabela com o nome de "Tabela"
- Abra o Delphi
- Coloque uma TTable(chame-á de Tabela) e um TQuery(Chame-o de QueryContador)
- Localize a tabela "Tablela" no Objectinspector via diretório, Alias ou qualquer
outra forma que vc usa pra isso.
- adicione o campo através do "Fields Editor" => " Add all fields"
- Set o TQuery da mesma forma da tabela via alias, diretório ou DataBase
- Na property SQL, click e adicione a seguinte SQL: "Select(MAX)CampoNumerico from Tabela"
- adicione o campo através do "Fields Editor" => " Add all fields"
- Coloque um DataSource e na propiedade DataSet escolha "Tabela"
- Coloque um DbEdit e na propriedade DataSource escolha o DataSource acima citado, e na
propriedade Field, escolha o campo "CampoNumerico"
- Coloque um DbNavigator e na propriedade DataSource também escolha o DataSource que falamos acima

O código a seguir pode ser colocado no OnNweRecod ou no BeforePost da TTable:

*)



 QueryContador.Active := False;
  QueryContador.Active := True;
   with QueryContador.Fields[0] do
    if isNull then
    TabelaCampoNumerico.Value := 1
  else
 TabelaCampoNumerico.Value := asInteger + 1;

(*

- Rode o projeto, claro, tendo o cuidado de abrir o objeto Tabela referido acima.
pode ser no onCreate do Form, dessa forma: "Tabela.Open";
- Use o DbNavigator pra inserir e excluir registros. Você verá que não precisará escrever nada no DbEdit, pois o contador irá incrementar em + 1 cada registro inserido e, excluindo registros,
a posição do contador se recupera, voltando a adicionar o registro que fora excluído.

Obs.: Colocando o código acima no evento OnNewRecord da TTable, ao inserir um novo registro,
o valor já é observado no DbEdit. Já no evento BeforePost, ele só é escrito momentos antes de
aplicarmos um Post na tabela.

*)

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Banco de dados
Adicionada dia: 13/10/09
Por: Abel André Da Silva
Visualizada: 6608 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009