... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Zerar um campo, tipo Numeração Automática

Usuário Ricardo:

Olá!

Como posso reiniciar um campo (coluna) de tabela, tipo "Numeração Automática", por código VBA?

Desde já, agradeço a sua ajuda.

Suporte:

Ricardo,

se a tabela está zerada (sem registros), basta usar o Compactar e Reparar.  Caso contrário, utilize o seguinte código:

'Criando uma nova tabela sem o campo Autonumeração
currentdb.Execute "SELECT Classe,código,seq INTO tblClasse_tmp FROM tblClasse;"
'Acrescentando o campo Autonumeração à nova tabela
currentdb.Execute "ALTER TABLE tblClasse_tmp ADD COLUMN Id AUTOINCREMENT;"
'Deletando a tabela antiga
docmd.DeleteObject acTable ,"tblClasse"
'Renomeando a nova tabela
docmd.Rename "tblClasse",acTable ,"tblClasse_tmp"

A sua tabela está relacionada a outra tabela?

Nota: não esqueça de  fazer antes, um backup de sua base de dados.

Usuário Ricardo:

Olá, Avelino!

Fiz o teste utilizando o currentdb.execute e funcionou bem até criar a nova tabela.  Ao deletar a antiga, apresentou a seguinte mensagem:

"O mecanismo de banco de dados não pôde bloquear a tabela 'TB_TRABALHO', pois ela já está sendo usada por outra pessoa ou processo."

'Criando uma nova tabela sem o campo Autonumeração
CurrentDb.Execute "SELECT trb_codbol,trb_valor INTO TB_TRABALHO_TMP FROM TB_TRABALHO;"
'Acrescentando o campo Autonumeração à nova tabela
CurrentDb.Execute "ALTER TABLE TB_TRABALHO_TMP ADD COLUMN trb_seq AUTOINCREMENT;"
'Acrescentando o campo Autonumeração como chave primária
CurrentDb.Execute "ALTER TABLE TB_TRABALHO_TMP ADD CONSTRAINT pkey PRIMARY KEY (trb_seq);"
'Deletando a tabela antiga
DoCmd.DeleteObject acTable, "TB_TRABALHO"
'Renomeando a nova tabela
DoCmd.Rename "TB_TRABALHO_TMP", acTable, "TB_TRABALHO"

Suporte:

Ricardo,

a mensagem é clara.  A tabela está em uso e portanto não pode ser excluída.  O formulário em questão tem origem na tabela TB_TRABALHO? Se sim, este é o problema.

Usuário Ricardo:

Olá Avelino!

Fiz um formulário simples e não está associado a nenhuma tabela.  O propósito deste formulário é executar o código proposto.  Mesmo assim, o problema acontece.

Criei um banco de teste com dois formulários: - o primeiro utiliza a tabela dentro de um sub-formulário, o segundo executa somente o procedimento mencionado acima.

Suporte:

Ricardo,

como havia previsto, o formulário frmX está associado à tabela tblTrab. É preciso primeiro desvincular o formulário para que funcione.

Segue a modificação do código:

'Desvinculando o formulário
Me.RecordSource = ""
'Criando uma nova tabela sem o campo Autonumeração
CurrentDb.Execute "SELECT tbltrabcli,tbltrabval INTO tbltrab_tmp FROM tbltrab;"
'Acrescentando o campo Autonumeração à nova tabela
CurrentDb.Execute "ALTER TABLE tbltrab_tmp ADD COLUMN tbltrabseq AUTOINCREMENT;"
'Acrescentando o campo Autonumeração como chave primária
CurrentDb.Execute "ALTER TABLE tbltrab_tmp ADD CONSTRAINT pkey PRIMARY KEY (tbltrabseq);"
'Deletando a tabela antiga
DoCmd.DeleteObject acTable, "tbltrab"
'Renomeando a nova tabela
DoCmd.Rename "tbltrab", acTable, "tbltrab_tmp"
'voltando a vincular o formulário
Me.RecordSource = "tbltrab"

Usuário Ricardo:

Olá, Avelino!

Está funcionando!

Mais uma vez, obrigado pela ajuda.


 

 


Não há comentário

Envie seu comentário: