Vous êtes sur la page 1sur 2

Access - Como criar e incrementar um campo contador personalizado?

Antes de qualquer coisa, no use um campo do tipo Autonumerao para campos da tabela que precisem de numerao seqencial ininterrupta, pois a "autonumerao" do Access no foi criada para isso, mas sim para ser usada como Chave Primria de uma tabela. Embora o campo "autonumerao" no se repita jamais, isso no quer dizer que sua numerao obedea a uma seqncia ininterrupta. possvel reutilizar um n deletado de um campo AutoNumerao? No possvel reutilizar um nmero deletado de um campo AutoNumerao. numerao. Vamos supor que voc possui 50 registros numa tabela (seu campo autonumerao vai estar em 50). Se voc apagar o registro 25 e inserir um novo registro, o Access no volta a utilizar o n 25, mas sim continua a partir do 51. Esse um comportamento normal do programa. Alm disso, a organizao seqencial no existe numa tabela de um banco de dados relacional como o Access, j que os registros so gravados sem importar a seqncia lgica. ndices e consultas que do uma ordem na apresentao dos registros contidos numa tabela. Soluo: Se voc quiser um campo absolutamente seqencial, como o n de uma nota fiscal, voc ter de criar uma rotina no seu formulrio que incremente o ltimo nmero gravado na tabela. Vamos supor que no formulrio 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 nmero anterior e, se no houver nenhum contrato armazenado na tabela, que ele gerasse um nmero a partir de 1. Se voc apagar algum registro que contenha um campo AutoNumerao, o Access no reutilizar o nmero, ficando uma brecha na seqncia de

Para resolver a questo, insira a expresso abaixo na propriedade Valor padro da caixa de texto:

=SeImed(DContar("[NumeroContrato]";"Contratos" )=0;1;DMx("[NumeroContrato]";"Contratos")+1)
Outra opo, seria criar uma tabela "TabContrato" com o campo "ContratoInicial" que armazena o nmero inicial dos contratos. Desse modo, a expresso acima ficaria assim:

=SeImed(DContar("[NumeroContrato]";"Contratos" )=0;DLookup("[ContratoInicial]";"TabContrato");D Mx("[NumeroContrato]";"Contratos")+1)


Soluo com exemplo: No mdb de exemplo, abra o formulrio "frmExemplo_Contratos" (Fig.1), que possui uma numerao de contratos do tipo 001/1999; 002/1999 e assim por diante. Adicione um registro novo e veja que o formulrio apresenta o nmero seguinte: 003/1999. Para conseguir tal efeito, foi utilizada a expresso abaixo na propriedade Valor Padro da caixa de texto Nmero:

=SeImed(DContar("[Nmero]";"Contratos")=0; ("001" & Ano(Data()));Formato((Esquerda(DMx("[Nmero]" ;"Contratos");3)+1) & Ano(Data());"000\/0000"))

Vous aimerez peut-être aussi