Filtrage d'éléments à l'aide d'une comparaison de chaînes

Cette rubrique décrit la prise en charge du filtrage sur une propriété de chaîne à l’aide de la syntaxe Microsoft Jet et de la syntaxe DASL (DAV Searching and Locating).

Délimitation de chaînes et utilisation de caractères d’échappement

Lors de la mise en correspondance de propriétés de chaîne, vous pouvez utiliser une paire de guillemets simples (') ou une paire de guillemets doubles (« ), pour délimiter une chaîne qui fait partie du filtre. Par exemple, toutes les lignes suivantes donnent des résultats corrects lorsque la propriété est de type String :

sFilter = "[CompanyName] = 'Microsoft'"

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

Lors de la spécification d’un filtre dans une requête Jet ou DASL, si vous utilisez une paire d’apostrophes simples pour délimiter une chaîne qui fait partie du filtre et que la chaîne contient une autre apostrophe, vous devez ajouter une apostrophe simple en tant que caractère d’échappement devant l’apostrophe simple. Utilisez une approche similaire si vous utilisez une paire de guillemets doubles pour délimiter une chaîne. Si la chaîne contient des guillemets doubles, ajoutez des guillemets doubles en tant que caractère d’échappement devant les guillemets doubles.

Par exemple, dans la chaîne de filtre DASL qui filtre pour que la propriété Subject soit égale au mot can't, la chaîne de filtre entière est délimitée par une paire de guillemets doubles, et la chaîne can't incorporée est délimitée par une paire de guillemets simples. Cette chaîne de filtre contient trois caractères : le guillemet double de début et le guillemet double de fin pour la référence de propriété de https://schemas.microsoft.com/mapi/proptag/0x0037001f, et l’apostrophe dans la condition de valeur pour le mot can't.

En appliquant les caractères d'échappement appropriés, vous pouvez exprimer la chaîne de filtre comme suit :

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

Vous pouvez également utiliser la chr(34) fonction pour représenter le guillemet double (dont la valeur de caractère ASCII est 34) utilisé comme caractère d’échappement. À l’aide de la substitution chr(34) pour représenter un guillemet double en tant que caractère d’échappement, vous pouvez exprimer le dernier exemple en procédant comme suit :

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

Vous devez aussi utiliser des guillemets simples et doubles en tant que caractères d’échappement pour les requêtes DASL avec les opérateurs ci_startswith ou ci_phrasematch. Par exemple, la requête suivante effectue une requête de correspondance d’expression pour can't dans l’objet du message :

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

Un autre exemple est une chaîne de filtre DASL qui filtre la propriété Subject comme étant égale aux mots the right stuff, où le mot stuff est entouré de guillemets doubles. Dans ce cas, vous devez ajouter des caractères d'échappement pour les guillemets doubles comme suit :

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

Un ensemble différent de règles d'échappement s'appliquent aux références des propriétés nommées qui contiennent des espaces, des guillemets simples ou des guillemets doubles. Si une référence de propriété contient un espace, un guillemet simple ou un guillemets double, vous devez utiliser l’échappement d’URL (Universal Resource Locator) dans la référence de propriété comme suit :

Charactère figurant dans la référence de propriété Caractère d’échappement
Espace %20
Guillemet double %22
Guillemet simple %27

Par exemple, vous pouvez utiliser le filtre suivant pour rechercher une propriété personnalisée nommée Mom’s « Gift » qui contient le mot 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%'"

Comparaisons de chaînes avec la syntaxe Jet

La comparaison de chaînes prise en charge par les filtres Jet est limitée à une correspondance d’équivalence. Vous pouvez filtrer des éléments en fonction de la valeur d’une propriété de chaîne équivalente à une chaîne spécifique, par exemple, la propriété LastName étant égale à « Wilson ». Notez que la comparaison ne respecte pas la casse ; dans le dernier exemple, en spécifiant « Wilson » et « wilson » comme chaîne de comparaison, vous obtiendrez les mêmes résultats.

Comparaisons de chaînes avec la syntaxe DASL

Parmi les différents types de comparaisons de chaînes pris en charge par les filtres DASL, on peut citer la mise en correspondance d'équivalences, de préfixes, d'expressions et de sous-chaînes. Notez que lorsque vous effectuez un filtrage au niveau de la propriété Subject, les préfixes tels que « RE : » et « TR : » sont ignorés. Par exemple...

sFilter = "[Subject] = 'cat'"

... correspondra à la fois à « cat » et à « RE : cat ».

Mise en correspondance d'équivalences

À l'instar des filtres Jet, les filtres DASL comparent l'équivalence des chaînes en utilisant l'opérateur égal (=). La valeur de la propriété de type chaîne doit être équivalente à la chaîne de comparaison, à l'exception des préfixes « RE : » et « TR : », comme indiqué précédemment.

Par exemple, la requête DASL suivante crée un filtre pour le nom de la société égal à « Microsoft » :

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

Autre exemple : supposons que le dossier dans lequel vous effectuez la recherche contienne des éléments avec les objets suivants :

  • Question
  • Douteuse
  • Incontestable
  • RE : Question
  • La question phare

L’élément suivant = restriction...

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

... retourne les résultats suivants :

  • Question
  • RE : Question

Mise en correspondance de préfixes, d'expressions et de sous-chaînes

DASL prend en charge la mise en correspondance de préfixes, d’expressions et de sous-chaînes dans une propriété de chaîne à l’aide de mots clés d’indexeur de contenu ci_startswith et ci_phrasematch, ainsi que des mot clé similaires. Si une banque d'information est indexée, une recherche à l'aide des mots clés d'indexation de contenu s'avère plus efficace qu'avec le mot clé like. Si vos scénarios de recherche incluent la correspondance de sous-chaîne (que les mots clés de l’indexeur de contenu ne prennent pas en charge), utilisez le mot clé semblable dans une requête DASL.

Une requête DASL peut contenir des ci_startswith ou des ci_phrasematch et similaires, mais toutes les comparaisons de chaînes sont effectuées en tant que correspondance de sous-chaîne.

ci_startswith

La syntaxe de ci_startswith est la suivante...

<PropertySchemaName> ci_startswith <ComparisonString> 

... où PropertySchemaName est un nom valide d’une propriété référencée par l’espace de noms et ComparisonString est la chaîne utilisée pour la comparaison.

ci_startswith exécute une recherche pour mettre en correspondance les préfixes. Il utilise des jetons (des caractères, un ou plusieurs mots) dans la chaîne de comparaison pour établir une correspondance avec les premiers caractères d'un mot présent dans la valeur de chaîne de la propriété indexée. Si la chaîne de comparaison contient plusieurs jetons, chaque jeton de la chaîne de comparaison doit avoir une correspondance de préfixe dans la propriété indexée. Par exemple :

  • Une restriction sur le mot « mer » renverrait « merci »
  • Une restriction sur le mot « mer » ne renverrait pas « remerciements »
  • Une restriction sur le mot « mer » renverrait « Objet : mer émeraude »
  • Une restriction sur « Martin Durand » renverrait « Martin et Durand » ou « Martin & Durand »
  • Une restriction sur « Martin et Durand » renverrait « Veuillez contacter messieurs Martin et Durand. »
  • Une restriction sur « Martin et Durand » ne renverrait pas « Appelez monsieur Martin »
  • Une restriction sur « créatures marines » renverrait « Reportage spécial sur les créatures marines »
  • Une restriction sur « créatures marines » renverrait « créatures sous-marines »
  • Une restriction sur « créatures marines » ne renverrait pas « faune marine »

Pour reprendre l'exemple de la section Mise en correspondance d'équivalences, supposons que le dossier dans lequel vous effectuez une recherche contienne des éléments avec les objets suivants :

  • Question
  • Douteuse
  • Incontestable
  • RE : Question
  • La question phare

La restriction ci_startswith suivante...

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

... retourne les résultats suivants :

  • Question
  • Douteuse
  • RE : Question
  • La question phare

ci_phrasematch

La syntaxe de ci_phrasematch est la suivante...

<PropertySchemaName> ci_phrasematch <ComparisonString> 

... où PropertySchemaName est un nom valide d’une propriété référencée par l’espace de noms et ComparisonString est la chaîne utilisée pour la comparaison.

ci_phrasematch exécute une recherche pour mettre en correspondance des expressions. Il utilise des jetons (des caractères, un ou plusieurs mots) dans la chaîne de comparaison pour établir une correspondance avec des mots entiers présents dans la valeur de chaîne de la propriété indexée. Les jetons sont entre guillemets ou entre parenthèses. Chaque jeton situé dans la chaîne de comparaison doit avoir une correspondance de phrase, et non une correspondance de sous-chaînes ou de préfixes. Si la chaîne de comparaison contient plusieurs jetons, chaque jeton de la chaîne de comparaison doit avoir une correspondance d’expression. N’importe quel mot d’une propriété de plusieurs mots comme Subject ou Body peut correspondre ; Il n’est pas nécessaire que ce soit le premier mot. Par exemple :

  • Une restriction sur le mot « chat » renverrait « chat », « chat noir», « quel beau chat »
  • Une restriction sur le mot « chat » renverrait « re : le chat a fugué »
  • Une restriction sur le mot « chat » ne renverrait pas « chaton », « rachat »"
  • Une restriction sur « chat noir » renverrait « le chat noir a disparu »
  • Une restriction sur « chat noir » ne renverrait pas « superbe chat noirâtre »

Pour reprendre l'exemple de la section Mise en correspondance d'équivalences, supposons que le dossier dans lequel vous effectuez une recherche contienne des éléments avec les objets suivants :

  • Question
  • Douteuse
  • Incontestable
  • RE : Question
  • La question phare

La restriction ci_phrasematch suivante...

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

... retourne les résultats suivants :

  • Question
  • RE : Question
  • La question phare

comme

like effectue une mise en correspondance de préfixes, de sous-chaînes ou d'équivalences. Le caractère % est placé de part et d'autre des jetons (des caractères, un ou plusieurs mots) d'une manière spécifique qui dépend du type de la mise en correspondance :

correspondance de préfixe

  like '<token>%'

Par exemple, la restriction pour...

  like 'cat%'

... correspondrait à « cat » et « catalog ».

correspondance de sous-chaîne

  like '%<token>%'

Par exemple, la restriction pour...

  like '%cat%'

... correspondrait à « cat », « catalog », « kittycat », « decathlon ».

correspondance d’équivalence

  like '<token>'

Par exemple, la restriction pour...

  like 'cat'

... correspondrait à « cat » et « RE : Cat ».

Chaque jeton peut correspondre à n'importe quelle partie d'un mot présent dans la propriété de type chaîne. Si la chaîne de comparaison contient plusieurs jetons, chacun de ces jetons doit avoir une correspondance de sous-chaînes. Tout mot présent dans une propriété à plusieurs mots comme Subject ou Body peut avoir une correspondance ; il ne s'agit pas nécessairement du premier mot.

Pour reprendre l'exemple de la section Mise en correspondance d'équivalences, supposons que le dossier dans lequel vous effectuez une recherche contienne des éléments avec les objets suivants :

  • Question
  • Douteuse
  • Incontestable
  • RE : Question
  • La question phare

Comme la restriction suivante...

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

... retourne les résultats suivants :

  • Question
  • Douteuse
  • Incontestable
  • RE : Question
  • La question phare

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.