Filtern von Elementen mithilfe eines Zeichenfolgenvergleichs

In diesem Thema wird die Unterstützung für das Filtern nach einer Zeichenfolgeneigenschaft mithilfe der Microsoft Jet-Syntax und der DASL-Syntax (DAV Searching and Locating) beschrieben.

Trennen von Zeichenfolgen und Verwenden von Escapezeichen

Beim Vergleichen von Zeichenfolgeneigenschaften können Sie entweder ein Paar einzelner Anführungszeichen (') oder ein Paar doppelte Anführungszeichen ("") verwenden, um eine Zeichenfolge zu trennen, die Teil des Filters ist. Die folgenden Zeilen können bei einer Eigenschaft vom Typ String ordnungsgemäß ausgeführt werden:

sFilter = "[CompanyName] = 'Microsoft'"

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

Wenn Sie beim Festlegen eines Filters in einer Jet- oder DASL-Abfrage zum Begrenzen einer Zeichenfolge, die Teil des Filter ist, ein Paar einfache Anführungszeichen verwenden und die Zeichenfolge ein weiteres einfaches Anführungszeichen oder ein Apostroph enthält, fügen Sie vor dem einfachen Anführungszeichen oder dem Apostroph ein einfaches Anführungszeichen als Schutzzeichen hinzu. Verwenden Sie einen ähnlichen Ansatz, wenn Sie ein Paar doppelter Anführungszeichen verwenden, um eine Zeichenfolge zu trennen. Wenn die Zeichenfolge ein doppeltes Anführungszeichen enthält, fügen Sie ein doppeltes Anführungszeichen als Schutzzeichen vor dem doppelten Anführungszeichen hinzu.

Beispielsweise wird in der DASL-Filterzeichenfolge, die filtert, dass die Subject-Eigenschaft gleich dem Wort can'tist, die gesamte Filterzeichenfolge durch ein Paar von doppelten Anführungszeichen getrennt, und die eingebettete Zeichenfolge can't wird durch ein Paar einzelner Anführungszeichen getrennt. In dieser Filterzeichenfolge müssen drei Zeichen mit Escapezeichen versehen werden: das beginnende doppelte Anführungszeichen und das endende doppelte Anführungszeichen für den Eigenschaftenverweis von https://schemas.microsoft.com/mapi/proptag/0x0037001fund das Apostroph in der Wertbedingung für das Wort can't.

Durch Anwendung der geeigneten Escapezeichen kann die Filterzeichenfolge wie folgt ausgedrückt werden:

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

Alternativ können Sie die chr(34) -Funktion verwenden, um das doppelte Anführungszeichen (dessen ASCII-Zeichenwert 34 ist) darzustellen, das als Escapezeichen verwendet wird. Unter Verwendung der chr(34)-Ersetzung für ein doppeltes Anführungszeichen als Escapezeichen können Sie das letzte Beispiel wie folgt ausdrücken:

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

Das Escapen von einfachen und doppelten Anführungszeichen ist ebenfalls in DASL-Abfragen mit den Operatoren ci_startswith und ci_phrasematch erforderlich. Folgende Abfrage führt beispielsweise eine Begriffvergleichsabfrage für can't im Nachrichtenbetreff aus:

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

Ein weiteres Beispiel ist eine DASL-Filterzeichenfolge, die filtert, wenn die Subject-Eigenschaft gleich den Wörtern the right stuffist, wobei das Wort stuff in doppelte Anführungszeichen eingeschlossen wird. In diesem Fall müssen die umschließenden doppelten Anführungszeichen wie folgt escapet werden:

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

Ein anderer Satz von Escaperegeln gilt für Eigenschaftenverweise bei benannten Eigenschaften, die ein Leerzeichen, ein einfaches oder ein doppeltes Anführungszeichen enthalten. Wenn der Eigenschaftenverweis ein Leerzeichen, ein einfaches oder ein doppeltes Anführungszeichen enthält, müssen Sie im Eigenschaftenverweis das URL-Escapen (Universal Resource Locator) wie folgt verwenden:

Zeichen im Eigenschaftenverweis Escapezeichen
Leerzeichen %20
Doppeltes Anführungszeichen %22
Einfaches Anführungszeichen %27

Zum Suchen nach einer benutzerdefinierten Eigenschaft namens Mom's "Gift", die das Wort pearls enthält, verwenden Sie beispielsweise folgenden Filter:

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

Zeichenfolgenvergleiche mithilfe der Jet-Syntax

Der von Jet-Filtern unterstützte Zeichenfolgenvergleich ist auf einen Äquivalenzvergleich beschränkt. Sie können Elemente basierend auf dem Wert einer Zeichenfolgeneigenschaft filtern, die einer bestimmten Zeichenfolge entspricht, z. B. wenn die LastName-Eigenschaft gleich "Wilson" ist. Beim Vergleich wird die Groß-/Kleinschreibung nicht beachtet, d. h., im letzten Beispiel werden durch Angeben von "Wilson" und "wilson" als Vergleichszeichenfolge die gleichen Ergebnisse zurückgegeben.

Zeichenfolgenvergleiche mithilfe der DASL-Syntax

Zu den von DASL-Filtern unterstützten Zeichenfolgenvergleichen gehören Äquivalenz-, Präfix-, Begriff- und Teilzeichenfolgenvergleiche. Wenn Sie nach der Subject -Eigenschaft filtern, werden Präfixe wie "AW:" und "WG:" ignoriert. Zum Beispiel...

sFilter = "[Subject] = 'cat'"

... entspricht sowohl "cat" als auch "RE: cat".

Äquivalenzvergleich

Ähnlich wie mit Jet-Filtern wird mit DASL-Filtern ein Äquivalenzvergleich mithilfe des Operators "gleich" (=) ausgeführt. Der Wert der Zeichenfolgeneigenschaft muss der Vergleichszeichenfolge entsprechen, mit Ausnahme der oben genannten Präfixe "AW:" und "WG:".

Durch die folgende DASL-Abfrage z. B. wird ein Filter für "Firmenname entspricht 'Microsoft'" erstellt:

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

Nehmen Sie als weiteres Beispiel an, dass der Ordner, den Sie durchsuchen, Elemente mit folgenden Betreffzeilen enthält:

  • Frage
  • Fragwürdig
  • Nicht fragwürdig
  • AW: Frage
  • Die große Frage

Folgendes = Einschränkung...

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

... gibt die folgenden Ergebnisse zurück:

  • Frage
  • AW: Frage

Äquivalenz-, Präfix-, Begriff- und Teilzeichenfolgenvergleiche

DASL unterstützt Vergleiche von Präfixen, Begriffen und Teilzeichenfolgen in einer Zeichenfolgeneigenschaft mithilfe der Schlüsselwörter ci_startswith und ci_phrasematch für den Inhaltsindex und des Schlüsselworts like. Wenn ein Speicher indiziert wird, ist das Suchen mit Schlüsselwörtern für den Inhaltsindex effizienter als mit like. Wenn Ihre Suchszenarien den Abgleich von Teilzeichenfolgen umfassen (die Schlüsselwörter des Inhaltsindexers nicht unterstützen), verwenden Sie die wie Schlüsselwort (keyword) in einer DASL-Abfrage.

Eine DASL-Abfrage kann ci_startswith oder ci_phrasematch und like enthalten, jedoch werden alle Zeichenfolgenvergleiche als Teilzeichenfolgenvergleiche ausgeführt.

ci_startswith

Die Syntax von ci_startswith lautet wie folgt:

<PropertySchemaName> ci_startswith <ComparisonString> 

... Wobei PropertySchemaName ein gültiger Name einer Eigenschaft ist, auf die vom Namespace verwiesen wird, und ComparisonString die Zeichenfolge, die für den Vergleich verwendet wird.

Durch ci_startswith wird eine Suche ausgeführt, um Präfixe zu vergleichen. In der Zeichenfolge werden Token (Zeichen, Wort oder Wörter) verwendet, um diese mit den ersten Zeichen eines Worts im Zeichenfolgenwert der indizierten Eigenschaft zu vergleichen. Wenn die Vergleichszeichenfolge mehrere Token enthält, muss jedes Token in der Vergleichszeichenfolge eine Präfixabgleichung in der indizierten Eigenschaft aufweisen. Zum Beispiel:

  • Durch die Beschränkung auf "Suche" würde sich eine Übereinstimmung mit "Suchen" ergeben.
  • Durch die Beschränkung auf "Suche" würde sich keine Übereinstimmung mit "Durchsuchen" ergeben.
  • Durch die Beschränkung auf "Suche" würde sich eine Übereinstimmung mit "Betreff: Auf der Suche" ergeben.
  • Durch die Beschränkung auf "Suchen Ersetzen" würde sich eine Übereinstimmung mit "Suchen und Ersetzen" oder "Suchen & Ersetzen" ergeben.
  • Durch die Beschränkung auf "Suchen und Ersetzen" würde sich eine Übereinstimmung mit "Ich mag die Option für Suchen und Ersetzen" ergeben.
  • Durch die Beschränkung auf "Suchen und Ersetzen" würde sich keine Übereinstimmung mit "Ostereier Suchen" ergeben.
  • Durch die Beschränkung auf "gefährliche Tiere" würde sich eine Übereinstimmung mit "Dokumentation über gefährliche Tiere" ergeben.
  • Durch die Beschränkung auf "gefährliche Tiere" würde sich eine Übereinstimmung mit "gefährlichere Tiere" ergeben.
  • Durch die Beschränkung auf "gefährliche Tiere" würde sich keine Übereinstimmung mit "ungefährliche Tiere" ergeben.

Nehmen Sie im gleichen Beispiel für den Äquivalenzvergleich an, dass der durchsuchte Ordner Elemente mit folgenden Betreffzeilen enthält:

  • Frage
  • Fragwürdig
  • Nicht fragwürdig
  • AW: Frage
  • Die große Frage

Die folgende ci_startswith Einschränkung...

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

... gibt die folgenden Ergebnisse zurück:

  • Frage
  • Fragwürdig
  • AW: Frage
  • Die große Frage

ci_phrasematch

Die Syntax von ci_phrasematch lautet wie folgt:

<PropertySchemaName> ci_phrasematch <ComparisonString> 

... Dabei ist PropertySchemaName ein gültiger Name einer Eigenschaft, auf die vom Namespace verwiesen wird, und ComparisonString die Zeichenfolge, die für den Vergleich verwendet wird.

Durch ci_phrasematch wird eine Suche ausgeführt, um Begriffe zu vergleichen. In der Zeichenfolge werden Token (Zeichen, Wort oder Wörter) verwendet, um ganze Wörter im Zeichenfolgenwert der indizierten Eigenschaft zu vergleichen. Token werden in doppelte Anführungszeichen oder Klammern eingeschlossen. Für jedes Token in der Vergleichszeichenfolge muss eine Begriffübereinstimmung vorhanden sein, bei der es sich nicht um eine Teilzeichenfolgen- oder Präfixübereinstimmung handelt. Wenn die Vergleichszeichenfolge mehrere Token enthält, muss jedes Token in der Vergleichszeichenfolge eine Ausdrucksabgleichung aufweisen. Jedes Wort in einer aus mehreren Wörtern bestehenden Eigenschaft wie Subject oder Body kann übereinstimmen; es muss nicht das erste Wort sein. Beispiel:

  • Durch die Beschränkung auf "Katze" würde sich eine Übereinstimmung mit "Katze", "Katze zugelaufen" und "schwarze Katze" ergeben.
  • Durch die Beschränkung auf "Katze" würde sich eine Übereinstimmung mit "Betreff: Katze ist verschwunden" ergeben.
  • Durch die Beschränkung auf "Katze" würde sich keine Übereinstimmung mit "Katzenfutter" oder "Perserkatze" ergeben.
  • Durch die Beschränkung auf "gestreifte Katze" würde sich eine Übereinstimmung mit "die gestreifte Katze ist fort" ergeben.
  • Durch die Beschränkung auf "gestreifte Katze" würde sich keine Übereinstimmung mit "die gestreifte Katzendecke" ergeben.

Nehmen Sie im gleichen Beispiel für den Äquivalenzvergleich an, dass der durchsuchte Ordner Elemente mit folgenden Betreffzeilen enthält:

  • Frage
  • Fragwürdig
  • Nicht fragwürdig
  • AW: Frage
  • Die große Frage

Die folgende ci_phrasematch Einschränkung...

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

... gibt die folgenden Ergebnisse zurück:

  • Frage
  • AW: Frage
  • Die große Frage

zum Beispiel

Durch like werden Präfix-, Teilzeichenfolgen- oder Äquivalenzvergleiche ausgeführt. Token (Zeichen, Wort oder Wörter) werden auf eine vom Vergleichstyp abhängige Weise in das Zeichen % eingeschlossen:

Präfixabgleich

  like '<token>%'

Beispiel: Einschränken für...

  like 'cat%'

... würde mit "cat" und "catalog" übereinstimmen.

Teilzeichenfolgenübereinstimmung

  like '%<token>%'

Beispiel: Einschränken für...

  like '%cat%'

... würde mit "cat", "catalog", "kittycat", "decathlon" übereinstimmen.

Äquivalenzübereinstimmung

  like '<token>'

Beispiel: Einschränken für...

  like 'cat'

... würde mit "cat" und "RE: Cat" übereinstimmen.

Jedes Token kann mit einem Teil eines Worts in der Zeichenfolgeneigenschaft übereinstimmen. Wenn die Vergleichszeichenfolge mehrere Token enthält, muss für jedes Token in der Vergleichszeichenfolge eine Teilzeichenfolgenübereinstimmung vorhanden sein. Jedes Wort in einer aus mehreren Wörtern bestehenden Eigenschaft wie Subject oder Body kann übereinstimmen, es muss nicht das erste Wort sein.

Nehmen Sie im gleichen Beispiel für den Äquivalenzvergleich an, dass der durchsuchte Ordner Elemente mit folgenden Betreffzeilen enthält:

  • Frage
  • Fragwürdig
  • Nicht fragwürdig
  • AW: Frage
  • Die große Frage

Die folgende Einschränkung...

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

... gibt die folgenden Ergebnisse zurück:

  • Frage
  • Fragwürdig
  • Nicht fragwürdig
  • AW: Frage
  • Die große Frage

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.