Función JetPrepareUpdate

Se aplica a: Windows | Windows Server

Función JetPrepareUpdate

La función JetPrepareUpdate es la primera operación en realizar una actualización, con el fin de insertar un nuevo registro o reemplazar un registro existente por nuevos valores. Novedades se realizan llamando a JetPrepareUpdate y, a continuación, llamando a JetSetColumn o JetSetColumns cero o más veces y finalmente llamando a JetUpdate para completar la operación. JetPrepareUpdate y JetUpdate establecen los límites de una operación de actualización y son importantes al tener solo el estado de actualización final de un registro especificado en los índices. Esto es más eficaz, pero también es necesario en los casos en los que los datos deben coincidir con un estado válido a través de más que en la operación de establecer columna.

Hay algunas opciones diferentes para insertar o reemplazar registros y se describen con más detalle a continuación.

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

Parámetros

sesid

Sesión que se va a usar para esta llamada.

tableid

Cursor que se va a usar para esta llamada.

Preparación

Las opciones que se pueden usar para prepararse para una actualización, que incluyen lo siguiente.

Valor

Significado

JET_prepCancel

Esta marca hace que JetPrepareUpdate cancele la actualización de este cursor.

JET_prepInsert

Esta marca hace que el cursor se prepare para una inserción de un nuevo registro. Todos los datos se inicializan en el estado predeterminado del registro. Si la tabla tiene una columna de incremento automático, se asigna un nuevo valor a este registro, independientemente de si la actualización se realiza correctamente, produce un error o se cancela.

JET_prepInsertCopy

Esta marca hace que el cursor se prepare para una inserción de una copia del registro existente. Debe haber un registro actual si se usa esta opción. El estado inicial del nuevo registro se copia del registro actual. Los valores largos que se almacenan fuera del registro se copian virtualmente.

JET_prepInsertCopyDeleteOriginal

Esta marca hace que el cursor se prepare para una inserción del mismo registro y una eliminación o el registro original. Se usa en los casos en los que ha cambiado la clave principal.

JET_prepReplace

Esta marca hace que el cursor se prepare para un reemplazo del registro actual. Si la tabla tiene una columna de versión, la columna de versión se establece en el siguiente valor de su secuencia. Si esta actualización no se completa, el valor de versión del registro no se verá afectado. Se toma un bloqueo de actualización en el registro para evitar que otras sesiones actualicen este registro antes de que se complete esta sesión.

JET_prepReplaceNoLock

Esta marca es similar a JET_prepReplace, pero no se toma ningún bloqueo para evitar que otras sesiones actualicen este registro. En su lugar, esta sesión puede recibir JET_errWriteConflict cuando llama a JetUpdate para completar la actualización.

Valor devuelto

Esta función devuelve el tipo de datos JET_ERR con uno de los siguientes códigos de retorno. Para obtener más información sobre los posibles errores de ESE, vea Extensible Storage Engine Errors and Error Handling Parameters.

Código devuelto

Descripción

JET_errSuccess

La operación se ha completado correctamente.

JET_errAlreadyPrepared

Se llamó a JetPrepareUpdate con una marca válida para la preparación, pero no JET_prepCancel y el cursor ya estaba en estado preparado.

JET_errClientRequestToStopJetService

No es posible completar la operación porque toda la actividad de la instancia asociada a la sesión ha dejado de funcionar como resultado de una llamada a JetStopService.

JET_errInstanceUnavailable

No es posible completar la operación porque la instancia asociada a la sesión ha encontrado un error irrecuperable que requiere que se revoque el acceso a todos los datos para proteger la integridad de esos datos. Windows XP solo devolverá este error y versiones posteriores.

JET_errInvalidParameter

La marca de preparación especificada no es una marca válida.

JET_errNotInitialized

No es posible completar la operación porque la instancia asociada a la sesión aún no se ha inicializado.

JET_errNotInTransaction

Se llamó a JetPrepareUpdate para reemplazar un registro que tenía columnas SLV. Columnas SLV. Tenga en cuenta que las columnas SLV son una característica que no está pensada para el uso general. Esta característica se usa para admitir la infraestructura de Microsoft Exchange y no está pensada para usarse en la aplicación.

JET_errRestoreInProgress

No es posible completar la operación porque hay una operación de restauración en curso en la instancia asociada a la sesión.

JET_errRollbackError

Se llamó a JetPrepareUpdate con JET_prepCancel pero no pudo revertir todos los cambios realizados en columnas de tipo JET_coltypLongText o columnas de tipo JET_coltypLongBinary.

JET_errSessionSharingViolation

Esta marca no se puede usar con la misma sesión de más de un subproceso al mismo tiempo. Windows XP solo devolverá este error y versiones posteriores.

JET_errTermInProgress

No es posible completar la operación porque se está cerrando la instancia asociada a la sesión.

JET_errUpdateNotPrepared

Se llamó a JetPrepareUpdate con JET_prepCancel pero el cursor no estaba en estado preparado.

Si se ejecuta correctamente, el cursor se cambia al estado preparado con el fin de la actualización deseada, o en el caso de JET_prepCancel, el cursor se revierte al estado no preparado y se descartan los cambios.

En caso de error, el estado del cursor se deja sin cambios. Si el error se JET_errRollbackError, el estado del cursor se cambia al estado no preparado, pero no se han revertido todos los cambios.

Comentarios

Insertar una copia de un registro es una optimización importante cuando los registros comparten datos de tipo JET_coltypLongText o JET_coltypLongBinary. Estos datos se almacenan fuera de registro cuando son grandes y es posible que varios registros compartan la misma representación física de los datos. En este caso, los datos se pueden actualizar desde cualquier registro, pero si lo hace, los datos se expandirán de forma que cada registro tenga su propia copia. No es posible cambiar los datos de un registro mediante una modificación de otro registro. Además, no es posible bloquear una actualización de un registro mediante una actualización de otro registro. Se trata de una característica central para ESE y se conoce como bloqueo de nivel de registro.

Las operaciones jetUpdate que producen un error dejan el cursor en el estado preparado de actualización. Esto permite corregir algunos errores, como un valor de columna incorrecto, sin necesidad de volver a crear el estado de actualización. Esto significa que, en todos los casos en los que un cursor abandona una actualización, debe llamar explícitamente a JetPrepareUpdate con JET_prepCancel.

Requisitos

Requisito Value

Cliente

Requiere Windows Vista, Windows XP o Windows 2000 Professional.

Servidor

Requiere Windows Server 2008, Windows Server 2003 o Windows 2000 Server.

Encabezado

Declarado en Esent.h.

Library

Use ESENT.lib.

Archivo DLL

Requiere ESENT.dll.

Consulte también

JET_ERR
JET_SESID
JET_TABLEID
JetRetrieveColumn
JetSetColumn
JetUpdate