JetGetSecondaryIndexBookmark-Funktion
Gilt für: Windows | Windows Server
JetGetSecondaryIndexBookmark-Funktion
Die JetGetSecondaryIndexBookmark-Funktion ruft ein spezielles Lesezeichen für den sekundären Indexeintrag an der aktuellen Position eines Cursors ab. Dieses Lesezeichen kann dann verwendet werden, um den Cursor mithilfe von JetGotoSecondaryIndexBookmark effizient auf denselben Indexeintrag zurück zu positionieren. Dies ist am nützlichsten, wenn sie in einem sekundären Index neu positioniert werden, der doppelte Schlüssel enthält oder mehrere Indexeinträge für denselben Datensatz enthält.
Windows XP: JetGetSecondaryIndexBookmark wird in Windows XP eingeführt.
JET_ERR JET_API JetGetSecondaryIndexBookmark(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__out_opt void* pvSecondaryKey,
__in unsigned long cbSecondaryKeyMax,
__out_opt unsigned long* pcbSecondaryKeyActual,
__out_opt void* pvPrimaryBookmark,
__in unsigned long cbPrimaryBookmarkMax,
__out_opt unsigned long* pcbPrimaryKeyActual,
__in const JET_GRBIT grbit
);
Parameter
sesid
Die Sitzung, die für diesen Aufruf verwendet werden soll.
tableid
Der Cursor, der für diesen Aufruf verwendet werden soll.
pvSecondaryKey
Der Ausgabepuffer, der den sekundären Schlüssel empfängt.
cbSecondaryKeyMax
Die maximale Größe des Ausgabepuffers für den sekundären Schlüssel in Bytes.
pcbSecondaryKeyActual
Empfängt die tatsächliche Größe des sekundären Schlüssels in Bytes.
Wenn dieser Parameter NULL ist, wird die tatsächliche Größe des sekundären Schlüssels nicht zurückgegeben.
Wenn der Ausgabepuffer zu klein ist, wird weiterhin die tatsächliche Größe des sekundären Schlüssels zurückgegeben. Das bedeutet, dass diese Zahl größer als die Größe des Ausgabepuffers ist.
pvPrimaryBookmark
Der Ausgabepuffer, der das Lesezeichen des Primärschlüssels empfängt.
cbPrimaryBookmarkMax
Die maximale Größe des Ausgabepuffers für das Primärschlüssel-Lesezeichen in Bytes.
pcbPrimaryKeyActual
Empfängt die tatsächliche Größe des Primärschlüssel-Lesezeichens in Bytes.
Wenn dieser Parameter NULL ist, wird die tatsächliche Größe des Primärschlüssel-Lesezeichens nicht zurückgegeben.
Wenn der Ausgabepuffer zu klein ist, wird die tatsächliche Größe des Primärschlüssel-Lesezeichens trotzdem zurückgegeben. Das bedeutet, dass diese Zahl größer als die Größe des Ausgabepuffers ist.
grbit
Für die zukünftige Verwendung reserviert.
Rückgabewert
Diese Funktion gibt den JET_ERR-Datentyp mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu möglichen ESE-Fehlern finden Sie unter Erweiterbare Speichermodulfehler und Fehlerbehandlungsparameter.
Rückgabecode |
Beschreibung |
---|---|
JET_errSuccess |
Der Vorgang wurde erfolgreich abgeschlossen. |
JET_errBufferTooSmall |
Der Vorgang wurde erfolgreich abgeschlossen, aber einer der Ausgabepuffer war zu klein, um die angeforderten Daten zu empfangen. Der Ausgabepuffer wurde mit der menge des Lesezeichens gefüllt, wie es passen würde. Bei Bedarf wurde auch die tatsächliche Größe des Lesezeichens zurückgegeben. |
JET_errClientRequestToStopJetService |
Es ist nicht möglich, den Vorgang abzuschließen, da alle Aktivitäten auf dem instance, die der Sitzung zugeordnet sind, aufgrund eines Aufrufs von JetStopService beendet wurden. |
JET_errInstanceUnavailable |
Es ist nicht möglich, den Vorgang abzuschließen, da beim instance, der der Sitzung zugeordnet ist, ein schwerwiegender Fehler aufgetreten ist, der erfordert, dass der Zugriff auf alle Daten widerrufen wird, um die Integrität dieser Daten zu schützen. Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errNoCurrentIndex |
Der Cursor befindet sich derzeit nicht auf einem sekundären Index. Es ist nicht sinnvoll, ein sekundäres Index-Lesezeichen abzurufen, wenn der Cursor derzeit keinen sekundären Index verwendet. JetGetBookmark sollte verwendet werden, wenn sich der Cursor nicht auf einem sekundären Index befindet. |
JET_errNoCurrentRecord |
Der Cursor wird nicht auf einem Datensatz positioniert. Dafür sind viele verschiedene Gründe möglich. Dies geschieht beispielsweise, wenn der Cursor derzeit nach dem letzten Datensatz im aktuellen Index positioniert ist. |
JET_errNotInitialized |
Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete instance noch nicht initialisiert wurde. |
JET_errRestoreInProgress |
Es ist nicht möglich, den Vorgang abzuschließen, da auf dem der Sitzung zugeordneten instance ein Wiederherstellungsvorgang ausgeführt wird. |
JET_errSessionSharingViolation |
Dieselbe Sitzung kann nicht für mehrere Threads gleichzeitig verwendet werden. Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errTermInProgress |
Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete instance heruntergefahren wird. |
Bei Erfolg wird das Lesezeichen des sekundären Indexes für den Indexeintrag an der aktuellen Position eines Cursors in den Ausgabepuffern zurückgegeben. Es wird keine Änderung des Datenbankstatus vorgenommen.
Bei Einem Fehler sind der Zustand der Ausgabepuffer und die tatsächliche Größe des sekundären Index-Lesezeichens nicht definiert, es sei denn, JET_errBufferTooSmall wurde zurückgegeben. Für den Fall, dass JET_errBufferTooSmall zurückgegeben wird, enthalten die Ausgabepuffer so viel des sekundären Index-Lesezeichens, wie in den bereitgestellten Speicherplatz passt, und die tatsächliche Größe des Lesezeichens für den sekundären Index ist genau. In jedem Fall wird keine Änderung des Datenbankzustands vorgenommen.
Bemerkungen
Lesezeichen sollten im Allgemeinen als undurchsichtige Datenblöcke behandelt werden. Es sollte nicht versucht werden, die interne Struktur dieser Daten zu nutzen. Die folgenden Eigenschaften sind jedoch für alle ESENT-Lesezeichen bekannt:
Ein Lesezeichen identifiziert einen Datensatz in einer bestimmten Tabelle eindeutig.
Das Lesezeichen eines Datensatzes ändert sich für die Lebensdauer dieses Datensatzes nicht.
Das Lesezeichen eines Datensatzes ist identisch mit dem Schlüssel dieses Datensatzes im primären Index für die Tabelle, die diesen Datensatz enthält. Wenn für diese Tabelle kein primärer Index definiert ist, erstellt die Datenbank-Engine ein eigenes Lesezeichen für den Datensatz.
Lesezeichen können mithilfe von memcmp miteinander verglichen werden, um ihre relative Reihenfolge im primären Index gegenüber der Tabelle der Quelldatensätze festzulegen. Wenn für diese Tabelle kein primärer Index definiert ist, ist die relative Reihenfolge der Lesezeichen aus dieser Tabelle nicht sinnvoll.
Es ist sinnlos, Lesezeichen von Datensätzen aus verschiedenen Tabellen miteinander zu vergleichen.
Ein Lesezeichen ist immer kleiner oder gleich JET_cbBookmarkMost (256) Bytes länge vor Windows Vista. Unter Windows Vista und höheren Versionen können Lesezeichen größer sein. Die maximale Größe eines Lesezeichens entspricht dem aktuellen Wert von JET_paramKeyMost + 1.
Schlüssel sollten im Allgemeinen als undurchsichtige Datenblöcke behandelt werden. Es sollte nicht versucht werden, die interne Struktur dieser Daten zu nutzen. Die folgenden Eigenschaften sind jedoch für alle ESENT-Schlüssel bekannt:
Schlüssel können unter Verwendung von memcmp miteinander verglichen werden, um ihre relative Reihenfolge im Ursprungsindex gegenüber der Tabelle der Quellindexeinträge festzulegen.
Es ist sinnlos, Schlüssel von Indexeinträgen aus verschiedenen Indizes miteinander zu vergleichen.
Ein Schlüssel ist immer kleiner oder gleich JET_cbKeyMost (255) Bytes länge vor Windows Vista. Unter Windows Vista und höheren Versionen können die Schlüssel größer sein. Die maximale Größe eines Schlüssels entspricht dem aktuellen Wert von JET_paramKeyMost.
Anforderungen
Anforderung | Wert |
---|---|
Client |
Erfordert Windows Vista oder Windows XP. |
Server |
Erfordert Windows Server 2008 oder Windows Server 2003. |
Kopfzeile |
Deklariert in Esent.h. |
Bibliothek |
Verwenden Sie ESENT.lib. |
DLL |
Erfordert ESENT.dll. |
Weitere Informationen
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetGetBookmark
JetGotoSecondaryIndexBookmark
JetRetrieveKey
memcmp