Como numerar itens em formulários
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.
Modelo de consulta prejudicial ao desempenho
Vejo muitos colegas programadores aplicarem a técnica de numerar os itens pela consulta, para então, ser aplicado ao formulário, o que traz um prejuízo enorme ao desempenho do aplicativo quando este é utilizado em um ambiente de rede. A razão de contribuir para baixar o desempenho do aplicativo é que a consulta é obrigada a realizar várias viagens à tabela para obter a contagem.
Veja abaixo, um exemplo deste tipo de consulta:
SELECT (SELECT COUNT(*)+1 FROM SuaTabela x WHERE x.SeuCampo < y.SeuCampo) AS Numeracao, y.* FROM SuaTabela AS y;
Portanto, não use este tipo de consulta, em hipótese alguma!
Utilizando os registros já presentes no formulário
A técnica consiste em Clonar os registros já presentes no formulário e então realizar a contagem. Assim evitamos excursões desnecessárias à tabela do back-end, contribuindo para um melhor desempenho do aplicativo.
Observe abaixo o código utilizado para um formulário:
Public Function fncNumerar(frm As Form) As Long On Error GoTo TrataErro With frm.RecordsetClone .Bookmark = frm.Bookmark fncNumerar = 1 + .AbsolutePosition End With Exit Function TrataErro: If Err = 3021 Then fncNumerar = 0 End Function
Veja na imagem abaixo, os itens sendo numerados:
A função é aplicada diretamente na propriedade do campo que irá receber a numeração. Observe na imagem abaixo:
Mais vantagens
Outras duas grandiosas vantagens no uso deste código é a possibilidade de se utilizar a ordenação e as filtragens nativas do Access.
Ao baixar o exemplo, altere a ordenação e realize filtragens para você poder observar o resultado da numeração.
Funciona em Sub Formulários
Funciona muito bem em sub formulários. Veja na imagem abaixo:
Como numerar em relatórios
A técnica é diferente e bem mais fácil de ser implementada. Veja aqui neste meu tutorial!
Baixar o arquivo exemplo
Sucesso!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Adquira o kit UsandoAccess e aprenda em alta velocidade
13 comentário(s) luciano ricardo rocha de souza 12/08/2023 13:20:17 infelizmente não funcionou no meu subformulário. O problema talvez seja na localização da função. Onde devo coloca-la? Fausto Cormack 12/09/2022 18:00:55 Código simples e eficiente! Parabéns e obrigado por compartilhar. Walter 02/09/2022 10:19:24 Olá, gostaria de saber porque essa função não funciona no meu subform mesmo eu tendo feito exatamente como instruiu. Vou deixar aqui o link do meu form https://mega.nz/#!IYhyTLCb!q6oI6dqvDfJq0AgFQYDB6ScS9D7h-CaMq3L-f9naAjY Avelino Sampaio 27/02/2022 07:44:27 Paulo, para numerar em relatório é bem mais simples. Vá no meu tutorial "Somar, contar e numerar em relatórios" e veja como se faz. Aproveite e se inscreva no meu fórum e poste lá também suas dúvidas: http://www.redeaccess.com.br Paulo de Tarso. 26/02/2022 21:13:58 Grande Avelino.... Saudações... Para o código abaixo funcionar em relatório onde tenho que alterar no código ? Option Compare Database Dim op$ Dim k% Public Function fncNumerar(frm As Form) As Long On Error GoTo TrataErro With frm.RecordsetClone .Bookmark = frm.Bookmark If op <> .Operadora Then op = .Operadora k = .AbsolutePosition End If fncNumerar = 1 + .AbsolutePosition - k End With Exit Function TrataErro: If Err = 3021 Then fncNumerar = 0 End Function Desde já agradeço, Eduardo Rubio 04/12/2021 13:30:26 Tem como fazer isso num relatorio? Eduardo Rubio 04/12/2021 13:26:59 Muito bom esse exemplo.... parabens....e obrigdo por compartilhar conosco... sucesso !!! Avelino Sampaio 15/05/2021 10:45:55 Ramon, com base na função do exemplo, veja se atende: Option Compare Database Dim op$ Dim k% Public Function fncNumerar(frm As Form) As Long On Error GoTo TrataErro With frm.RecordsetClone .Bookmark = frm.Bookmark If op <> .Operadora Then op = .Operadora k = .AbsolutePosition End If fncNumerar = 1 + .AbsolutePosition - k End With Exit Function TrataErro: If Err = 3021 Then fncNumerar = 0 End Function Sucesso! Ramon 14/05/2021 09:56:41 Avelino, bom dia. Seria possivel com esse recurso fazer um contador, por exemplo. No grupo de registro do Ademir abreu, na coluna informar: TIM = 01 Claro = 01 Claro = 02 GVT = 1 VIVO = 1 NEXTEL = 1 NEXTEL = 2 Não sei se fui claro......mas para cada operadora novamente zerar e ir incrementando.....é possivel? Diogo Susewind 11/05/2021 11:20:48 Muito obrigado, sempre eficiente e objetivo me ajudou mais uma vez Parabéns! Deus abençoe! Avelino Sampaio 05/03/2021 07:32:24 Jefferson, copie e cole o link abaixo no seu navegador. http://maximoaccess.maisforum.com/t11275-resolvidonumerar-caixa-de-listagem-nao-acoplada No exemplo que forneço, mostro uma técnica para armazenar a numeração na tabela. Sucesso! Jefferson Almeida 04/03/2021 20:18:15 Como faço para passar essa numeração direto para a tabela? Amilton 08/01/2021 19:16:00 Boa Tarde Avelino , bom ano para voçê e todos que utilizam este excelente site Gostaria de saber como faço para excluir 1 item do subform que esta usando a função numerar? Att Amilton |