Freigeben über


JetPrepareUpdate-Funktion

Gilt für: Windows | Windows Server

JetPrepareUpdate-Funktion

Die JetPrepareUpdate-Funktion ist der erste Vorgang beim Ausführen einer Aktualisierung, um einen neuen Datensatz einzufügen oder einen vorhandenen Datensatz durch neue Werte zu ersetzen. Updates erfolgen, indem Sie JetPrepareUpdate aufrufen, dann JetSetColumn oder JetSetColumns 0 oder mehr Mal aufrufen und schließlich JetUpdate aufrufen, um den Vorgang abzuschließen. JetPrepareUpdate und JetUpdate legen die Grenzen für einen Aktualisierungsvorgang fest und sind wichtig, wenn nur der endgültige Aktualisierungsstatus eines Datensatzes in Indizes eingegeben wird. Dies ist effizienter, aber auch in Fällen erforderlich, in denen Die Daten mit einem gültigen Zustand übereinstimmen müssen, indem mehr als ein festgelegter Spaltenvorgang ausgeführt wird.

Es gibt einige verschiedene Optionen zum Einfügen oder Ersetzen von Datensätzen, die im Folgenden ausführlicher beschrieben werden.

    JET_ERR JET_API JetPrepareUpdate(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          unsigned long prep
    );

Parameter

sesid

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

tableid

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

Prep

Die Optionen, die zur Vorbereitung auf ein Update verwendet werden können, einschließlich der folgenden Optionen.

Wert

Bedeutung

JET_prepCancel

Dieses Flag bewirkt , dass JetPrepareUpdate das Update für diesen Cursor abbricht.

JET_prepInsert

Dieses Flag bewirkt, dass sich der Cursor auf das Einfügen eines neuen Datensatzes vorbereitet. Alle Daten werden mit dem Standardzustand für den Datensatz initialisiert. Wenn die Tabelle über eine Spalte für automatisches Inkrement verfügt, wird diesem Datensatz ein neuer Wert zugewiesen, unabhängig davon, ob das Update letztendlich erfolgreich ist, fehlschlägt oder abgebrochen wird.

JET_prepInsertCopy

Dieses Flag bewirkt, dass der Cursor das Einfügen einer Kopie des vorhandenen Datensatzes vorbereitet. Wenn diese Option verwendet wird, muss ein aktueller Datensatz vorhanden sein. Der Anfangszustand des neuen Datensatzes wird aus dem aktuellen Datensatz kopiert. Lange Werte, die off-record gespeichert werden, werden virtuell kopiert.

JET_prepInsertCopyDeleteOriginal

Dieses Flag bewirkt, dass sich der Cursor auf ein Einfügen desselben Datensatzes und einen Löschvorgang oder den ursprünglichen Datensatz vorbereitet. Es wird in Fällen verwendet, in denen sich der Primärschlüssel geändert hat.

JET_prepReplace

Dieses Flag bewirkt, dass sich der Cursor auf eine Ersetzung des aktuellen Datensatzes vorbereitet. Wenn die Tabelle über eine Versionsspalte verfügt, wird die Versionsspalte auf den nächsten Wert in ihrer Sequenz festgelegt. Wenn dieses Update nicht abgeschlossen ist, ist der Versionswert im Datensatz nicht betroffen. Für den Datensatz wird eine Updatesperre ausgeführt, um zu verhindern, dass andere Sitzungen diesen Datensatz aktualisieren, bevor diese Sitzung abgeschlossen ist.

JET_prepReplaceNoLock

Dieses Flag ähnelt JET_prepReplace, aber es wird keine Sperre ergriffen, um zu verhindern, dass andere Sitzungen diesen Datensatz aktualisieren. Stattdessen erhält diese Sitzung möglicherweise JET_errWriteConflict, wenn JetUpdate aufgerufen wird, um das Update abzuschließen.

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_errAlreadyPrepared

JetPrepareUpdate wurde mit einem gültigen Flag für die Vorbereitung aufgerufen, aber nicht JET_prepCancel, und der Cursor befand sich bereits im vorbereiteten Zustand.

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_errInvalidParameter

Das angegebene Präpflag ist kein gültiges Flag.

JET_errNotInitialized

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

JET_errNotInTransaction

JetPrepareUpdate wurde aufgerufen, um einen Datensatz mit SLV-Spalten zu ersetzen. SLV-Spalten. Beachten Sie, dass SLV-Spalten ein Feature sind, das nicht für die allgemeine Verwendung vorgesehen ist. Dieses Feature wird zur Unterstützung der Microsoft Exchange-Infrastruktur verwendet und ist nicht für die Verwendung in Ihrer Anwendung vorgesehen.

JET_errRestoreInProgress

Es ist nicht möglich, den Vorgang abzuschließen, da auf dem der Sitzung zugeordneten instance ein Wiederherstellungsvorgang ausgeführt wird.

JET_errRollbackError

JetPrepareUpdate wurde mit JET_prepCancel aufgerufen, konnte aber nicht alle Änderungen an Spalten vom Typ JET_coltypLongText und/oder Spalten vom Typ JET_coltypLongBinary zurücksetzen.

JET_errSessionSharingViolation

Dieses Flag kann nicht mit derselben Sitzung aus mehr als einem Thread 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.

JET_errUpdateNotPrepared

JetPrepareUpdate wurde mit JET_prepCancel aufgerufen, aber der Cursor befand sich nicht im vorbereiteten Zustand.

Bei Erfolg wird der Cursor zum Zweck der gewünschten Aktualisierung in den vorbereiteten Zustand geändert, oder im Fall von JET_prepCancel wird der Cursor in den nicht vorbereiteten Zustand zurückgesetzt, und alle Änderungen werden verworfen.

Bei einem Fehler bleibt der Cursorzustand unverändert. Wenn der Fehler JET_errRollbackError wurde, wird der Cursorzustand in den nicht vorbereiteten Zustand geändert, aber nicht alle Änderungen wurden rückgängig gemacht.

Bemerkungen

Das Einfügen einer Kopie eines Datensatzes ist eine wichtige Optimierung, wenn Datensätze Daten vom Typ JET_coltypLongText und/oder JET_coltypLongBinary freigeben. Diese Daten werden off-record gespeichert, wenn sie groß sind, und es ist möglich, dass mehrere Datensätze dieselbe physische Darstellung der Daten verwenden. In diesem Fall können die Daten aus beiden Datensätzen aktualisiert werden, aber dadurch werden die Daten so geplatzt, dass jeder Datensatz über eine eigene Kopie verfügt. Es ist nicht möglich, Daten in einem Datensatz durch eine Änderung aus einem anderen Datensatz zu ändern. Außerdem ist es nicht möglich, eine Aktualisierung eines Datensatzes durch ein Update eines anderen Datensatzes zu blockieren. Dies ist ein zentrales Feature für ESE und wird als Record Level Locking bezeichnet.

JetUpdate-Vorgänge , bei denen ein Fehler auftritt, lassen den Cursor im updatebereiten Zustand zurück. Dies ermöglicht die Korrektur einiger Fehler, z. B. eines falschen Spaltenwerts, ohne dass der Aktualisierungszustand neu erstellt werden muss. Dies bedeutet, dass in allen Fällen, in denen ein Cursor ein Update beendet, JetPrepareUpdate explizit mit JET_prepCancel aufrufen muss.

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_ERR
JET_SESID
JET_TABLEID
JetRetrieveColumn
JetSetColumn
JetUpdate