JetCreateIndex4W-Funktion

Gilt für: Windows | Windows Server

Die JetCreateIndex4W-Funktion erstellt Indizes für Daten in einer ESE-Datenbank (Extensible Storage Engine), mit der bestimmte Daten schnell gefunden werden können.

Die JetCreateIndex4W-Funktion wurde im Windows 8 Betriebssystem eingeführt.

JET_ERR JET_API JetCreateIndex4W(
  __in          JET_SESID sesid,
  __in          JET_TABLEID tableid,
  __in          JET_INDEXCREATE2* pindexcreate,
  __in          unsigned long cIndexCreate
);

Parameter

sesid

Der Datenbanksitzungskontext, der für den API-Aufruf verwendet werden soll.

tableid

Die Tabelle, für die der Index erstellt wird.

pindexcreate

Ein Array von JET_INDEXCREATE2 Strukturen, von denen jede einen zu erstellenden Index definiert.

cIndexCreate

Die Anzahl der Elemente im pindexcreate-Array .

Rückgabewert

Diese Funktion gibt den Datentyp JET_ERR mit einem der Rückgabecodes zurück, die in der folgenden Tabelle aufgeführt sind. 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_errCannotIndex

Es wurde versucht, eine Escrow-Update- oder SLV-Spalte zu indizieren (beachten Sie, dass SLV-Spalten veraltet sind).

JET_errColumnNotFound

Es wurde versucht, eine nicht vorhandene Spalte zu indizieren. Ein Versuch, eine nicht vorhandene Spalte bedingt indizieren zu lassen, kann auch diesen Fehler verursachen.

JET_errDensityInvalid

Dieser Fehler wird zurückgegeben, wenn das ulDensity-Element der JET_INDEXCREATE2-Struktur auf eine Zahl kleiner als 20 oder größer als 100 festgelegt ist.

JET_errIndexDuplicate

Es wurde versucht, zwei identische Indizes zu definieren.

JET_errIndexHasPrimary

Es wurde versucht, mehr als einen primären Index für eine Tabelle anzugeben. Eine Tabelle muss genau einen primären Index aufweisen. Wenn kein primärer Index angegeben ist, erstellt die Datenbank-Engine einen transparenten Index.

JET_errIndexInvalidDef

Es wurde eine ungültige Indexdefinition angegeben. Im Folgenden sind einige mögliche Gründe für diesen Fehler aufgeführt:

  • Ein primärer Index ist bedingt (grbit-Member von JET_INDEXCREATE2 ist JET_bitIndexPrimary festgelegt, und das cConditionalColumn-Element von JET_INDEXCREATE2 ist größer als 0).

  • Gilt für Versionen von Windows ab Windows Server 2003. Es wurde versucht, einen Tupelindex mit Tupelgrenzwerten zu erstellen, aber ohne Informationen im ptuplelimits-Element in JET_INDEXCREATE2 zu übergeben (d. h. grbit hat JET_bitIndexTupleLimits festgelegt, aber der ptuplelimits-Zeiger ist NULL).

  • Übergeben einer ungültigen Schlüsseldefinition im szKey-Member der JET_INDEXCREATE2-Struktur . Informationen zu gültigen Definitionen finden Sie unter JET_INDEXCREATE2.

  • Festlegen des cbVarSegMac-Members in JET_INDEXCREATE2 größer als JET_cbPrimaryKeyMost (für einen primären Index) oder größer als JET_cbSecondaryKeyMost (für einen sekundären Index).

  • Übergeben einer ungültigen Kombination für einen benutzerdefinierten Unicode-Index (für den das JET_bitIndexUnicode Bit im grbit-Element von JET_INDEXCREATE2 festgelegt ist). Einige häufige Ursachen können sein, dass das Pidxunicode-Feld der JET_INDEXCREATE2-Struktur NULL ist, oder dass die in der pidxunicode-Struktur angegebene LCID ungültig ist.

  • Angeben einer mehrwertigen Spalte für einen primären Index.

  • Versucht, zu viele bedingte Spalten zu indizieren. Das cConditionalColumn-Element der JET_INDEXCREATE2-Struktur darf nicht größer als JET_ccolKeyMost sein.

JET_errIndexTuplesInvalidLimits

Gilt für Versionen von Windows ab Windows XP. Es wurde eine JET_TUPLELIMITS-Struktur angegeben, deren Grenzwerte nicht unterstützt werden. Weitere Informationen finden Sie im Abschnitt "Hinweise" der JET_TUPLELIMITS-Struktur .

JET_errIndexTuplesNonUniqueOnly

Gilt für Versionen von Windows ab Windows XP. Ein Tupelindex kann nicht eindeutig sein (grbit darf nicht sowohl JET_bitIndexTuples als auch JET_bitIndexUnique festgelegt sein).

JET_errIndexTuplesOneColumnOnly

Gilt für Versionen von Windows ab Windows XP. Ein Tupelindex kann sich nur über einer einzelnen Spalte befinden (das heißt, das grbit-Element der JET_INDEXCREATE2-Struktur hat JET_bitIndexTuples festgelegt, und das szKey-Element der JET_INDEXCREATE2-Struktur gibt mehr als eine Spalte an).

JET_errIndexTuplesSecondaryIndexOnly

Gilt für Versionen von Windows ab Windows XP. Ein Tupelindex darf kein primärer Index sein (d. a. das grbit-Element der JET_INDEXCREATE2-Struktur darf nicht sowohl JET_bitIndexPrimary als auch JET_bitIndexTuples festgelegt haben).

JET_errIndexTuplesTextColumnsOnly

Gilt für Versionen von Windows ab Windows XP. Ein Tupelindex kann sich nur in einer Text- oder Unicode-Spalte enthalten. Ein Versuch, andere Spalten (z. B. binäre Spalten) zu indizieren, führt zu JET_errIndexTuplesTextColumnsOnly.

JET_errIndexTuplesVarSegMacNotAllowed

Gilt für Versionen von Windows ab Windows XP. Ein Tupelindex lässt das Festlegen des cbVarSegMac-Members der JET_INDEXCREATE2-Struktur nicht zu.

JET_errInTransaction

In einer Transaktion wurde versucht, einen Index ohne Versionsinformationen zu erstellen.

JET_errInvalidgrbit

Die Indexdefinition ist ungültig, da das grbit-Element der JET_INDEXCREATE2-Struktur inkonsistente Werte enthält. Im Folgenden sind einige mögliche Gründe aufgeführt:

  • Für einen primären Index wurde ein Ignore-Bit angegeben (JET_bitIndexPrimary mit einer der JET_bitIndexIgnoreNull, JET_bitIndexIgnoreAnyNull oder JET_bitIndexIgnoreFirstNull übergeben wurde).

  • Ein leerer Index ignoriert keine NULL-Felder (d.a. grbit-Member der JET_INDEXCREATE2-Struktur ist JET_bitIndexEmpty festgelegt, hat aber keine JET_bitIndexIgnoreAnyNull festgelegt).

  • Übergeben einer JET_CONDITIONALCOLUMN-Struktur mit einem ungültigen grbit-Element . Siehe JET_CONDITIONALCOLUMN.

Beim gleichzeitigen Erstellen mehrerer Indizes (d. a. wenn der cIndexCreate-Parameter größer als eins ist), darf keiner der Indizes eines der folgenden Bits enthalten:

  • JET_bitIndexPrimary

  • JET_bitIndexUnversioned

  • JET_bitIndexEmpty

JET_errInvalidLanguageId

Eine ungültige Gebietsschema-ID (LCID) wurde übergeben (entweder über das lcid-Element in der JET_UNICODEINDEX-Struktur , auf das das pidxunicode-Element in der JET_INDEXCREATE2-Struktur einen Zeiger enthält, oder über das lcid-Element der JET_INDEXCREATE2-Struktur ).

JET_errInvalidName

Es wurde ein ungültiger Indexname angegeben. Weitere Informationen finden Sie unter JET_INDEXCREATE2 .

JET_errInvalidParameter

Ein ungültiger Parameter wurde an die API übergeben. Im Folgenden finden Sie einige Gründe, warum dieser Fehler zurückgegeben werden kann:

JET_errUnicodeTranslationFail

Beim Normalisieren einer Unicode-Spalte ist ein Fehler aufgetreten. Dies kann dadurch verursacht werden, dass die Systemressourcen knapp werden.

JET_errSpaceHintsInvalid

Ein Element der JET-Raumhinweisstruktur war nicht richtig oder nicht umsetzbar.

Bemerkungen

Die JetCreateIndex4W-Funktion durchläuft die im pindexcreate-Parameter angegebenen Indizes und wird manchmal beim ersten Fehler abgebrochen. Alle Indizes nach dem ersten Index mit einem Fehler wurden möglicherweise nicht versucht, obwohl der Fehlerelement der JET_INDEXCREATE2-Struktur JET_errSuccess enthält.

Anforderungen

Anforderung Wert

Client

Erfordert Windows 8.

Server

Erfordert Windows Server 2012.

Kopfzeile

Deklariert in Esent.h.

Bibliothek

Verwenden Sie ESENT.lib.

DLL

Erfordert ESENT.dll.

Siehe auch

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE2
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2
JET_SPACEHINTS