Zerar um campo, tipo Numeração Automática
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
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 |