Freigeben über


Weitere Möglichkeiten zum Verschieben in ein Recordset

Gilt für: Access 2013, Office 2013

The following four methods are used to move around, or scroll, in the Recordset: MoveFirst, MoveLast, MoveNext, and MovePrevious. (Some of these methods are unavailable on forward-only cursors.)

MoveFirst ändert die aktuelle Datensatzposition auf den ersten Datensatz im Recordset -Objekt. MoveLast ändert die aktuelle Datensatzposition auf den letzten Datensatz im Recordset -Objekt. Zur Verwendung von MoveFirst oder MoveLast muss das Recordset -Objekt Lesezeichen oder die Rückwärtscursorbewegung unterstützen; andernfalls wird durch Aufrufen der Methode ein Fehler generiert.

MoveNext verschiebt die aktuelle Datensatzposition um eine Stelle nach vorne. Wenn Sie beim Aufrufen von MoveNext den letzten Datensatz verwenden, wird EOF auf True festgelegt. MovePrevious verschiebt die aktuelle Datensatzposition um einen Platz nach hinten. Wenn Sie sich beim Aufrufen von MovePrevious im ersten Datensatz befinden, wird BOF auf True festgelegt. Es ist ratsam, die Eigenschaften EOF und BOF zu überprüfen, wenn Sie diese Methoden verwenden, und den Cursor zurück zu einer gültigen aktuellen Datensatzposition zu bewegen, wenn Sie sich von einem der Beiden Enden des Recordset-Objekts bewegen, wie hier gezeigt:

. . . 
oRs.MoveNext 
If oRs.EOF Then oRs.MoveLast 
. . . 

Oder im Fall der MovePrevious -Methode:

. . . 
oRs.MovePrevious 
If oRs.BOF Then oRs.MoveFirst 
. . . 

Wenn Recordset -Objekt gefiltert oder sortiert wird und die Daten des aktuellen Datensatzes geändert wurden, ändert sich die Position möglicherweise ebenso. In solchen Fällen funktioniert die MoveNext-Methode normal, aber beachten Sie, dass die Position um einen Datensatz von der neuen Position nach vorne verschoben wird, nicht die alte Position. Wenn Sie beispielsweise die Daten im aktuellen Datensatz ändern, sodass der Datensatz an das Ende des sortierten Recordset verschoben wird, bedeutet dies, dass das Aufrufen von MoveNext dazu führt, dass ADO den aktuellen Datensatz auf die Position nach dem letzten Datensatz im Recordset festlegt (EOF = True).

The behavior of the various Move methods of the Recordset object depends, to some extent, on the data within the Recordset. New records added to the Recordset are initially added in a particular order, which is defined by the data source and may be dependent implicitly or explicitly on the data in the new record. For example, if a sort or a join is done within the query that populates the Recordset, the new record will be inserted in the appropriate place within the Recordset. If ordering is not explicitly specified when creating the Recordset, changes in the data source implementation may cause the ordering of the returned rows to change inadvertently. In addition, the sorting, filtering, and editing functions of the Recordset can affect the order and possibly which rows in the recordset will be visible.

Daher sind MoveNext, MovePrevious, MoveFirst, MoveLast und Move für andere Vorgänge, die für dasselbe Recordset ausgeführt werden, vertraulich. ADO versucht immer, Ihre aktuelle Position beizubehalten, bis Sie sie explizit verschieben, aber manchmal ist es durch eingreifende Änderungen schwierig, die Auswirkungen einer nachfolgenden Verschiebung zu verstehen. Wenn Sie beispielsweise MoveFirst aufrufen, um die Position in der ersten Zeile eines sortierten Recordset-Objekts zu platzieren, und Sie die Sortierung von aufsteigender Reihenfolge in absteigende Reihenfolge ändern, befinden Sie sich immer noch in derselben Zeile – aber jetzt ist es die letzte Zeile im Recordset. MoveFirst führt Sie zu einer anderen Zeile (der neuen ersten Zeile).

Ein weiteres Beispiel: Wenn Sie sich in einer bestimmten Zeile in der Mitte eines Recordset -Objekts befinden und Delete und anschließend MoveNext aufrufen, befinden Sie sich nun im Datensatz, der unmittelbar auf den gelöschten Datensatz folgt. Durch Aufrufen von MovePrevious wird der Datensatz vor dem gelöschten Datensatz zum aktuellen Datensatz, weil der gelöschte Datensatz nicht mehr zur aktiven Mitgliedschaft des Recordset -Objekts zählt.

Es ist besonders schwierig, im Hinblick auf das Ändern von Daten im aktuellen Datensatz für alle Anbieter eine konsistente Navigationssyntax für Methoden zu definieren, mit denen die Navigation relativ zum aktuellen Datensatz erfolgt – MovePrevious, MoveNext und Move . Wenn Sie z. B. ein sortiertes, gefiltertes Recordset-Objekt verwenden und die Daten im aktuellen Datensatz so ändern, dass sie sich vor allen anderen Datensätzen befinden, die geänderten Daten aber nicht mehr mit dem Filter übereinstimmen, ist nicht klar, an welche Position Sie mit MoveNext gelangen sollten. Die sicherste Schlussfolgerung ist, dass die relative Bewegung innerhalb eines Recordset-Objekts riskanter als die absolute Bewegung ist (z. B. mit MoveFirst oder MoveLast), wenn Daten geändert werden, während Datensätze bearbeitet, hinzugefügt oder gelöscht werden. Das Sortieren und Filtern sollte auf einem Primärschlüssel oder einer Primär-ID basieren, weil diese Art von Wert unverändert bleiben sollte.