Filter-Eigenschaft
Gibt einen Filter für Daten in einem Recordset an.
Einstellungen und Rückgabewerte
Legt einen Variant-Wert fest oder gibt diesen zurück, der eines der folgenden Elemente enthalten kann:
Kriterienzeichenfolge: Eine Zeichenfolge, die aus einer oder mehreren einzelnen Klauseln besteht, die mit AND- oder OR-Operatoren verkettet sind.
Array von Lesezeichen: Ein Array eindeutiger Lesezeichenwerte, die auf Datensätze im Recordset-Objekt verweisen.
Ein FilterGroupEnum-Wert.
Bemerkungen
Verwenden Sie die Eigenschaft Filter, um Datensätze aus einem Recordset-Objekt selektiv herauszufiltern. Das gefilterte Recordset wird zum aktuellen Cursor. Andere Eigenschaften, die Werte basierend auf dem aktuellen Cursor zurückgeben, sind betroffen, z. B. AbsolutePosition-Eigenschaft (ADO), AbsolutePage-Eigenschaft (ADO), RecordCount-Eigenschaft (ADO) und PageCount-Eigenschaft (ADO). Durch Festlegen der Eigenschaft Filter auf einen bestimmten neuen Wert wird der aktuelle Datensatz auf den ersten Datensatz verschoben, der den neuen Wert erfüllt.
Die Kriterienzeichenfolge besteht aus Klauseln der Form FieldName-Operator-Wert (z. B "LastName = 'Smith'"
). Sie können zusammengesetzte Klauseln erstellen, indem Sie einzelne Klauseln mit AND (z. B. "LastName = 'Smith' AND FirstName = 'John'"
) und OR (z. B. "LastName = 'Smith' OR LastName = 'Jones'"
) verketten. Verwenden Sie für Kriterienzeichenfolgen die folgenden Richtlinien:
FieldName muss ein gültiger Feldname aus dem Recordset sein. Wenn der Feldname Leerzeichen enthält, müssen Sie den Namen in eckige Klammern setzen.
Der Operator muss einer der folgenden sein: <, >, <=, >=, <>, = oder LIKE.
Der Wert ist der Wert, mit dem Sie die Feldwerte vergleichen (z. B.'Smith', #8/24/95#, 12.345 oder $50.00). Verwenden Sie einzelne Anführungszeichen (') bei Zeichenfolgen und Nummernzeichen (#) mit Datumsangaben. Bei Zahlen können Sie Dezimalpunkte, Dollarzeichen und die wissenschaftliche Schreibweise verwenden. Wenn der Operator LIKEist, können im Wert Platzhalterzeichen verwendet werden. Als Platzhalterzeichen sind nur das Sternchen (*) und das Prozentzeichen (%) zulässig. Sie müssen das letzte Zeichen in der Zeichenfolge sein. Wert darf nicht NULL sein.
Hinweis
Zum Einschließen einzelner Anführungszeichen (') in den Filterwert verwenden Sie zwei einfache Anführungszeichen, um eins darzustellen. Beispielsweise muss zum Filtern nach O'Malley die Kriterienzeichenfolge "col1 = 'O''Malley'"
sein. Zum Verwenden einzelner Anführungszeichen sowohl am Anfang als auch am Ende des Filterwerts schließen Sie die Zeichenfolge in Nummernzeichen (#) ein. Beispielweise muss zum Filtern nach '1' die Kriterienzeichenfolge "col1 = #'1'#"
sein.
Es gibt keinen Vorrang zwischen AND und OR. Klauseln können innerhalb von Klammern gruppiert werden. Sie können jedoch keine Klauseln gruppieren, die durch ein OR verbunden sind, und dann die Gruppe wie im folgenden Codeausschnitt mit einer anderen Klausel mit einem AND verbinden:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
Stattdessen erstellen Sie diesen Filter wie folgt:
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')
In einer LIKE-Klausel können Sie am Anfang und Ende des Musters ein Platzhalterzeichen verwenden. Sie können z. B.
LastName Like '*mit*'
verwenden. Oder Sie können mit LIKE nur am Ende des Musters ein Platzhalterzeichen verwenden. Beispiel:LastName Like 'Smit*'
.
Die Filterkonstanten vereinfachen die Lösung einzelner Datensatzkonflikte während des Batchupdatemodus, indem sie es Ihnen beispielsweise nur erlauben, die Datensätze anzuzeigen, die während des letzten Aufrufs der Methode UpdateBatch betroffen waren.
Das Festlegen der Eigenschaft Filter selbst kann aufgrund eines Konflikts mit den zugrunde liegenden Daten fehlschlagen. Dieser Fehler kann beispielsweise auftreten, wenn ein Datensatz bereits von einem anderen Benutzer gelöscht wurde. In diesem Fall gibt der Anbieter Warnungen an die Errors Collection (ADO)-Collection zurück, aber die Programmausführung wird nicht beendet. Ein Laufzeitfehler tritt nur auf, wenn es bei allen angeforderten Datensätzen Konflikte gibt. Verwenden Sie die Eigenschaft Status Property (ADO Recordset) zum Suchen von Datensätzen mit Konflikten.
Wenn Sie die Eigenschaft Filter auf eine leere Zeichenfolge („“) festlegen, hat dies denselben Effekt wie die Konstante adFilterNone.
Wenn die Eigenschaft Filter festgelegt wird, wechselt die aktuelle Datensatzposition zum ersten Datensatz in der gefilterten Teilmenge von Datensätzen im Recordset. Wenn die Eigenschaft Filter gelöscht wird, wird die aktuelle Datensatzposition zum ersten Datensatz im Recordset verschoben.
Angenommen, ein Recordset wird basierend auf einem Feld eines bestimmten Variantentyps gefiltert, z. B. des Typs sql_variant. Ein Fehler (DISP_E_TYPEMISMATCH oder 80020005) tritt auf, wenn die Untertypen des Felds und Filterwerte, die in der Kriterienzeichenfolge verwendet werden, nicht übereinstimmen. Nehmen Sie beispielsweise Folgendes an:
- Ein Recordset-Objekt (rs) enthält eine Spalte (C) des sql_variant-Typs.
- Und einem Feld dieser Spalte wurde ein Wert von 1 des I4-Typs zugewiesen. Die Kriterienzeichenfolge wird für das Feld auf
rs.Filter = "C='A'"
festgelegt.
Diese Konfiguration erzeugt den Fehler während der Laufzeit. Wenn rs.Filter = "C=2"
aber auf dasselbe Feld angewendet wird, wird kein Fehler erzeugt. Und das Feld wird aus dem aktuellen Datensatz gefiltert.
Eine Erläuterung der Lesezeichenwerte, aus denen Sie ein Array erstellen können, das mit der Eigenschaft „Filter“ verwendet werden kann, finden Sie unter Bookmark-Eigenschaft (ADO).
Nur Filter in Form von Kriterienzeichenfolgen wirken sich auf den Inhalt eines endgültig gespeicherten Recordset aus. Ein Beispiel für eine Kriterienzeichenfolge ist OrderDate > '12/31/1999'
. Filter, die mit einem Array von Lesezeichen erstellt wurden oder einen Wert aus FilterGroupEnum verwenden, wirken sich nicht auf den Inhalt des endgültig gespeicherten Recordset aus. Diese Regeln gelten für Recordsets, die entweder mit clientseitigen oder serverseitigen Cursorn erstellt wurden.
Hinweis
Wenn Sie das adFilterPendingRecords-Flag auf ein gefiltertes und geändertes Recordset im Batchupdatemodus anwenden, ist das resultierende Recordset leer, wenn die Filterung auf dem Schlüsselfeld einer Tabelle mit einem Schlüssel basiert und die Änderung an den Schlüsselfeldwerten vorgenommen wurde. Das resultierende Recordset ist nicht leer, wenn eine der folgenden Aussagen wahr ist:
Die Filterung basierte auf Feldern ohne Schlüssel in einer Tabelle mit einem Schlüssel.
Die Filterung basierte auf Feldern in einer Tabelle mit mehreren Schlüsseln.
Es wurden Änderungen an Feldern ohne Schlüssel in einer Tabelle mit einem Schlüssel vorgenommen.
Es wurden Änderungen an Feldern in einer Tabelle mit mehreren Schlüsseln vorgenommen.
In der folgenden Tabelle werden die Auswirkungen von adFilterPendingRecords in verschiedenen Kombinationen von Filtern und Änderungen zusammengefasst. Die linke Spalte zeigt die möglichen Änderungen an. Änderungen können für beliebige Felder ohne Schlüssel, für das Schlüsselfeld in einer Tabelle mit einem Schlüssel oder für beliebige Schlüsselfelder in einer Tabelle mit mehreren Schlüsseln vorgenommen werden. Die obere Zeile zeigt das Filterkriterium. Die Filterung kann auf beliebigen Feldern ohne Schlüssel, dem Schlüsselfeld in einer Tabelle mit einem Schlüssel oder beliebigen Schlüsselfeldern in einer Tabelle mit mehreren Schlüsseln basieren. Die sich überschneidenden Zellen zeigen die Ergebnisse an. Ein + (Pluszeichen) bedeutet, dass das Anwenden von adFilterPendingRecords zu einem nicht leeren Recordset führt. Ein - (Minuszeichen) bedeutet ein leeres Recordset.
Kombinationen | Keine Schlüssel | Einzelner Schlüssel | Mehrere Schlüssel |
---|---|---|---|
Kein Schlüssel | + | + | + |
Einzelner Schlüssel | + | - | – |
Mehrere Schlüssel | + | – | + |
Gilt für
Weitere Informationen
Filter- und RecordCount-Eigenschaft – Beispiel (VB)Filter- und RecordCount-Eigenschaft – Beispiel (VC++)Clear-Methode (ADO)Optimize – dynamische Eigenschaft (ADO)