Función JetRetrieveKey

Se aplica a: Windows | Windows Server

Función JetRetrieveKey

La función JetRetrieveKey recupera la clave de la entrada de índice en la posición actual de un cursor. Estas claves se construyen mediante llamadas a JetMakeKey. A continuación, la clave recuperada se puede usar para devolver eficazmente ese cursor a la misma entrada de índice mediante una llamada a JetSeek.

    JET_ERR JET_API JetRetrieveKey(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out_opt     void* pvData,
      __in          unsigned long cbMax,
      __out_opt     unsigned long* pcbActual,
      __in          JET_GRBIT grbit
    );

Parámetros

sesid

La sesión que se va a usar para esta llamada.

tableid

Cursor que se va a usar para esta llamada.

pvData

Búfer de salida que recibirá la clave.

cbMax

Tamaño máximo en bytes del búfer de salida.

pcbActual

Recibe el tamaño real en bytes de la clave.

Si este parámetro es NULL, no se devolverá el tamaño real de la clave.

Si el búfer de salida es demasiado pequeño, se devolverá el tamaño real de la clave. Esto significa que este número será mayor que el tamaño del búfer de salida.

grbit

Un grupo de bits que contienen las opciones que se usarán para esta llamada, que incluyen cero o más de lo siguiente.

Valor

Significado

JET_bitRetrieveCopy

Cuando se especifica, el motor devolverá la clave de búsqueda del cursor. La clave de búsqueda se crea con una o varias llamadas anteriores a JetMakeKey con el fin de buscar esa clave mediante JetSeek o establecer un intervalo de índices mediante JetSetIndexRange.

Valor devuelto

Esta función devuelve el JET_ERR tipo de datos 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_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. Este error solo lo devolverá Windows XP y versiones posteriores.

JET_errKeyNotMade

No hay ninguna clave de búsqueda actual para el cursor. Esto ocurrirá para JetRetrieveKey si se especifica JET_bitRetrieveCopy y no se ha construido una clave de búsqueda para este cursor mediante una llamada anterior a JetMakeKey. La clave de búsqueda se eliminará mediante una llamada previa a cualquier API de navegación en el cursor que no sea JetMove.

JET_errNoCurrentRecord

El cursor no se coloca en un registro. Esto puede ocurrir por diversos motivos. Por ejemplo, esto ocurrirá si el cursor se coloca actualmente después del último registro del índice actual.

JET_errNotInitialized

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

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

No se puede usar la misma sesión para más de un subproceso al mismo tiempo. Este error solo lo devolverá Windows XP y versiones posteriores.

JET_errTermInProgress

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

JET_wrnBufferTruncated

La operación se completó correctamente, pero el búfer de salida era demasiado pequeño para recibir toda la clave. El búfer de salida se ha rellenado con la mayor parte de la clave que cabría. También se ha devuelto el tamaño real de la clave, si se solicita.

Nota Este error no se devolverá si se especifica JET_bitRetrieveCopy. Consulte la sección Comentarios para obtener más información.

Si se ejecuta correctamente, la clave de la entrada de índice en la posición actual de un cursor se devolverá en el búfer de salida. Si se devuelve JET_wrnBufferTruncated, el búfer de salida contendrá la mayor parte de la clave que caberá en el espacio proporcionado y el tamaño real de la clave será preciso. No se producirá ningún cambio en el estado de la base de datos.

Si se produce un error, el estado del búfer de salida y el tamaño real de la clave no se definirán. No se producirá ningún cambio en el estado de la base de datos.

Comentarios

Por lo general, las claves se deben tratar como fragmentos opacos de datos. No se debe intentar aprovechar la estructura interna de estos datos. Sin embargo, se pueden conocer las siguientes propiedades sobre todas las claves DE ESENT:

  • Las claves se pueden comparar entre sí mediante la función memcmp para establecer su ordenación relativa en el índice de origen en la tabla de las entradas del índice de origen.

  • No tiene sentido comparar las claves de las entradas de índice de los distintos índices entre sí.

  • Una clave siempre es menor o igual que JET_cbKeyMost (255) bytes de longitud antes de Windows Vista. En Windows Vista y versiones posteriores, las claves pueden ser mayores. El tamaño máximo de una clave es igual al valor actual de JET_paramKeyMost.

Además de las propiedades anteriores de las claves ESENT en general, es importante tener en cuenta que una clave de búsqueda es diferente de la clave para una entrada de índice. En concreto, una clave de búsqueda puede ser mayor que una clave normal. Esta longitud adicional se produce cuando se usa una opción comodín al construir la clave de búsqueda. Consulte JetMakeKey para obtener más información.

Hay un error importante en esta API que está presente en todas las versiones. Si se solicita la clave de búsqueda con el uso de JET_bitRetrieveCopy y el búfer de salida es demasiado pequeño para recibir toda la clave, no se devolverá JET_wrnBufferTruncated. JET_errSuccess se devolverá en su lugar. Es importante comprobar que el tamaño real de la clave tal y como se devuelve mediante pcbActual es menor o igual que el tamaño del búfer de salida. Si el tamaño real es mayor que el tamaño del búfer de salida, el autor de la llamada de JetRetrieveKey debe reaccionar como si se devolvieran JET_wrnBufferTruncated en su lugar.

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_GRBIT
JET_SESID
JET_TABLEID
JetMakeKey
JetSeek
JetSetIndexRange