JetSetColumn-Funktion

Gilt für: Windows | Windows Server

JetSetColumn-Funktion

Die JetSetColumn-Funktion ändert einen einzelnen Spaltenwert in einem geänderten Datensatz, der eingefügt oder der aktuelle Datensatz aktualisiert werden soll. Es kann einen vorhandenen Wert überschreiben, einer Sequenz von Werten in einer mehrwertigen Spalte einen neuen Wert hinzufügen, einen Wert aus einer Sequenz von Werten in einer mehrwertigen Spalte entfernen oder einen ganzen oder einen Teil eines langen Werts, einer Spalte vom Typ JET_coltypLongText oder JET_coltypLongBinary aktualisieren.

    JET_ERR JET_API JetSetColumn(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          JET_COLUMNID columnid,
      __in_opt      const void* pvData,
      __in          unsigned long cbData,
      __in          JET_GRBIT grbit,
      __in_opt      JET_SETINFO* psetinfo
    );

Parameter

sesid

Die Sitzung, die für diesen Aufruf verwendet werden soll.

tableid

Der Cursor, der für diesen Aufruf verwendet werden soll.

Columnid

Die JET_COLUMNID der abzurufenden Spalte. Alternativ kann ein columnid-Wert von 0 (null) angegeben werden. Wenn columnid 0 (null) angegeben wird, werden alle markierten Spalten, Sparse- und Mehrwertspalten, als einzelne Spalte behandelt. Dies erleichtert das Abrufen aller Sparsespalten, die in einem Datensatz vorhanden sind.

pvData

Eingabepuffer, der Daten enthält, die für den Spaltenwert verwendet werden sollen.

cbData

Größe des Eingabepuffers in Byte.

grbit

Eine Gruppe von Bits, die die Optionen enthalten, die für diesen Aufruf verwendet werden sollen, einschließlich 0 oder mehr der folgenden Optionen:

Wert

Bedeutung

JET_bitSetAppendLV

Diese Option wird verwendet, um Daten an eine Spalte vom Typ JET_coltypLongText oder JET_coltypLongBinary anzufügen. Das gleiche Verhalten kann erreicht werden, indem die Größe des vorhandenen long-Werts bestimmt und ibLongValue in psetinfo angegeben wird. Es ist jedoch einfacher, dieses Grbit zu verwenden, da es nicht erforderlich ist, die Größe des vorhandenen Spaltenwerts zu kennen.

JET_bitSetOverwriteLV

Diese Option wird verwendet, um den vorhandenen long-Wert durch die neu bereitgestellten Daten zu ersetzen. Wenn diese Option verwendet wird, ist es so, als ob der vorhandene long-Wert vor dem Festlegen der neuen Daten auf die Länge 0 (Null) festgelegt wurde.

JET_bitSetRevertToDefaultValue

Diese Option gilt nur für markierte, sparse oder mehrwertige Spalten. Dies bewirkt, dass die Spalte bei nachfolgenden Abrufspaltenvorgängen den Standardspaltenwert zurückgibt. Alle vorhandenen Spaltenwerte werden entfernt.

JET_bitSetSeparateLV

Diese Option wird verwendet, um zu erzwingen, dass ein long-Wert, Spalten vom Typ JET_coltypLongText oder JET_coltypLongBinary, getrennt vom rest der Datensatzdaten gespeichert wird. Dies tritt normalerweise auf, wenn die Größe des long-Werts verhindert, dass er mit den verbleibenden Datensatzdaten gespeichert wird. Diese Option kann jedoch verwendet werden, um zu erzwingen, dass der long-Wert separat gespeichert wird. Beachten Sie, dass lange Werte, die vier Byte kleiner sind, nicht getrennt sein können. In solchen Fällen wird die Option ignoriert.

JET_bitSetSizeLV

Diese Option wird verwendet, um den Eingabepuffer als ganzzahlige Anzahl von Bytes zu interpretieren, die als Länge des langen Werts festgelegt werden soll, der von der angegebenen columnid beschrieben wird, und falls angegeben, der Sequenznummer in psetinfo-itagSequence>. Wenn die angegebene Größe größer als der vorhandene Spaltenwert ist, wird die Spalte um 0s erweitert. Wenn die Größe kleiner als der vorhandene Spaltenwert ist, wird der Wert abgeschnitten.

JET_bitSetUniqueMultiValues

Diese Option wird verwendet, um zu erzwingen, dass alle Werte in einer mehrwertigen Spalte unterschiedlich sind. Mit dieser Option werden die Quellspaltendaten ohne Transformationen mit anderen vorhandenen Spaltenwerten verglichen, und es wird ein Fehler zurückgegeben, wenn ein Duplikat gefunden wird. Wenn diese Option angegeben ist, können JET_bitSetAppendLV, JET_bitSetOverwriteLV und JET_bitSetSizeLV nicht auch gegeben werden.

JET_bitSetUniqueNormalizedMultiValues

Diese Option wird verwendet, um zu erzwingen, dass alle Werte in einer mehrwertigen Spalte unterschiedlich sind. Diese Option vergleicht die schlüsselnormalisierte Transformation von Spaltendaten mit anderen ähnlich transformierten vorhandenen Spaltenwerten, und es wird ein Fehler zurückgegeben, wenn ein Duplikat gefunden wird. Wenn diese Option angegeben ist, können JET_bitSetAppendLV, JET_bitSetOverwriteLV und JET_bitSetSizeLV nicht auch gegeben werden.

JET_bitSetZeroLength

Diese Option wird verwendet, um einen Wert auf die Länge null festzulegen. Normalerweise wird ein Spaltenwert auf NULL festgelegt, indem eine cbMax von 0 (null) übergeben wird. Für einige Typen, z . B. JET_coltypText, kann ein Spaltenwert jedoch 0 (null) anstelle von NULL sein, und diese Option wird verwendet, um zwischen null und 0 (null) Länge zu unterscheiden.

Hinweis Wenn es sich bei der Spalte um eine Spalte mit fester Länge handelt, wird dieses Bit im Allgemeinen ignoriert, und die Spalte wird auf NULL festgelegt. Wenn die Spalte jedoch eine Spalte mit Tags fester Länge ist, wird die Spaltenlänge auf 0 festgelegt. Wenn die Spalte mit Tags fester Länge auf 0 länge festgelegt ist, wird versucht, die Spalte mit JetRetrieveColumn oder JetRetrieveColumns abzurufen, aber die tatsächliche Länge, die im cbActual-Parameter zurückgegeben wird, ist 0.

JET_bitSetIntrinsicLV

Diese Option wird verwendet, um den gesamten long-Wert im Datensatz zu speichern.

JET_bitSetCompressed

Diese Option wird verwendet, um beim Speichern der Daten die Datenkomprimierung zu versuchen.

Windows 7: JET_bitSetCompressed wird in Windows 7 eingeführt.

JET_bitSetUncompressed

Diese Option wird beim Speichern der Daten nicht versucht, zu komprimieren.

Windows 7: JET_bitSetUnCompressed wird in Windows 7 eingeführt.

psetinfo

Zeiger auf optionale Eingabeparameter, die für diese Funktion mithilfe der JET_SETINFO-Struktur festgelegt werden können.

Wenn psetinfo als NULL angegeben wird, verhält sich die Funktion so, als ob eine itagSequence von 1 und ein ibLongValue von 0 (null) angegeben wurden. Dies führt dazu, dass der Spaltensatz den ersten Wert einer mehrwertigen Spalte und lange Daten ab Offset 0 (Null) festgelegt.

Für diesen Parameter können die folgenden Optionen festgelegt werden:

Wert

Bedeutung

ibLongValue

Binärer Offset in einen langen Spaltenwert, an dem die Setdaten beginnen sollen.

itagSequence

Sequenznummer des gewünschten mehrwertigen Spaltenwerts, der festgelegt werden soll. Wenn itagSequence auf 0 (null) festgelegt ist, sollte der angegebene Wert an das Ende der Sequenz der mehrwertigen Werte angefügt werden. Wenn die angegebene Sequenznummer größer als der letzte vorhandene mehrwertige Wert ist, wird der angegebene Wert erneut am Ende der Wertesequenz angefügt. Wenn die Sequenznummer einem vorhandenen Wert entspricht, wird dieser Wert durch den angegebenen Wert ersetzt.

Rückgabewert

Diese Funktion gibt den Datentyp JET_ERR 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_errBadColumnId

Die angegebene Spalten-ID liegt außerhalb der gesetzlichen Grenzen einer Spalten-ID.

JET_errClientRequestToStopJetService

Es ist nicht möglich, den Vorgang abzuschließen, da alle Aktivitäten auf der instance, die der Sitzung zugeordnet sind, aufgrund eines Aufrufs von JetStopService beendet wurden.

JET_errColumnNotFound

Die von der angegebenen Columnid beschriebene Spalte ist in der Tabelle nicht vorhanden.

JET_errColumnNotUpdatable

Es wurde ein illegaler Versuch unternommen, einen langen Wert während eines Kopierlöschvorgangs zu aktualisieren.

JET_errColumnTooBig

Die angegebenen Spaltenwertdaten, die im Eingabepuffer angegeben werden, überschreiten die Größenbeschränkung entweder natürlich für eine Spalte mit fester Länge oder konfiguriert für Text mit fester Länge oder binäre Spalten. Dieser Fehler wird auch zurückgegeben, wenn mehr als 1024 Bytes Daten für eine lange Spalte übergeben und das JET_bitSetIntrinsicLV-Flag festgelegt wird.

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.

Windows XP: Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben.

JET_errInvalidBufferSize

Die angegebene Spaltenwert-Datengröße stimmt nicht mit der natürlichen Größe des Datentyps mit fester Länge überein.

JET_errInvalidColumnType

Es wurde ein illegaler Versuch unternommen, eine Automatische Inkrementspalte entweder während eines Einfüge- oder Updatevorgangs zu aktualisieren oder eine Versionsspalte während eines Ersetzungsvorgangs zu aktualisieren.

JET_errInvalidgrbit

Die angegebenen Optionen sind unbekannt oder eine unzulässige Kombination bekannter Biteinstellungen.

JET_errInvalidParameter

Die angegebene psetinfo-cbStruct> ist keine gültige Größe für die JET_SETINFO-Struktur .

JET_errMultiValuedDuplicate

Der Vorgang der Setspalte hat versucht, einen doppelten Wert zu erstellen, und hat entweder JET_bitSetUniqueMultiValues oder JET_bitSetUniqueNormalizedMultiValues angegeben.

JET_errNotInitialized

Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete instance noch nicht initialisiert wurde.

JET_errNotInTransaction

Es wurde ein illegaler Versuch unternommen, einen langen Spaltenwert zu aktualisieren, wenn sich die aufrufende Sitzung nicht in einer Transaktion befand.

JET_errNullInvalid

Es wurde ein illegaler Versuch unternommen, eine Spalte ohne NULL auf NULL festzulegen.

JET_errColumnIllegalNull

Identisch mit JET_errNullInvalid.

JET_errRecordTooBig

Der Spaltenwert konnte nicht auf den Wert im Eingabepuffer festgelegt werden, da er dazu geführt hätte, dass der Datensatz seine Größenbeschränkung für die Seitengröße überschritten hätte. Spalten vom Typ JET_coltypLongText oder JET_coltypLongBinary können getrennt von den übrigen Datensatzdaten gespeichert werden. Allerdings müssen andere Spalten mit dem Datensatz gespeichert werden und können dazu führen, dass die Datensatzgrößenbeschränkung überschritten wird. Selbst lange Spalten benötigen 5 Bytes Speicherplatz innerhalb des Datensatzes als Verknüpfung, und auch dies kann dazu führen, dass JET_errRecordTooBig zurückgegeben werden.

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.

Windows XP: 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.

JET_errUpdateNotPrepared

Der Cursor ist derzeit weder dabei, einen neuen Datensatz einzufügen noch einen vorhandenen Datensatz zu aktualisieren.

JET_errVersionStoreOutOfMemory

Dieser Fehler tritt auf, wenn die konfigurierte Größe des Versionsspeichers nicht ausreicht, um alle ausstehenden Updates aufzunehmen.

JET_wrnColumnMaxTruncated

Der Spaltenwert im Eingabepuffer überschreitet die maximale konfigurierte Länge für eine Spalte mit variabler Länge und wurde abgeschnitten.

Bei Erfolg wird der gewünschte Teil eines Spaltenwerts für die angegebene Spalte mit Daten festgelegt, die aus dem Eingabepuffer kopiert wurden. Das Dataset wurde möglicherweise abgeschnitten, wenn es die maximale Länge überschritten hat, die für eine Spalte mit variabler Länge angegeben wurde.

Bei einem Fehler bleibt die Cursorposition unverändert, und im Kopierpuffer werden keine Spaltenwertdaten aktualisiert.

Bemerkungen

Das Festlegen von langen Werten und Werten für Spalten JET_coltypLongBinary vom Typ JET_coltypLongText oder JET_coltypLongBinary sollte nur erfolgen, wenn sich die aufrufende Sitzung in einer Transaktion befindet. Wenn sich die aufrufende Sitzung nicht in einer Transaktion befindet, können Änderungen an langen Werten, die separat gespeichert werden, auch dann vollständig committet werden, wenn der Aktualisierungsvorgang später abgebrochen wird. Wenn sich die aufrufende Sitzung in einer Transaktion befindet, können die Auswirkungen des Updates vollständig zurückgesetzt werden, indem das Update abgebrochen und die Sitzungstransaktion zurückgesetzt wird.

Indexupdates werden nicht als Ergebnis von JetSetColumn-Vorgängen ausgeführt. Stattdessen werden Indizes erst aktualisiert, nachdem alle Spaltenänderungen abgeschlossen sind und JetUpdate aufgerufen wird. Dies ermöglicht die effizienteste Aktualisierung von Indizes, wenn Indizes mehr als eine Spalte ändern.

Die Größe eines Datensatzes ist basierend auf der Seitengröße der Datenbank begrenzt. Alle langen Werte im Datensatz, die größer als fünf Bytes sind, werden getrennt vom Datensatz gespeichert, wenn die Daten im Datensatz aufgrund eines JetSetColumn-Vorgangs den Grenzwert überschreiten. Der Fehler JET_errRecordTooBig wird erst zurückgegeben, nachdem alle trennbaren Datensatzspaltendaten getrennt vom Datensatz gespeichert wurden und der Datensatz weiterhin das Grenzwert für die Datensatzgröße überschreitet.

Anforderungen

Anforderung Wert

Client

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

Server

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

Kopfzeile

Deklariert in Esent.h.

Bibliothek

Verwenden Sie ESENT.lib.

DLL

Erfordert ESENT.dll.

Weitere Informationen

JET_COLUMNID
JET_ERR
JET_SESID
JET_TABLEID
JET_SETINFO
JetRetrieveColumn
JetSetColumns