Funzione JetUpdate2

Si applica a: Windows | Windows Server

Funzione JetUpdate2

La funzione JetUpdate2 esegue un'operazione di aggiornamento, inclusa l'inserimento di una nuova riga in una tabella o l'aggiornamento di una riga esistente. Questa funzione contiene un elenco di opzioni grbit che possono essere impostate durante l'esecuzione di un aggiornamento. L'eliminazione di una riga di tabella viene eseguita chiamando JetDelete.

Windows Server 2003: JetUpdate2 viene introdotto in Windows Server 2003.

JetUpdate2 è il passaggio finale per eseguire un inserimento o un aggiornamento. L'aggiornamento viene avviato chiamando JetPrepareUpdate e quindi chiamando JetSetColumn o JetSetColumns una o più volte per impostare lo stato del record. Infine, JetUpdate2 viene chiamato per completare l'operazione di aggiornamento. Gli indici vengono aggiornati solo da JetUpdate o JetUpdate2 e non durante JetSetColumn o JetSetColumns.

    JET_ERR JET_API JetUpdate2(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out_opt     void* pvBookmark,
      __in          unsigned long cbBookmark,
      __out_opt     unsigned long* pcbActual,
      __in            const JET_GRBIT grbit
    );

Parametri

sesid

Sessione da usare per questa chiamata.

tableid

Cursore da usare per questa chiamata.

pvBookmark

Puntatore a un segnalibro restituito per una riga inserita.

cbBookmark

Dimensioni del buffer a cui fa riferimento pvBookmark.

pcbActual

Dimensione restituita del segnalibro per la riga inserita restituita in pvBookmark.

grbit

Un gruppo di bit che contengono le opzioni da usare per questa chiamata, che includono zero o più dei seguenti.

Valore

Significato

JET_bitUpdateCheckESE97Compatibility

Questo flag causa la restituzione di un errore se l'aggiornamento non sarebbe stato possibile nella versione di Windows 2000 di ESE, che ha applicato un numero massimo minimo di istanze di colonna multivalore in ogni record rispetto alle versioni successive di ESE. Questo è importante solo per le applicazioni che desiderano replicare i dati tra applicazioni ospitate in Windows 2000 e applicazioni ospitate in Windows Server 2003 o versioni successive di ESE. Non deve essere necessario per la maggior parte delle applicazioni.

Valore restituito

Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti seguenti. Per altre informazioni sugli errori ESE possibili, vedere Errori del motore di archiviazione estendibili e parametri di gestione degli errori.

Codice restituito

Descrizione

JET_errSuccess

Operazione riuscita.

JET_errBufferTooSmall

Il buffer specificato per il segnalibro di record non è abbastanza grande per archiviare il segnalibro del record.

JET_errClientRequestToStopJetService

Non è possibile completare l'operazione perché tutte le attività nell'istanza associata alla sessione non sono state interrotte in seguito a una chiamata a JetStopService.

JET_errDiskFull

L'operazione di aggiornamento richiede la crescita del file di database o l'allocazione del file di log, ma l'unità disco in cui risiede il file di database o la serie di log è completa. In alternativa, il file di database si trova in un volume formattato FAT32 e il file di database è già 4GBytes, il limite per file per FAT32.

JET_errInstanceUnavailable

Non è possibile completare l'operazione perché l'istanza associata alla sessione ha rilevato un errore irreversibile che richiede che l'accesso a tutti i dati venga revocato per proteggere l'integrità dei dati.

Windows XP: Questo errore verrà restituito solo da Windows XP e versioni successive.

JET_errInvalidParameter

Il parametro di prep specificato nella funzione JetPrepareUpdate non è un flag valido.

JET_errKeyDuplicate

Una chiave di indice per questo record è un duplicato di un'altra chiave di indice per un altro record già nella tabella e l'indice non consente duplicati.

JET_errKeyTruncated

Il record inserito o aggiornato ha uno o più indici per i quali la chiave generata ha superato le dimensioni massime consentite. Di conseguenza, l'operazione non è riuscita a impedire il troncamento della chiave.

JET_errMultiValuedIndexViolation

Il record inserito o aggiornato ha una colonna multivalore indicizzata con due o più valori identici all'interno delle dimensioni massime della chiave di lunghezza impostate per l'indice. Di conseguenza, il record ha due voci identiche nell'indice che non è valido.

JET_errNotInitialized

Non è possibile completare l'operazione perché l'istanza associata alla sessione non è ancora stata inizializzata.

JET_errNullInvalid

Una o più colonne nel record da inserire o nello stato aggiornato di un record sostituito è NULL che viola il vincolo definito per tali colonne.

JET_errNullKeyDisallowed

Uno o più indici non sono definiti per consentire una chiave NULL e lo stato inserito o aggiornato di un record sostituito viola questo vincolo definito.

JET_errRecordPrimaryChanged

Un'operazione di sostituzione dei record ha aggiornato la chiave primaria. Aggiornamenti alle colonne chiave primaria devono essere eseguite tramite l'eliminazione del record esistente e l'inserimento di un nuovo record con i dati desiderati.

JET_errRestoreInProgress

Non è possibile completare l'operazione perché un'operazione di ripristino è in corso nell'istanza associata alla sessione.

JET_errSessionSharingViolation

La stessa sessione non può essere usata contemporaneamente per più thread.

Windows XP: Questo errore verrà restituito solo da Windows XP e versioni successive.

JET_errTermInProgress

Non è possibile completare l'operazione perché l'istanza associata alla sessione viene arrestata.

JET_errUpdateNotPrepared

JetPrepareUpdate è stato chiamato con JET_prepCancel, ma il cursore non era nello stato preparato.

JET_errWriteConflict

Un'operazione di sostituzione dei record per cui un blocco di scrittura non è già allocato può riscontrare un conflitto di scrittura al momento dell'aggiornamento.

In caso di esito positivo, l'operazione di aggiornamento aperta sul cursore viene completata. Se per la tabella viene definita una colonna di incremento automatico, questo valore viene impostato per i record inseriti. Se per la tabella viene definita una colonna di versione, il relativo valore viene inizializzato per i record appena inseriti o incrementato ogni volta che viene sostituito un record. Tutti gli indici, inclusi gli indici cluster e non cluster, vengono aggiornati.

In caso di errore, non vengono apportate modifiche di qualsiasi tipo al database. Prima di inserire e prima di sostituire le funzioni di callback potrebbe essere stato chiamato, ma dopo l'inserimento e dopo la sostituzione dei callback non sarà stato chiamato, poiché quest'ultimo non può causare un errore di aggiornamento. Il buffer di copia del cursore viene lasciato nello stato preparato, in modo che l'opportunità esista per correggere in modo incrementale i problemi che hanno causato errori e riprovare l'operazione di aggiornamento.

Commenti

Le limitazioni delle dimensioni dei record vengono applicate da JetSetColumn e non in generale da JetUpdate. L'unica eccezione è quando viene usato il flag di compatibilità JET_bitUpdateCheckESE97Compatibility. In questo caso, l'intero record viene controllato poiché un'operazione JetSetColumn singola che ha superato il limite può essere compensata da una chiamata successiva a JetSetColumn.

Per altre informazioni, vedere la sezione Osservazioni in JetUpdate .

Requisiti

Requisito Valore

Client

Richiede Windows Vista.

Server

Richiede Windows Server 2008 o Windows Server 2003.

Intestazione

Dichiarato in Esent.h.

Libreria

Usare ESENT.lib.

DLL

Richiede ESENT.dll.

Vedere anche

JET_ERR
JET_SESID
JET_TABLEID
JetDelete
JetPrepareUpdate
JetRegisterCallback
JetRetrieveColumn
JetRetrieveColumns
JetSetColumn
JetSetColumns