JetMove-Funktion

Letzte Änderung: Freitag, 27. Februar 2015

Gilt für: Windows | Windows Server

JetMove-Funktion

Die JetMove -Funktion einen Cursor an die Start- oder Endzeit eines Indexes positioniert und die Einträge in der betreffenden Index entweder vorwärts oder rückwärts durchläuft. Es ist auch möglich, den Cursor vorwärts oder rückwärts durch eine angegebene Anzahl von Indexeinträge auf dem aktuellen Index zu verschieben. Ein weiterer Ansatz ist die Indexeinträge künstlich zu beschränken, die mithilfe von JetMove durch Einrichten eines Indexbereichs auf den Cursor mit JetSetIndexRangeaufgelistet werden können.

JET_ERR JET_API JetMove(
  __in          JET_SESID sesid,
  __in          JET_TABLEID tableid,
  __in          long cRow,
  __in          JET_GRBIT grbit
);

Parameter

sesid

Die Sitzung für diesen Aufruf verwenden.

TableID

Der Mauszeiger für dieses Anrufs verwenden.

cRow

Ein beliebiger Offset, der die gewünschte Cursorbewegung auf dem aktuellen Index angibt.

Zusätzlich zum standard Offsets kann diesen Parameter auch mit einem der folgenden Optionen festgelegt werden.

Wert

Bedeutung

JET_MoveFirst

Verschiebt den Cursor an die erste Indexeintrag im Index (sofern vorhanden).

Hinweis   Der Literalwert-2147483648 versehen sind, wird diese Option wird. Verwenden Sie diesen Wert nicht als normale Offset oder unerwünschtes Verhalten auftreten.

JET_MoveLast

Verschiebt den Cursor an die letzte Indexeintrag im Index (sofern vorhanden).

Hinweis   Der Literalwert 2147483647 versehen sind, wird diese Option wird. Verwenden Sie diesen Wert nicht als normale Offset oder unerwünschtes Verhalten auftreten.

JET_MoveNext

Verschiebt den Cursor an die nächste Indexeintrag im Index (sofern vorhanden). Dieser Wert entspricht genau einem normalen Offset + 1.

JET_MovePrevious

Verschiebt den Cursor zum vorherigen Indexeintrag im Index (sofern vorhanden).

Dieser Wert entspricht genau ein gewöhnliche Offset von-1 oder 0 (null).

Der Cursor an der aktuellen Position logische bleibt und das Vorhandensein der Indexeintrag, der die diese logischen Position entspricht, wird getestet.

JET_errInvalidGrbit

Eine Gruppe von Bits an, die NULL oder mehrere der folgenden Optionen angeben.

Wert

Bedeutung

JET_bitMoveKeyNE

Verschiebt den Cursor vorwärts oder rückwärts durch die Anzahl der Indexeinträge erforderlich, um die erforderliche Anzahl der Schlüsselwerte im Index aufgetreten Index überspringen. Dies hat die Auswirkung des Indexeinträge mit doppelter Werte in einer einzelnen Indexeintrag reduzieren. Normalerweise wird ein Offset die Einfügemarke um die angegebene Anzahl von Indexeinträgen unabhängig von deren Schlüsselwerte verschoben.

Return Value

Diese Funktion gibt den Datentyp JET_ERR mit einem der folgenden Rückgabecodes. Weitere Informationen zu den möglichen ESE-Fehlern finden Sie unter Extensible Storage Engine-Fehlern und Fehler behandeln von Parametern.

Rückgabecode

Beschreibung

JET_errSuccess

Der Vorgang wurde erfolgreich abgeschlossen. Für JetMovebedeutet dies, dass ein Indexeintrag am angeforderten Speicherort gefunden wurde oder auf den aktuellen Index versetzt.

JET_errClientRequestToStopJetService

Der Vorgang kann nicht abgeschlossen werden, da alle Aktivitäten auf die Instanz, die die Sitzung zugeordnet ist aufgrund eines Aufrufs von JetStopServicebehoben ist.

JET_errInstanceUnavailable

Der Vorgang kann nicht abgeschlossen werden, da die Instanz, die die Sitzung zugeordnet ist, ein schwerwiegender Fehler, der erforderlich sind aufgetreten, dass der Zugriff auf alle Daten gesperrt werden, um die Integrität der Daten zu schützen.

Windows XP:  Dieser Wert wird in Windows XP eingeführt.

JET_errNoCurrentRecord

Der Mauszeiger wird derzeit nicht auf einen Indexeintrag positioniert. Für JetMovebedeutet dies, dass ein Indexeintrag wurde nicht am angeforderten Speicherort gefunden oder auf den aktuellen Index versetzt.

JET_errNotInitialized

Der Vorgang kann nicht abgeschlossen werden, da die Instanz, die die Sitzung zugeordnet ist noch nicht initialisiert wurde.

JET_errRecordDeleted

Der Cursor wird derzeit logisch auf einen Indexeintrag positioniert, die einen Datensatz entspricht, die gelöscht wurde.

JET_errRestoreInProgress

Der Vorgang kann nicht abgeschlossen werden, da ein Restore-Vorgang in Arbeit auf die Instanz der Sitzung zugeordnet ist.

JET_errSessionSharingViolation

Die gleiche Sitzung kann nicht für mehrere Threads gleichzeitig verwendet werden.

Windows XP:  Dieser Wert wird in Windows XP eingeführt.

JET_errTermInProgress

Der Vorgang kann nicht abgeschlossen werden, da die Instanz, die die Sitzung zugeordnet ist Herunterfahren.

Wenn diese Funktion erfolgreich ist, wird der Mauszeiger an einen Indexeintrag platziert, die der Offset oder der angeforderten Speicherort entspricht. Wenn für die Aktualisierung ein Datensatzes vorbereitet wurde, wird die Aktualisierung abgebrochen werden. Wenn ein Indexbereich aktiv ist, und JET_MoveFirst oder JET_MoveLast angegeben wurde, wird dieses Indexbereichs abgebrochen werden. Keine Änderung an den Zustand der Datenbank erfolgt.

Wenn diese Funktion fehlschlägt, bleiben die Position des Cursors unverändert, es sei denn, JET_errNoCurrentRecord zurückgegeben wurde. In diesem Fall wird der Cursor positioniert, in dem der Indexeintrag, der dem angeforderten Speicherort oder Offset entspricht hätte. Der Cursor kann relativ zum verschoben werden, dass Position aber immer noch nicht auf einen gültigen Index-Eintrag angezeigt wird. Wenn für die Aktualisierung ein Datensatzes vorbereitet wurde, wird die Aktualisierung abgebrochen werden. Wenn ein Indexbereich aktiv ist, und JET_MoveFirst oder JET_MoveLast angegeben wurde, wird dieses Indexbereichs abgebrochen werden. Keine Änderung an den Zustand der Datenbank erfolgt.

Anmerkungen

Ein Cursor kann in zwei spezielle Positionen mit JetMove, vor dem ersten und nach dem letzten verschoben werden. Befindet sich der Cursor auf die erste Indexeintrag in der Tabelle und JetMove mit JET_MovePrevious aufgerufen wird, der Anruf mit JET_errNoCurrentRecord fehl und der Cursor wird logisch vor dem ersten im Index positioniert. Diese logische Position beibehalten, auch wenn eine andere Indexeintrag vor den ersten Eintrag im Index eingefügt wird. Die gleiche Situation tritt ein, nach dem letzten relativ zum Ende des Indexes. Vor dem ersten und nach dem letzten nützlichsten beim Einrichten von Beispieldokumenten Indexeinträge, die durchlaufen werden mithilfe von JetMove sind, mit einem einen listenfelditerator-Modell, die erwartet, um immer in der nächsten (oder vorherigen) Element vor der Verwendung dieses Elements verschieben.

Der Satz von Indexeinträge, die durch JetMove besucht werden können kann durch Einrichten eines Indexbereichs auf den Cursor beschränkt werden. Dies ist hilfreich für Anwendungen, die einen Satz von Indexeinträge auflisten, die einfache Kriterien erfüllen, die durch ein Paar von Search-Schlüssel, die erstellt für den betreffenden Index vermittelt werden können. Weitere Informationen finden Sie unter JetSetIndexRange.

In Versionen vor Windows Server 2003 SP1 besteht ein Problem in JetMove , die in einigen Fällen bestimmten auftritt, die die richtigen Erzwingung eines Bereichs Index als Satz von durch die Funktion JetSetIndexRange wirkt sich auf. Wenn der Mauszeiger derzeit vor dem ersten Index wird und eine Indexbereich oberen Grenzwert, der kleiner als der erste Indexeintrag der nächsten Aufruf von JetMove fälschlicherweise, Indexeintrag anstelle von fehlerhaften mit JET_errNoCurrentRecord, wechseln Sie zur wird wie erwartet festgelegt ist. Analog Situation ab dem Ende des Indexes wird der gleiche Fehler auftreten. Diese Situation kann in einer Anwendung auftreten, die ein Indexbereich richtet und es mithilfe einer einen listenfelditerator, die vor dem ersten Index zu starten, die den Satz der Einträge zum Aufzählen gehört erwartet, sondern der erste Indexeintrag dieses Satzes von navigiert. Dies tritt auch auf die analog Groß-/Kleinschreibung ab dem Ende des Indexes. Die Problemumgehung wird die Anwendung manuell sicher, dass der Indexeintrag erworben innerhalb des Indexbereichs befindet durch einen Vergleich des Schlüssels für den aktuellen Indexeintrag (mithilfe von JetRetrieveKeyabgerufen) mit dem Schlüssel, der das Ende des aktuellen Indexbereichs (mithilfe von JetRetrieveKey mit JET_bitRetrieveCopy abgerufen) darstellt.

Es ist wichtig, darauf achten, wenn berechnete übergeben, JetMoveversetzt. Wenn der berechnete Versatz kleiner als oder gleich JET_MoveFirst ist, muss dieser Offset in mehrere Teile aufgeteilt werden jeweils JetMove übergeben wird, getrennt, aber innerhalb einer einzelnen Transaktion an den gewünschten Effekt zu erzielen. Dies gilt auch für Offsets größer als oder gleich JET_MoveNext. Es ist unwahrscheinlich, dass eine Anwendung würde dies im wirklichen Leben unterzogen, aber es ratsam ist, einen Schutz vor diesem Fall die sehr unterschiedliche Semantik von JET_MoveFirst und JET_MoveLast aus einem normalen Offset angegeben haben.

Wenn JetMove mit einer sehr großen Offset, aufgerufen wird, z. B. JetMove alle 1000 Indexeinträge zum Erreichen der letzten Position durchläuft, wenn der Parameter cRow bis 1000 festgelegt ist. ESE-API bieten eine effiziente Möglichkeit zum direkt an einen bestimmten Indexeintrag Offset verschieben, ohne zu traversieren jedes Indexeintrag zurzeit nicht.

Voraussetzungen

-Client,

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

Server

WindowsServer 2008, WindowsServer 2003 oder Windows 2000 Server benötigt.

Kopfzeile

In Esent.h deklariert.

Library

Verwenden Sie ESENT.lib.

DLL

Erfordert "ESENT.dll".

Siehe auch

JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetRetrieveKey
JetSetIndexRange