Fonction JetUpdate

S’applique à : Windows | Windows Server

Fonction JetUpdate

La fonction JetUpdate effectue une opération de mise à jour incluant l’insertion d’une nouvelle ligne dans une table ou la mise à jour d’une ligne existante. La suppression d’une ligne de table s’effectue en appelant JetDelete.

JetUpdate est la dernière étape de l’exécution d’une insertion ou d’une mise à jour. La mise à jour commence en appelant JetPrepareUpdate , puis en appelant JetSetColumn ou JetSetColumns une ou plusieurs fois pour définir l’état de l’enregistrement. Enfin, JetUpdate est appelé pour terminer l’opération de mise à jour. Les index sont mis à jour uniquement par JetUpdate ou JetUpdate2, et non pendant JetSetColumn ou JetSetColumns.

    JET_ERR JET_API JetUpdate(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out_opt     void* pvBookmark,
      __in          unsigned long cbBookmark,
      __out_opt     unsigned long* pcbActual
    );

Paramètres

sesid

Session à utiliser pour cet appel.

tableid

Curseur à utiliser pour cet appel.

pvBookmark

Pointeur vers un signet retourné pour une ligne insérée.

cbBookmark

Taille de la mémoire tampon pointée par pvBookmark.

pcbActual

Taille retournée du signet pour la ligne insérée retournée dans pvBookmark.

Valeur renvoyée

Cette fonction retourne le type de données JET_ERR avec l’un des codes de retour suivants. Pour plus d’informations sur les erreurs ESE possibles, consultez Erreurs du moteur de stockage extensible et Paramètres de gestion des erreurs.

Code de retour

Description

JET_errSuccess

L’opération s’est terminée avec succès.

JET_errBufferTooSmall

La mémoire tampon donnée pour le signet d’enregistrement n’est pas suffisamment grande pour stocker le signet d’enregistrement.

JET_errClientRequestToStopJetService

Il n’est pas possible d’effectuer l’opération, car toutes les activités sur le instance associée à la session ont cessé à la suite d’un appel à JetStopService.

JET_errColumnIllegalNull

Identique à JET_errNullInvalid.

JET_errDiskFull

L’opération de mise à jour nécessite une croissance du fichier de base de données ou une allocation de fichiers journaux, mais le lecteur de disque où réside le fichier de base de données ou la série de journaux est plein. Sinon, le fichier de base de données se trouve sur un volume au format FAT32 et le fichier de base de données est déjà de 4 Go, la limite par fichier pour FAT32.

JET_errInstanceUnavailable

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session a rencontré une erreur irrécupérable qui nécessite que l’accès à toutes les données soit révoqué pour protéger l’intégrité de ces données.

Windows XP : Cette erreur sera retournée uniquement par Windows XP et les versions ultérieures.

JET_errInvalidParameter

Le paramètre prep donné dans la fonction JetPrepareUpdate n’est pas un indicateur valide.

JET_errKeyDuplicate

Une clé d’index pour cet enregistrement est un doublon d’une autre clé d’index pour un autre enregistrement déjà dans la table et l’index n’autorise pas les doublons.

JET_errKeyTruncated

L’enregistrement inséré ou mis à jour a un ou plusieurs index pour lesquels la clé générée aurait dépassé la taille maximale autorisée. Par conséquent, l’opération n’a pas pu empêcher la troncation de clé.

JET_errMultiValuedIndexViolation

L’enregistrement inséré ou mis à jour a une colonne à valeurs multiples indexée avec au moins deux valeurs identiques dans la taille de clé de longueur maximale définie pour l’index. Par conséquent, l’enregistrement a deux entrées identiques dans l’index, ce qui n’est pas valide.

JET_errNotInitialized

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session n’a pas encore été initialisé.

JET_errNullInvalid

Une ou plusieurs colonnes de l’enregistrement à insérer ou dans l’état mis à jour d’un enregistrement en cours de remplacement est NULL , ce qui enfreint la contrainte définie pour ces colonnes.

JET_errNullKeyDisallowed

Un ou plusieurs index sont définis pour ne pas autoriser une clé NULL et l’état inséré ou mis à jour d’un enregistrement en cours de remplacement enfreint cette contrainte définie.

JET_errRecordPrimaryChanged

Une opération de remplacement d’enregistrement a mis à jour la clé primaire. Mises à jour aux colonnes de clé primaire doit être effectuée en supprimant l’enregistrement existant et en insérant un nouvel enregistrement avec les données souhaitées.

JET_errRestoreInProgress

Il n’est pas possible d’effectuer l’opération, car une opération de restauration est en cours sur le instance associé à la session.

JET_errSessionSharingViolation

La même session ne peut pas être utilisée pour plusieurs threads en même temps.

Windows XP : Cette erreur sera retournée uniquement par Windows XP et les versions ultérieures.

JET_errTermInProgress

Il n’est pas possible d’effectuer l’opération, car le instance associé à la session est en cours d’arrêt.

JET_errTransReadOnly

Il est illégal de tenter une mise à jour à l’intérieur de l’étendue d’une transaction en lecture seule. Une transaction en lecture seule est une transaction qui a été démarrée à l’aide d’un appel à JetBeginTransaction2 avec JET_bitTransactionReadOnly.

Windows XP : Cette erreur sera retournée uniquement par Windows XP et les versions ultérieures.

JET_errUpdateNotPrepared

JetPrepareUpdate a été appelé avec JET_prepCancel, mais le curseur n’était pas dans l’état préparé.

JET_errVersionStoreOutOfMemory

L’opération a échoué, car la mémoire est insuffisante pour conserver les informations transactionnelles sur la mise à jour.

JET_errWriteConflict

Une autre session a précédemment verrouillé l’enregistrement pour la mise à jour. La mise à jour tentée par cette session échoue.

En cas de réussite, l’opération d’ouverture de mise à jour sur le curseur est terminée. Si une colonne d’incrémentation automatique est définie pour la table, cette valeur est définie pour les enregistrements insérés. Si une colonne de version est définie pour la table, sa valeur est initialisée pour les enregistrements nouvellement insérés ou incrémentée chaque fois qu’un enregistrement est remplacé. Tous les index, y compris les index cluster et non cluster, sont mis à jour.

En cas d’échec, aucune modification de quelque nature que ce soit n’est apportée à la base de données. Avant insertion et avant remplacement, les fonctions de rappel ont peut-être été appelées, mais après l’insertion et après les rappels de remplacement n’auront pas été appelés, car ce dernier ne peut pas provoquer l’échec d’une mise à jour. La mémoire tampon de copie du curseur est laissée dans son état préparé, de sorte que la possibilité existe de corriger de manière incrémentielle les problèmes qui ont provoqué des erreurs et de réessayer l’opération de mise à jour.

Notes

Les fonctions de rappel peuvent être inscrites pour être appelées avant ou après insertion, et avant ou après la mise à jour.

Les limitations de taille d’enregistrement sont appliquées par JetSetColumn, et non en général par JetUpdate.

Il est important de comprendre l’impact de l’exécution d’un grand nombre d’opérations de mise à jour à l’intérieur d’une seule transaction. Chaque mise à jour de la base de données doit être suivie par le moteur de base de données dans le magasin de versions. Le magasin de versions contient un enregistrement dynamique de toutes les différentes versions de chaque enregistrement ou entrée d’index dans la base de données, qui peut être vu par toutes les transactions actives. Ces versions sont utilisées pour prendre en charge le contrôle d’accès concurrentiel multi-version utilisé par le moteur de base de données pour prendre en charge les transactions utilisant l’isolation instantané. Une fois que le moteur de base de données a épuisé les ressources utilisées pour stocker ces versions, il ne peut plus accepter d’autres modifications tant que certaines transactions ne sont pas terminées pour permettre la récupération de ces ressources. Lorsque le moteur est dans cet état, toutes les mises à jour échouent avec JET_errVersionStoreOutOfMemory. Les ressources disponibles pour le moteur de base de données pour stocker ces versions peuvent être contrôlées à l’aide de JetSetSystemParameter avec JET_paramMaxVerPages et JET_paramGlobalMinVerPages.

Spécifications

Condition requise Valeur

Client

Nécessite Windows Vista, Windows XP ou Windows 2000 Professionnel.

Serveur

Nécessite Windows Server 2008, Windows Server 2003 ou Windows 2000 Server.

En-tête

Déclaré dans Esent.h.

Bibliothèque

Utilisez ESENT.lib.

DLL

Nécessite ESENT.dll.

Voir aussi

JET_ERR
JET_SESID
JET_TABLEID
JetDelete
JetPrepareUpdate
JetRegisterCallback
JetRetrieveColumn
JetRetrieveColumns
JetSetColumn
JetSetColumns
JetSetSystemParameter
Paramètres système