... 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.


Como numerar itens em formulários

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:

Usando Access - Numerar Itens formulário

 

A função é aplicada diretamente na propriedade do campo que irá receber a numeração.  Observe na imagem abaixo:

Usando Access - Propriedade Origem do Controle

 

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.

Usando Access - Ordenação e filtragens

 

Funciona em Sub Formulários

Funciona muito bem em sub formulários. Veja na imagem abaixo:

Usando Access - Numerar itens em sub formulário

 

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!


 

 


12 comentário(s)

Eduardo Rubio   04/12/2012 13:26:59

Muito bom esse exemplo.... parabens....e obrigdo por compartilhar conosco... sucesso !!!

Eduardo Rubio   04/12/2012 13:30:26

Tem como fazer isso num relatorio?

Jefferson Almeida   04/03/2013 20:18:15

Como faço para passar essa numeração direto para a tabela?

Avelino Sampaio   05/03/2013 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!

Ramon   14/05/2013 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?

Avelino Sampaio   15/05/2013 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!

Amilton   08/01/2014 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

Diogo Susewind   11/05/2014 11:20:48

Muito obrigado, sempre eficiente e objetivo
me ajudou mais uma vez
Parabéns!

Deus abençoe!

Walter   02/09/2015 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

Paulo de Tarso.   26/02/2016 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,

Avelino Sampaio   27/02/2016 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

Fausto Cormack   12/09/2017 18:00:55

Código simples e eficiente!
Parabéns e obrigado por compartilhar.


Envie seu comentário: