Apaixonado por tecnologia. Trabalho com tecnologia desde 2003.

Saiba mais sobre minha vida profissional aqui .

Fale comigo.
Siga-me no Twitter
Ultimos comentários
Calendário de Posts
<<  setembro 2017  >>
stqqssd
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

Siga o @DicaDoNerd no Twitter e acompanhe as novidades


Minato , Criado em 05/06/2010, 08:57

Durante muito tempo fiz aquelas funções mirabolantes para validação, recuperar apenas números, apenas textos e etc. Com a compreensão do Regex, estas tarefas foram sendo facilitadas, vou iniciar uma série de informações sobre Regex (Regular-Expression). Vamos utilizar a biblioteca “Microsoft VBScript Regular Expression 5.5” que está em “c:\Windows\system32\vbscript.dll”.

Vamos iniciar selecionando a referência no projeto:

referencia_vbscript

Ao incluir a referência, conseguimos acessar as classes, RegExp, Match, MatchCollection e etc.

Agora vamos imagina que queremos, em uma expressão (String) recuperar somente os caracteres numéricos. Bastaria indicarmos que queremos apenas números para o pattern do Regex. Vamos ver na prática como funciona.

Option Compare Database
Option Explicit



Public Sub Testar()

MsgBox (SomenteNumeros("Alexandre Minato 123----++adasjdlak"))

End Sub



Public Function SomenteNumeros(Expressao As String) As Integer

Dim regex As RegExp
Dim encontrados As MatchCollection

Set regex = New RegExp
regex.Global = True 'Indico que as configurações servirão para todos os métodos da classe
regex.IgnoreCase = True 'Ignoro Case Sensitive
regex.Pattern = "[0-9]" 'Indico que quero apenas números de "0 até 9"

Set encontrados = regex.Execute(Expressao) 'seto a instancia da classe com a execução do Regex

Dim strRetorno As String
Dim encontrado As Match

For Each encontrado In encontrados

'Concateno a string com o resultado
strRetorno = strRetorno + encontrado.Value
Next

SomenteNumeros = CInt(strRetorno)

End Function

SomenteNumeros("Alexandre Minato 123----++adasjdlak"))

End Sub

Public Function SomenteNumeros(Expressao As String) As Integer

Dim regex As RegExp
Dim encontrados As MatchCollection

Set regex = New RegExp
regex.Global = True 'Indico que as configurações servirão para todos os métodos da classe
regex.IgnoreCase = True 'Ignoro Case Sensitive
regex.Pattern = "[0-9]" 'Indico que quero apenas números de "0 até 9"

Set encontrados = regex.Execute(Expressao) 'seto a instancia da classe com a execução do Regex

Dim strRetorno As String
Dim encontrado As Match

For Each encontrado In encontrados

'Concateno a string com o resultado
strRetorno = strRetorno + encontrado.Value
Next

SomenteNumeros = CInt(strRetorno)

End Function

Beleza, até agora apenas uma forma diferente de verificar números, porém, e se quisermos criar um método que retorne apenas String? Tradicionalmente faríamos uma lógica que faria um for, verificaria se é número e não concatenaria. Com regex bastaria alterarmos o Pattern, que ficaria assim:

regex.Pattern = “^[0-9]”

Pronto! Pois, o “^” indica negação, ou seja, tudo que não for digito (numero) de 0 à 9.

Agora vamos um pouco além. Imagine que você tem um gerador de relatório, com vários formatos. Imagine o trabalho para configurar cada relatório, com padrões totalmente diferente, completar com espaço, com zeros, com quaiquer caracteres. Imagine se você pudesse fazer algo assim:

Suponha que sua Tabela seja tbCliente e que tenha os campos IDCliente, NomeCliente, DataNascimento.

e que pudesse simplesmente definir o formato, como por exemplo:

Select: Select * from tbCliente

Formato: {IDCliente:0000}{NomeCliente:!@           }{DataNascimento:dd/mm/yyyy}

Como você faria isso?… no próximo artigo vou mostrar como podemos fazer isso de uma forma muito simples!

Até a próxima.

Uma grande dificuldade que desenvolvedores em Acces tem é quando é necessário trabalhar com busca em todos os campos, para facilitar o trabalho eu utilizo um modelo padrão para as aplicações que desenvolvo (ultimamente não desenvolvo mais em VBA, Access, VB), mas confesso que sempre adorei e acho uma das ferramentas mais produtivas e que conto nos dedos as pessoas que conhecem de verdade esta ótima ferramenta.

A vantagem de utilizar esta solução é que basta você incluir um campo vinculado no formulário e o método se localização faz o resto :-)

A idéia é bem simples, vou concatenando a string da busca e montando um like de acordo com os controles que existe na tela. Segue o exemplo:

   1: Private Sub LocalizarTodosCampos()
   2:     'O código abaixo, localiza o critério em qualquer campo do formulário
   3:     'Cortesia de Alexandre Minato
   4:     'Permitida a distribuição / utilização desde que mantido os créditos
   5:     
   6:     If Me.txtFiltro = "<Informe o Filtro>" Then Exit Sub
   7:  
   8:     Dim sql As String
   9:     sql = "SELECT * FROM tblCadastro "
  10:  
  11:  
  12:     Dim contador As Byte
  13:     contador = 0
  14:  
  15:     If Not IsNull(Me.txtFiltro) Then
  16:         sql = sql + " WHERE "
  17:         Dim ctl As Control
  18:         For Each ctl In Me.Controls
  19:             
  20:             If ctl.ControlType = acTextBox Then
  21:                 If Len(ctl.ControlSource) > 0 And ctl.Locked = False Then
  22:                     If contador > 0 Then sql = sql + " OR "
  23:                         sql = sql + "(" + ctl.ControlSource + " Like '*' & '" + Me.txtFiltro + "' & '*') "
  24:                         contador = contador + 1
  25:                 End If
  26:             End If
  27:         Next
  28:     
  29:     End If
  30:  
  31: Me.Form.RecordSource = sql
  32: Me.Recalc
  33: End Sub

 

O resultado da pesquisa pode ser visto abaixo:

Sem título

Bom, podemos ver um Toolip personalizado também que encontrei  neste site.

 

Até a próxima

Minato 8-)

Baixe e Exemplo

 
teste