Filtrando itens usando uma comparação de sequência de caracteres

Este tópico descreve o suporte para filtragem em uma propriedade de cadeia de caracteres usando a sintaxe do Microsoft Jet e a sintaxe DASL (Pesquisa e Localização do DAV).

Delimiting Strings and Using Escape Characters

Ao corresponder propriedades de cadeia de caracteres, você pode usar um par de aspas individuais (') ou um par de aspas duplas ("), para delimitar uma cadeia de caracteres que faz parte do filtro. Por exemplo, todas as linhas a seguir funcionam corretamente quando a propriedade é do tipo String:

sFilter = "[CompanyName] = 'Microsoft'"

sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)

In specifying a filter in a Jet or DASL query, if you use a pair of single quotes to delimit a string that is part of the filter, and the string contains another single quote or apostrophe, then add a single quote as an escape character before the single quote or apostrophe. Use a similar approach if you use a pair of double quotes to delimit a string. If the string contains a double quote, then add a double quote as an escape character before the double quote.

Por exemplo, na cadeia de caracteres de filtro DASL que filtra para a propriedade Subject ser igual à palavra can't, toda a cadeia de caracteres de filtro é delimitada por um par de aspas duplas e a cadeia de caracteres can't inserida é delimitada por um par de aspas individuais. Há três caracteres que você precisa escapar nesta cadeia de caracteres de filtro: a cotação dupla inicial e a cotação dupla final para a referência de propriedade de https://schemas.microsoft.com/mapi/proptag/0x0037001f, e o apóstrofo na condição de valor da palavra can't.

A aplicação dos caracteres de escape apropriados permite expressar a cadeia de caracteres de filtro da seguinte forma:

filter = "@SQL=""https://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can''t'"

Como alternativa, você pode usar a chr(34) função para representar a cotação dupla (cujo valor de caractere ASCII é 34) que é usada como um caractere de escape. A substituição chr(34) usada como caractere de escape de aspas duplas permite expressar o último exemplo desta forma:

filter = "@SQL= " & Chr(34) & "https://schemas.microsoft.com/mapi/proptag/0x0037001f" _
    & Chr(34) & " = " & "'can''t'"

O uso de aspas simples e duplas como caracteres de escape também é obrigatório nas consultas DASL com o operador ci_startswith ou ci_phrasematch. Por exemplo, a consulta a seguir executa uma correspondência de frase para can't no assunto da mensagem:

filter = "@SQL=" & Chr(34) & "https://schemas.microsoft.com/mapi/proptag/0x0037001E" _
    & Chr(34) & " ci_phrasematch " & "'can''t'"

Outro exemplo é uma cadeia de caracteres de filtro DASL que filtra a propriedade Subject sendo igual às palavras the right stuff, em que a palavra stuff é fechada por aspas duplas. Nesse caso, você deve usar aspas duplas como escape da seguinte forma:

filter = "@SQL=""https://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff""'"

Um conjunto diferente de regras de escape se aplica a uma referência de propriedades nomeadas que contenham espaço, aspas simples ou aspas duplas. Se a referência de propriedade contiver um desses caracteres, use o escape de URL na propriedade da seguinte forma:

Caractere na referência de propriedade Caractere de escape
Caractere de espaço %20
Aspas duplas %22
Aspas simples %27

Por exemplo, você usaria o filtro a seguir para pesquisar uma propriedade personalizada chamada "Presente" da mamãe que contém a palavra pearls:

filter = "@SQL=" & Chr(34) & _
    "https://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/" _
    & "Mom%27s%20%22Gift%22" & Chr(34) & " like '%pearls%'"

Comparações de sequência de caracteres usando a sintaxe Jet

A comparação de cadeia de caracteres que o Jet filtra é limitada a uma correspondência de equivalência. Você pode filtrar itens com base no valor de uma propriedade de cadeia de caracteres equivalente a uma cadeia de caracteres específica, por exemplo, a propriedade LastName sendo igual a "Wilson". Observe que a comparação não é sensível a casos; no último exemplo, especificando "Wilson" e "wilson" como a cadeia de comparação retornará os mesmos resultados.

Comparações de sequência de caracteres usando a sintaxe DASL

A comparação de sequência de caracteres que os filtros DASL usam inclui correspondência de equivalência, prefixo, frase e subsequência. Lembre-se de que, ao filtrar a propriedade Subject, prefixos como "RE: " e "FW: " são ignorados. Por exemplo...

sFilter = "[Subject] = 'cat'"

... corresponderá a "gato" e "RE: gato".

Correspondência de equivalência

Assim como os filtros Jet, os filtros DASL executam comparação de equivalência de sequência de caracteres usando o operador igual (=). O valor da propriedade de sequência de caracteres deve ser equivalente à sequência de caracteres de comparação, com exceção dos prefixos "RE:" e "FW:", como mencionado acima.

Como exemplo, a consulta DASL a seguir cria um filtro para o nome da empresa igual a 'Microsoft':

criteria = "@SQL=" & Chr(34) _
& "urn:schemas-microsoft-com:office:office#Company" & Chr(34) _
& " = 'Microsoft'"

Como outro exemplo, suponhamos que a pasta na qual está pesquisando contenha itens com os seguintes assuntos:

  • Pergunta
  • Questionável
  • Inquestionável
  • RE: Question
  • The big question

A seguinte = restrição...

criteria = "@SQL=" & Chr(34) _ 
& "urn:schemas:httpmail:subject" & Chr(34) _ 
& " = 'question'"

... retornará os seguintes resultados:

  • Pergunta
  • RE: Question

Correspondência de prefixo, frase e subsequência

O DASL dá suporte à correspondência de prefixos, frases e substrings em uma propriedade de cadeia de caracteres usando palavras-chave do indexador de conteúdo ci_startswith e ci_phrasematch, e o palavra-chave como. Se um armazenamento estiver indexado, pesquisar com palavras-chave do indexador de conteúdo será mais eficiente do que usar like. Se os cenários de pesquisa incluirem correspondência de substring (que as palavras-chave do indexador de conteúdo não dão suporte), use o palavra-chave semelhante em uma consulta DASL.

Uma consulta DASL pode conter ci_startswith ou ci_phrasematch e , por exemplo, mas todas as comparações de cadeia de caracteres serão realizadas como correspondência de substring.

ci_startswith

A sintaxe de ci_startswith é a seguinte...

<PropertySchemaName> ci_startswith <ComparisonString> 

... em que PropertySchemaName é um nome válido de uma propriedade referenciada pelo namespace e ComparisonString é a cadeia de caracteres usada para comparação.

ci_startswith executa uma pesquisa para correspondência de prefixos. Ela usa tokens (caracteres, palavra ou palavras) na sequência de caracteres de comparação para comparar com os primeiros caracteres de qualquer palavra no valor de sequência de caracteres da propriedade indexada. Se a cadeia de comparação contiver vários tokens, cada token na cadeia de caracteres de comparação deverá ter uma correspondência de prefixo na propriedade indexada. Por exemplo:

  • Usar "mar" como restrição encontraria como correspondente "marinho"
  • Usar "mar" como restrição não encontraria como correspondente "remar"
  • Usar "mar" como restrição encontraria como correspondente "Assunto: o mar azul"
  • Usar "lei ordem" como restrição encontraria como correspondente "lei e ordem"
  • Usar "lei e ordem" como restrição encontraria como correspondente "Eu gosto do show Lei e ordem"
  • Usar "lei e ordem" como restrição não encontraria como correspondente "acima da lei"
  • Usar "criaturas marinhas" como restrição encontraria como correspondente "Especial sobre criaturas marinhas"
  • Usar "criaturas marinhas" como restrição encontraria como correspondente "criaturas de vida marinha"
  • Usar "criaturas marinhas" como restrição não encontraria como correspondente "criaturas do fundo do mar"

Usando o exemplo mencionado na correspondência de equivalência, suponhamos que a pasta na qual está pesquisando contenha itens com os seguintes assuntos:

  • Pergunta
  • Questionável
  • Inquestionável
  • RE: Question
  • The big question

A seguinte restrição de ci_startswith ...

criteria = "@SQL=" & Chr(34) _ 
& "urn:schemas:httpmail:subject" & Chr(34) _ 
& " ci_startswith 'question'" 

... retornará os seguintes resultados:

  • Pergunta
  • Questionável
  • RE: Question
  • The big question

ci_phrasematch

A sintaxe de ci_phrasematch é a seguinte...

<PropertySchemaName> ci_phrasematch <ComparisonString> 

... em que PropertySchemaName é um nome válido de uma propriedade referenciada pelo namespace e ComparisonString é a cadeia de caracteres usada para comparação.

ci_phrasematch executa uma pesquisa para encontrar frases correspondentes. Ela usa tokens (caracteres, palavra ou palavras) na sequência de caracteres de comparação para encontrar palavras inteiras correspondentes no valor de sequência de caracteres da propriedade indexada. Os tokens são colocados entre aspas duplas ou parênteses. Cada token da sequência de caracteres de comparação deve ter uma correspondência de equivalência e não de subsequência ou de prefixo. Se a cadeia de comparação contiver vários tokens, cada token na cadeia de caracteres de comparação deverá ter uma correspondência de frase. Qualquer palavra dentro de uma propriedade de várias palavras, como Assunto ou Corpo , pode corresponder; não precisa ser a primeira palavra. Por exemplo:

  • Usar "gato" como restrição encontraria como correspondente "gato", "caixa de gato", "gato preto"
  • Usar "gato" como restrição encontraria como correspondente "re: o gato está fora"
  • Usar "gato" como restrição não encontraria como correspondente "agatologia", "gatona"
  • Usar "doce aroma" encontraria como correspondente "sinta o doce aroma"
  • Usar "doce aroma" não encontraria como correspondente "excelente doce aromatizado"

Usando o exemplo mencionado na correspondência de equivalência, suponhamos que a pasta na qual está pesquisando contenha itens com os seguintes assuntos:

  • Pergunta
  • Questionável
  • Inquestionável
  • RE: Question
  • The big question

A seguinte restrição de ci_phrasematch ...

criteria = "@SQL=" & Chr(34) _ 
& "urn:schemas:httpmail:subject" & Chr(34) _ 
& " ci_phrasematch 'question'" 

... retornará os seguintes resultados:

  • Pergunta
  • RE: Question
  • The big question

como

like executa correspondência de prefixo, subsequência ou equivalência. Os tokens (caracteres, palavra ou palavras) são colocados entre caracteres % de uma maneira específica, dependendo do tipo de correspondência:

correspondência do prefixo

  like '<token>%'

Por exemplo, restringir para...

  like 'cat%'

... corresponderia a "gato" e "catálogo".

correspondência de substring

  like '%<token>%'

Por exemplo, restringir para...

  like '%cat%'

... corresponderia a "cat", "catalog", "kittycat", "decathlon".

correspondência de equivalência

  like '<token>'

Por exemplo, restringir para...

  like 'cat'

... corresponderia a "cat" e "RE: Cat".

Cada token pode corresponder a qualquer parte de uma palavra em uma propriedade de sequência de caracteres. Se a sequência de caracteres de comparação contiver vários tokens, cada um deles deverá ter uma correspondência de subsequência. Qualquer palavra em uma propriedade de várias palavras como Subject ou Body pode corresponder; não é preciso ser a primeira palavra.

Usando o exemplo mencionado na correspondência de equivalência, suponhamos que a pasta na qual está pesquisando contenha itens com os seguintes assuntos:

  • Pergunta
  • Questionável
  • Inquestionável
  • RE: Question
  • The big question

O seguinte, como restrição...

criteria = "@SQL=" & Chr(34) _ 
& "urn:schemas:httpmail:subject" & Chr(34) _ 
& " like '%question%'" 

... retornará os seguintes resultados:

  • Pergunta
  • Questionável
  • Inquestionável
  • RE: Question
  • The big question

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.