access - como criar e incrementar um campo contador personalizado
DESCRIPTION
Access - Como Criar e Incrementar Um Campo Contador PersonalizadoTRANSCRIPT
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
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"))