access - como criar e incrementar um campo contador personalizado

3
Access - Como criar e incrementar um campo contador personalizado? Antes de qualquer coisa, não use um campo do tipo Autonumeração para campos da tabela que precisem de numeração seqüencial ininterrupta, pois a "autonumeração" do Access não foi criada para isso, mas sim para ser usada como Chave Primária de uma tabela. Embora o campo "autonumeração" não se repita jamais, isso não quer dizer que sua numeração obedeça a uma seqüência ininterrupta. É possível reutilizar um nº deletado de um campo AutoNumeração? Não é possível reutilizar um número deletado de um campo AutoNumeração. Se você apagar algum registro que contenha um campo AutoNumeração, o Access não reutilizará o número, ficando uma brecha na seqüência de numeração. Vamos supor que você possui 50 registros numa tabela (seu campo autonumeração vai estar em 50). Se você apagar o registro 25 e inserir um novo registro, o Access não volta a utilizar o nº 25, mas sim continua a partir do 51. Esse é um comportamento normal do programa. Além disso, a organização seqüencial não existe numa tabela de um banco de dados relacional como o Access, já que os registros são gravados sem importar a seqüência lógica. Índices e consultas é que dão uma ordem na apresentação dos registros contidos numa tabela.

Upload: marcelo-albuquerque

Post on 03-Aug-2015

684 views

Category:

Documents


24 download

DESCRIPTION

Access - Como Criar e Incrementar Um Campo Contador Personalizado

TRANSCRIPT

Page 1: Access - Como Criar e Incrementar Um Campo Contador Personalizado

Access - Como criar e incrementar um campo contador

personalizado?

Antes de qualquer coisa, não use um campo do tipo Autonumeração para campos da

tabela que precisem de numeração seqüencial ininterrupta, pois a "autonumeração" do

Access não foi criada para isso, mas sim para ser usada como Chave Primária de uma

tabela.

Embora o campo "autonumeração" não se repita jamais, isso não quer dizer que sua

numeração obedeça a uma seqüência ininterrupta. É possível reutilizar um nº deletado de

um campo AutoNumeração? Não é possível reutilizar um número deletado de um campo

AutoNumeração. Se você apagar algum registro que contenha um campo

AutoNumeração, o Access não reutilizará o número, ficando uma brecha na seqüência de

numeração.

Vamos supor que você possui 50 registros numa tabela (seu campo autonumeração vai

estar em 50). Se você apagar o registro 25 e inserir um novo registro, o Access não volta

a utilizar o nº 25, mas sim continua a partir do 51. Esse é um comportamento normal do

programa.

Além disso, a organização seqüencial não existe numa tabela de um banco de dados

relacional como o Access, já que os registros são gravados sem importar a seqüência

lógica. Índices e consultas é que dão uma ordem na apresentação dos registros contidos

numa tabela.

Solução:

Se você quiser um campo absolutamente seqüencial, como o nº de uma nota fiscal, você

terá de criar uma rotina no seu formulário que incremente o último número gravado na

tabela.

Vamos supor que no formulário acoplado à tabela "Contratos" eu tenha uma caixa de

texto acoplada ao campo "NumeroContrato". Ao digitar um novo contrato, eu gostaria que

Page 2: Access - Como Criar e Incrementar Um Campo Contador Personalizado

o Access somasse 1 ao número anterior e, se não houver nenhum contrato armazenado

na tabela, que ele gerasse um número a partir de 1.

Para resolver a questão, insira a expressão abaixo na propriedade Valor padrão da caixa

de texto:

=SeImed(DContar("[NumeroContrato]";"Contratos")=0;1;DMáx("[NumeroContrato]";"Contratos")+1)

Outra opção, seria criar uma tabela "TabContrato" com o campo "ContratoInicial" que

armazena o número inicial dos contratos. Desse modo, a expressão acima ficaria assim:

=SeImed(DContar("[NumeroContrato]";"Contratos")=0;DLookup("[ContratoInicial]";"TabContrato");DMáx("[NumeroContrato]";"Contratos")+1)

Solução com exemplo:

No mdb de exemplo, abra o formulário "frmExemplo_Contratos" (Fig.1), que possui uma

numeração de contratos do tipo 001/1999; 002/1999 e assim por diante.

Adicione um registro novo e veja que o formulário apresenta o número seguinte:

003/1999. Para conseguir tal efeito, foi utilizada a expressão abaixo na propriedade Valor

Padrão da caixa de texto “Número”:

=SeImed(DContar("[Número]";"Contratos")=0;("001" & Ano(Data()));Formato((Esquerda(DMáx("[Número]";"Contratos");3)+1) & Ano(Data());"000\/0000"))