JetEscrowUpdate-Funktion

Letzte Änderung: Freitag, 27. Februar 2015

Gilt für: Windows | Windows Server

JetEscrowUpdate-Funktion

Die Funktion JetEscrowUpdate führt eine unteilbare Addition auf eine Spalte. Mit dieser Funktion können mehrere Sitzungen, um den Eintrag ohne Konflikte gleichzeitig zu aktualisieren.

JET_ERR JET_API JetEscrowUpdate(
  __in          JET_SESID sesid,
  __in          JET_TABLEID tableid,
  __in          JET_COLUMNID columnid,
  __in          void* pv,
  __in          unsigned long cbMax,
  __out_opt     void* pvOld,
  __in          unsigned long cbOldMax,
  __out_opt     unsigned long* pcbOldActual,
  __in          JET_GRBIT grbit
);

Parameter

sesid

Die Sitzung für diesen Aufruf verwenden.

TableID

Der Mauszeiger für dieses Anrufs verwenden.

Spalten-ID

Die Spalten-ID der Spalte aktualisiert werden.

BW

Ein Zeiger auf einen Puffer mit dem Addend für die Spalte.

cbMax

Die Größe des Puffers, die den Addend enthält.

pvOld

Den Ausgabepuffer, die den aktuellen Wert der Spalte entgegennimmt, wie in der Datenbank gespeichert (Versionsverwaltung wird ignoriert).

cbOldMax

Die maximale Größe des Ausgabepuffers, die den aktuellen Wert der Spalte entgegennimmt. Derzeit nur JET_coltypLong wird unterstützt, damit der Puffer entweder 4 Bytes oder 0 Byte lang sein muss. Wenn PvOld NULL ist, sollte die CbOldMax 0 sein.

pcbOldActual

Empfängt die tatsächliche Datenmenge unformatierten Wert in den Ausgabepuffer empfangen.

JET_errInvalidGrbit

Eine Gruppe von Bits 0 (null) oder mehrere der folgenden Optionen angeben.

Wert

Bedeutung

JET_bitEscrowNoRollback

Dieses Update wird nicht rückgängig gemacht werden, selbst wenn die Sitzung der hinterlegten Aktualisierung der Transaktionsrollback hat. Beachten Sie, dass als das Protokoll Datensätze können nicht geleert werden Datenträger, letzte hinterlegten Updates dieses Flag fertig verloren, wenn ein Absturz vorhanden ist.

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.

JET_errAlreadyPrepared

Der Cursor hat ein Update mit JetPrepareUpdatevorbereitet.

JET_errClientRequestToStopJetService

Es ist nicht möglich, den Vorgang abzuschließen, da alle Aktivitäten auf die Instanz der Sitzung zugeordnet aufgrund eines Aufrufs von JetStopServicebehoben ist.

JET_errInstanceUnavailable

Es ist nicht möglich, den Vorgang abzuschließen, da die Instanz der Sitzung zugeordnet ein schwerwiegender Fehler, der erforderlich sind aufgetreten wurde, dass der Zugriff auf alle Daten gesperrt werden, um die Integrität der Daten zu schützen. Dieser Fehler wird nur von Windows XP und spätere Versionen zurückgegeben werden.

JET_errInvalidBufferSize

Eine ungültige Puffergröße wurde übergeben. Derzeit nur JET_coltypLong wird unterstützt, damit der Puffer 4 Bytes sein muss.

JET_errInvalidOperation

Eine ungültige Spalte es wurde angegeben. Die Spalte muss mit der angegebenen JET_bitColumnEscrowUpdate erstellt werden. Nur feste Spalten JET_coltypLong können als aktualisierbar hinterlegten angegeben werden.

JET_errNoCurrentRecord

Cursor muss für einen Datensatz, um eine Spalte zu aktualisieren.

JET_errNotInTransaction

Hinterlegten Updates können nur von Sitzungen in einer Transaktion ausgeführt werden.

JET_errNotInitialized

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

JET_errPermissionDenied

Cursor nicht nur gelesen werden und einen Datensatz zu aktualisieren.

JET_errRestoreInProgress

Es ist nicht möglich, den Vorgang abzuschließen, da ein Restore-Vorgang in Arbeit auf die Instanz der Sitzung zugeordnet ist.

JET_errSessionSharingViolation

Die gleiche Sitzung kann nicht gleichzeitig von mehr als einem Thread verwendet werden. Dieser Fehler wird nur von Windows XP und spätere Versionen zurückgegeben werden.

JET_errTermInProgress

Es ist nicht möglich, den Vorgang abzuschließen, da die Instanz der Sitzung zugeordnet heruntergefahren wird.

JET_errTransReadOnly

Sitzung benötigen Schreibberechtigung für einen Datensatz zu aktualisieren.

JET_errWriteConflict

Der Fehler zurückgegeben, wenn ein Update miteinander in Konflikt stehende angefordert wird.

Anmerkungen

Normalerweise, wenn zwei Sitzungen versuchen, einen Datensatz gleichzeitig aktualisieren, wird die zweite Sitzung eine JET_errWriteConflict Fehlermeldung, wenn es sich bei die Sitzungen vollständig serialisiert werden. Um zwei Sitzungen serialisieren, die den gleichen Datensatz zu aktualisieren, muss die zweite Sitzung Transaktionsprotokoll starten, nachdem die erste Transaktion die Transaktion ein Commit ausgeführt. Weitere Informationen finden Sie unter JetBeginTransaction .

Mehrere Spalten in demselben Datensatz können hinterlegten aktualisiert werden. Die Updates wirken sich nicht gegenseitig.

Nur JetEscrowUpdate Vorgänge sind miteinander kompatibel. Wenn zwei verschiedene Sitzungen Vorbereiten von Updates oder den Eintrag löschen, wird ein Konflikt Write generiert.

Sitzung B
JetEscrowUpdate

JetPrepareUpdate

JetDelete

JetEscrowUpdate

JET_errSuccess

JET_errWriteConflict

JET_errWriteConflict

JetUpdate

JET_errWriteConflict

JET_errWriteConflict

JET_errWriteConflict

Eine Sitzung

JetDelete

JET_errWriteConflict

JET_errWriteConflict

JET_errWriteConflict

Hinterlegten Vorgänge Datensatzverwalter und mithilfe von JetRollback (es sei denn, JET_bitEscrowNoRollback angegeben wurde) rückgängig gemacht werden. JetEscrowUpdate gibt den unformatierten Wert der Spalte in der Datenbank gespeichert, wird erreicht, da eine Anwendung möglicherweise eine spezielle Aktion, wenn ein Sentinelwert durchführen möchten. JetRetrieveColumn gibt die ordnungsgemäß mit Versionsangabe Ansicht der Spalte ignorieren Aktualisierungen durch gleichzeitige Sitzungen zurück.

Zwei Sitzungen auf die gleiche Spalte eines Datensatzes wird angegeben, können wir sehen, wie dies funktioniert. Wird davon ausgegangen Sie, dass die Spalte mit dem Wert 0 beginnt.

Sitzung

Verwendung

Gespeicherter Wert

Rückgabewert

A

JetBeginTransation

A

JetBeginTransation

0

A

JetEscrowUpdate (4)

4

0

A

JetRetrieveColumn

4

B

JetBeginTransaction

B

JetRetrieveColumn

0

B

JetEscrowUpdate (3)

7

4

B

JetRetrieveColumn

3

A

JetEscrowUpdate (2)

9

7

A

JetEscrowUpdate (-7)

2

9

B

JetRetrieveColumn

3

A

JetRetrieveColumn

-1

B

JetRollback

-1

A

JetRetrieveColumn

-1

Ersetzen einen Datensatz in der gleichen Transaktion, die Aktualisierungen zu einem Datensatz hinterlegten ausführt, wird nicht empfohlen. Insbesondere, wenn ein Update für einen Datensatz mit einem JET_TABLEID und einem anderen JET_TABLEID wird verwendet vorbereitet wurde, um das Update hinterlegten den Eintrag verloren der hinterlegten aktualisiert JetUpdate aufgerufen wird. In diesem Fall, auch wenn die Spalte hinterlegten während des Updates nicht festgelegt wurde.

Wenn eine aktualisierbare hinterlegten-Spalte den Wert NULL hat, kann besonderes Verhalten ausgelöst werden. Dieses Verhalten tritt nur auf, wenn eine Operation JetEscrowUpdate bewirkt, die Spalte dass, um den Wert 0 (null) aufweisen. Die Aktion geschieht nicht sofort, aber es tritt ein, nachdem die Transaktion, durch die die Spalte den Wert NULL besitzen wurde ein Commit ausgeführt. Die Spalte muss den Wert NULL immer noch (d. h., wenn keine anderen Sitzungen die Spalte geändert haben). Wenn die Spalte mit JET_bitColumnDeleteOnZero erstellt wurde, wird der Datensatz mit der Spalte gelöscht werden. Wenn die Spalte mit JET_bitColumnFinalize erstellt wurde, und klicken Sie dann ein Rückruf ausgegeben wird. Ein Absturz kann dazu führen, dass diese Aktionen nicht für erfolgen, aber online-Wartung (mit der Funktion JetDefragment ) werden die Aktionen ordnungsgemäß wiederholen.

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_COLUMNID
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetBeginTransaction
JetDefragment
JetPrepareUpdate
JetRetrieveColumn
JetRollback
JetStopService
JetUpdate