Access inicio | | | | | |
Olá,
Seja Bem Vindo ao Blog.

Conecte-se ou registre-se e utilize gratuitamente este equipamento, temos exemplos referente a criação de banco de dados e desenvolvimento de softwares e programas utilizando o Microsoft Access.


Administração do Blog AccessDoProgramador.

Access e VBA, loop Localizar e Substituir

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

13092012

Mensagem 

Access e VBA, loop Localizar e Substituir






Depois de alguns meses que o sistema estava funcionando, apareceu o seguinte cenário:

No campo bairro, os usuários acabaram escrevendo uma palavra de duas maneiras diferente. Deixo explicar expondo apenas uma das situações :

Alguns escreveram no campo bairro: BRASILIA com S e outros BRAZILIA com Z

A tabela com mais de 8.000 registros é insano fazer algo manual de um por um para uma uniformização.

A solução então foi por algoritmo, então escrevi o seguinte para percorrer a tabela e Substituir BRAZILIA por BRASILIA:

'By Dilson Marcos ® 2011-2012 AccessDoProgramador
--------------------------------------------------------------
'Inicio o tratamento de erros
On Error GoTo TratareiErro


'Declaro a variável que referenciará o recordset
Dim Rs As
DAO.Recordset
'Declaro a variável que armazenará o texto que será substituído
Dim Substituir
As String
'Declaro a variável que armazenará o texto a substituir o outro
Dim Por As String
'Declaro a variável que contabilizará o total de registros no recordset
Dim Contador
As Long
'Declaro a variável que armazenará as passadas pelo loop
'usando a estrutura for next em relação ao contador
Dim ContaMove As Long
'Declaro a variável que armazenará a quantidade de registros
'modificados a cada passada do loop
Dim ContaSubst As Long


'Instancio o recordset, com isso obtenho o conjunto
'de registros

Set Rs = CurrentDb.OpenRecordset("TabelaExemplo")


'Armazeno na variável o valor que será substituido
Substituir = "BRAZILIA"


'Armazeno na variável o valor que substituirá o valor
'da variável 'Substituir'

Por = "BRASILIA"


'Armazeno zero na variável que contará as substituições.
'A cada passada do loop ela receberá um valor

ContaSubst = 0


'Armazeno na variável a quantidade de registros do recordset
Contador = Rs.RecordCount


'Abro a barra de progresso nativa do pacote office
SysCmd acSysCmdInitMeter, "Aguarde a finalização...", Contador


'Armazeno 1 na variável ContaMove e a cada passada do loop seu
'valor evolui 'em + 1', quando chegar no ultimo valor da variável
'Contador o loop se completa

For ContaMove = 1 To Contador


'Atualizo a progressão da barra de progresso do office
SysCmd acSysCmdUpdateMeter, ContaMove


'Analiso com o if se na passada pelo registro o valor
'de bairro = "BRAZILIA"

If Rs("bairro") = Substituir Then 'Se for igual então:


'Armazeno + 1 na variável ContaSubst
ContaSubst = ContaSubst + 1
'Abro o registro para edição

Rs.Edit
'Susbstituo o valor atual de bairro por "BRASILIA"
Rs("bairro") = Por
'Atualizo o registro
Rs.Update
'Movo ao próximo
Rs.MoveNext


Else

'Senão movo a frente
Rs.MoveNext
End If


'Passo a frente em ContaMove, com isso iniciaremos de novo lá em cima
'a partir do 'For ContaMove' em uma nova passada em um novo registro

Next ContaMove


'Fecho o recordset, uma vez que não o percorrerei mais.
Rs.Close


'Removo a barra de progresso
SysCmd acSysCmdRemoveMeter


'Aqui analiso a quantidade de substituições
If ContaSubst > 1 Then


'Se foi mais que um registro modificado, envio uma mensagem no plural
MsgBox "OK Total de: " & Contador & " registros. Realizado " _
& ContaSubst & " substituições."
Else
'Se não envio no singular
MsgBox "OK Total de: " & Contador & " registros. Realizado " _
& ContaSubst & " substituição."

End If


'Se o algoritmo funcionou, então encerro o tratamento de erro
Exit_TratareiErro:
Exit Sub


'Se algo inesperado acontecer e impedir o correto funcionamento do algoritmo
'Então disparo o tratamento de erro

TratareiErro:
MsgBox "Aconteceu falha neste processamento." _
& vbCrLf & "Trata-se do erro n°: " & Err.Number _
& vbCrLf & "Descrição: " _
& Err.Number, vbInformation, "Erro inesperado"

Exit Sub
-------------------------------------------------------------
As variáveis "Substituir" e "Por" bem que poderiam receber os valores por TextBox através da digitação do usuário, mas isso já é outra história pra você avaliar e decidir como vai implementar este algoritmo em seus desafios.

Pratique.
Baixar o exemplo:
Download

Até!study


avatar
Dilson
Facilitador
Facilitador

Brasil


http://www.dadosweb.com

Voltar ao Topo Ir em baixo

- Tópicos similares
Compartilhar este artigo em: BookmarksDiggRedditDel.icio.usGoogleLiveSlashdotNetscapeTechnoratiStumbleUponNewsvineFurlYahoo!Smarking

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum