JetCreateIndex2-Funktion

Gilt für: Windows | Windows Server

JetCreateIndex2-Funktion

Die JetCreateIndex2-Funktion erstellt Indizes für Daten in einer ESE-Datenbank, die verwendet werden können, um bestimmte Daten schnell zu finden.

    JET_ERR JET_API JetCreateIndex2(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          JET_INDEXCREATE* 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_INDEXCREATE Strukturen, von denen jede einen zu erstellenden Index definiert.

cIndexCreate

Die Anzahl der Elemente im Array pindexcreate.

Rückgabewert

Diese Funktion gibt den JET_ERR Datentyp mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu den möglichen ESE-Fehlern finden Sie unter Extensible Storage Engine Errors and Error Handling Parameters.

Rückgabecode

Beschreibung

JET_errSuccess

Der Vorgang wurde erfolgreich abgeschlossen.

JET_errCannotIndex

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

JET_errColumnNotFound

Es wurde versucht, eine indizierte Spalte für eine nicht vorhandene Spalte zu verwenden. Der Versuch, eine bedingte Indizierung für eine nicht vorhandene Spalte zu erstellen, kann auch diesen Fehler erzeugen.

JET_errDensityInvalid

Dieser Fehler wird zurückgegeben, wenn der ulDensity-Member der JET_INDEXCREATE-Struktur auf eine Zahl kleiner als 20 oder mehr 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 wird, erstellt die Datenbank-Engine transparent einen.

JET_errIndexInvalidDef

Es wurde eine ungültige Indexdefinition angegeben. Einige der möglichen Gründe für den Empfang dieses Fehlers sind:

  • Ein primärer Index ist bedingt (grbit member of JET_INDEXCREATE has JET_bitIndexPrimary set, and the cConditionalColumn member of JET_INDEXCREATE is greater than zero).

  • Windows Server 2003 und höher. Es wurde versucht, einen Tupelindex mit Tupelgrenzwerten zu erstellen, ohne jedoch Informationen in den ptuplelimits-Member in JET_INDEXCREATE zu übergeben (d.b. grbit hat JET_bitIndexTupleLimits festgelegt, aber der ptuplelimits-Zeiger ist NULL).

  • Übergeben einer ungültigen Schlüsseldefinition im szKey-Member der JET_INDEXCREATE-Struktur. Eine Erläuterung gültiger Definitionen finden Sie unter JET_INDEXCREATE.

  • Das Festlegen des cbVarSegMac-Members in JET_INDEXCREATE ist 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 (einer, für den das JET_bitIndexUnicode Bit im grbit-Member von JET_INDEXCREATEfestgelegt ist). Einige häufige Ursachen können darin bestehen, dass das Pidxunicode-Feld der JET_INDEXCREATE-Struktur NULL ist oder die in der pidxunicode-Struktur angegebene LCID ungültig ist.

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

  • Versuch, zu viele bedingte Spalten zu indizierung. Der cConditionalColumn-Member der JET_INDEXCREATE-Struktur darf nicht größer als JET_ccolKeyMost sein.

JET_errIndexTuplesInvalidLimits

Windows XP und höher. Es wurde eine JET_TUPLELIMITS -Struktur angegeben, und ihre Grenzwerte werden nicht unterstützt. Weitere Informationen finden Sie im Abschnitt "Hinweise" der JET_TUPLELIMITS-Struktur.

JET_errIndexTuplesNonUniqueOnly

Windows XP und höher. Ein Tupelindex kann nicht eindeutig sein (grbit darf nicht sowohl JET_bitIndexTuples als auch JET_bitIndexUnique festgelegt sein).

JET_errIndexTuplesOneColumnOnly

Windows XP und höher. Ein Tupelindex kann sich nur über einer einzelnen Spalte befinden (d. b. das Grbit-Element der JET_INDEXCREATE-Struktur hat JET_bitIndexTuples festgelegt, und der szKey-Member der JET_INDEXCREATE-Struktur gibt mehr als eine Spalte an).

JET_errIndexTuplesSecondaryIndexOnly

Windows XP und höher. Ein Tupelindex kann kein primärer Index sein (d.amp;quot;das grbit-Element der JET_INDEXCREATE-Struktur darf nicht sowohl JET_bitIndexPrimary als auch JET_bitIndexTuples festgelegt sein).

JET_errIndexTuplesTextColumnsOnly

Windows XP und höher. Ein Tupelindex kann sich nur in einer Text- oder Unicode-Spalte befinden. Der Versuch, andere Spalten (z. B. Binärspalten) zu indizieren, führt zu JET_errIndexTuplesTextColumnsOnly.

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP und höher. Ein Tupelindex lässt nicht zu, dass der cbVarSegMac-Member der JET_INDEXCREATE-Struktur festgelegt wird.

JET_errInTransaction

Es wurde versucht, während einer Transaktion einen Index ohne Versionsinformationen zu erstellen.

JET_errInvalidgrbit

Die Indexdefinition ist ungültig, da der Grbitmember der JET_INDEXCREATE Struktur inkonsistente Werte enthält. Mögliche Gründe:

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

  • Ein leerer Index ignoriert keine NULL-Felder (das heißt, der grbit-Member der JET_INDEXCREATE-Struktur hat JET_bitIndexEmpty festgelegt, verfügt jedoch nicht über JET_bitIndexIgnoreAnyNull).

  • Übergeben einer JET_CONDITIONALCOLUMN-Struktur mit einem ungültigen Grbitmember. Weitere Informationen finden Sie unter JET_CONDITIONALCOLUMN.

Wenn mehrere Indizes gleichzeitig erstellt werden (d. b. 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 (LOCALE ID, LCID) wurde übergeben (entweder über den lcid-Member in der JET_UNICODEINDEX-Struktur, auf den der pidxunicode-Member in der JET_INDEXCREATE-Struktur einen Zeiger auf enthält, oder über den lcid-Member der JET_INDEXCREATE-Struktur).

JET_errInvalidName

Ein ungültiger Indexname wurde angegeben. Weitere Informationen finden Sie unter JET_INDEXCREATE.

JET_errInvalidParameter

Ein ungültiger Parameter wurde an die API übergeben. Dieser Fehler kann unter anderem folgende Ursachen haben:

JET_errUnicodeTranslationFail

Fehler beim Normalisieren einer Unicode-Spalte. Dies kann dadurch verursacht werden, dass nicht mehr die Systemressourcen verfügbar sind.

Hinweise

Der Rückgabewert wird nach erfolgreichem Abschluss aller angegebenen Indizes JET_errSuccess.

JetCreateIndex2 durchläuft die in pindexcreate angegebenen Indizes und bricht manchmal beim ersten Fehler ab. Indizes nach dem ersten Index mit einem Fehler wurden möglicherweise nicht versucht, obwohl der Err-Member der JET_INDEXCREATE-Struktur JET_errSuccess enthält.

Anforderungen

| | |

Client

|

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

| |

Server

|

Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server.

| |

Header

|

Deklariert in Esent.h.

| |

Bibliothek

|

Verwenden Sie ESENT.lib.

| |

DLL

|

Erfordert ESENT.dll.

| |

Unicode

|

Wird als JetCreateIndex2W (Unicode) und JetCreateIndex2A (ANSI) implementiert.

|

Weitere Informationen

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2