Función JetMakeKey
Se aplica a: Windows | Windows Server
Función JetMakeKey
La función JetMakeKey crea claves de búsqueda que se pueden usar para buscar un conjunto de entradas en un índice mediante algunos criterios de búsqueda simples en sus valores de columna de clave. Una clave de búsqueda también es una de las propiedades intrínsecas de un cursor y se usa en las operaciones JetSeek y JetSetIndexRange para buscar entradas de índice que coincidan con estos criterios de búsqueda en el índice actual de ese cursor. Una clave de búsqueda completa se crea en una serie de llamadas JetMakeKey donde cada llamada se usa para cargar el valor de columna para la siguiente columna de clave del índice actual de un cursor. También es posible cargar una clave de búsqueda construida previamente que se ha recuperado del cursor mediante JetRetrieveKey.
JET_ERR JET_API JetMakeKey(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in_opt const void* pvData,
__in unsigned long cbData,
__in JET_GRBIT grbit
);
Parámetros
sesid
Sesión que se va a usar para esta llamada.
tableid
Cursor que se va a usar para esta llamada.
pvData
Búfer de entrada que contiene los datos de columna para la columna de clave actual del índice actual del cursor para el que se construye la clave de búsqueda.
El tipo de datos de la columna de los datos del búfer de entrada debe coincidir exactamente con el tipo de datos y otras propiedades de la definición de columna de la columna de clave actual. No se realiza ninguna coerción de tipos en los datos de columna.
Si JET_bitNormalizedKey se especifica en el parámetro grbit , el búfer de entrada debe contener una clave de búsqueda construida anteriormente. Estas claves se obtienen mediante una llamada a JetRetrieveKey.
cbData
Tamaño en bytes de los datos de columna proporcionados en el búfer de entrada.
Si JET_bitNormalizedKey se especifica en el parámetro grbit , este es el tamaño de la clave de búsqueda proporcionada en el búfer de entrada.
Si el tamaño de los datos de columna es cero, se omite el contenido del búfer de entrada. Si JET_bitKeyDataZeroLength se especifica en el parámetro grbit y la columna de clave actual del índice actual del cursor es una columna de longitud variable, se supone que los datos de la columna de entrada son un valor de longitud cero. De lo contrario, se supone que los datos de la columna de entrada son un valor NULL.
grbit
Un grupo de bits que especifica cero o más de las siguientes opciones.
Valor |
Significado |
---|---|
JET_bitFullColumnEndLimit |
La clave de búsqueda debe construirse de forma que las columnas de clave que vienen después de la columna de clave actual se consideran caracteres comodín. Esto significa que la clave de búsqueda construida se puede usar para buscar coincidencias con las entradas de índice que tienen lo siguiente:
Esta opción se debe usar al compilar claves de búsqueda con caracteres comodín para buscar entradas de índice más cercanas al final de un índice. El final del índice es la entrada de índice que se encuentra al pasar al último registro de ese índice. El final del índice no es el mismo que el extremo superior del índice, que puede cambiar según el criterio de ordenación de las columnas de clave del índice. Esta opción solo está disponible en Windows XP y versiones posteriores. |
JETbitFullColumnStartLimit |
La clave de búsqueda debe construirse de modo que las columnas de clave que vienen después de la columna de clave actual se deben considerar como caracteres comodín. Esto significa que la clave de búsqueda construida se puede usar para buscar coincidencias con las entradas de índice que tienen lo siguiente:
Esta opción se debe usar al compilar claves de búsqueda con caracteres comodín para buscar entradas de índice más cercanas al inicio de un índice. El inicio del índice es la entrada de índice que se encuentra al pasar al primer registro de ese índice. El inicio del índice no es el mismo que el extremo inferior del índice, que puede cambiar según el criterio de ordenación de las columnas de clave del índice. Esta opción solo está disponible en Windows XP y versiones posteriores. |
JET_bitKeyDataZeroLength |
Si el tamaño del búfer de entrada es cero y la columna de clave actual es una columna de longitud variable, esta opción indica que el búfer de entrada contiene un valor de longitud cero. De lo contrario, un tamaño de búfer de entrada de cero indicaría un valor NULL. |
JET_bitNewKey |
Se debe construir una nueva clave de búsqueda. Se descarta cualquier clave de búsqueda existente anteriormente. |
JET_bitNormalizedKey |
Cuando se especifica esta opción, se omiten todas las demás opciones, se descarta cualquier clave de búsqueda existente anteriormente y el contenido del búfer de entrada se carga como la nueva clave de búsqueda. |
JET_bitPartialColumnEndLimit |
La clave de búsqueda debe construirse de forma que la columna de clave actual se considere un carácter comodín de prefijo y que las columnas de clave que vienen después de la columna de clave actual deben considerarse caracteres comodín. Esto significa que la clave de búsqueda construida se puede usar para buscar coincidencias con las entradas de índice que tienen lo siguiente:
Esta opción se debe usar al compilar claves de búsqueda con caracteres comodín para buscar entradas de índice más cercanas al final de un índice. El final del índice es la entrada de índice que se encuentra al pasar al último registro de ese índice. El final del índice no es el mismo que el extremo superior del índice, que puede cambiar según el criterio de ordenación de las columnas de clave del índice. Esta opción no se puede usar cuando la columna de clave actual no es una columna de texto ni una columna binaria variable. Si se intenta, se producirá un error en la operación JET_errInvalidgrbit. Esta opción solo está disponible en Windows XP y versiones posteriores. |
JET_bitPartialColumnStartLimit |
Esta opción indica que la clave de búsqueda debe construirse de forma que la columna de clave actual se considere un carácter comodín de prefijo y que las columnas de clave que vienen después de la columna de clave actual deben considerarse como caracteres comodín. Esto significa que la clave de búsqueda construida se puede usar para buscar coincidencias con las entradas de índice que tienen lo siguiente:
Esta opción se debe usar al compilar claves de búsqueda con caracteres comodín para buscar entradas de índice más cercanas al inicio de un índice. El inicio del índice es la entrada de índice que se encuentra al pasar al primer registro de ese índice. El inicio del índice no es el mismo que el extremo inferior del índice, que puede cambiar según el criterio de ordenación de las columnas de clave del índice. Esta opción no se puede usar cuando la columna de clave actual no es una columna de texto ni una columna binaria variable. Si se intenta, se producirá un error en la operación JET_errInvalidgrbit. Esta opción solo está disponible en Windows XP y versiones posteriores. |
JET_bitStrLimit |
Esta opción indica que la clave de búsqueda debe construirse de forma que las columnas de clave que vienen después de la columna de clave actual se consideren caracteres comodín. Esto significa que la clave de búsqueda construida se puede usar para buscar coincidencias con las entradas de índice que tienen lo siguiente:
Esta opción se debe usar al compilar claves de búsqueda con caracteres comodín para buscar entradas de índice más cercanas al final de un índice. El final del índice es la entrada de índice que se encuentra al pasar al último registro de ese índice. El final del índice no es el mismo que el extremo superior del índice, que puede cambiar según el criterio de ordenación de las columnas de clave del índice. Cuando se especifica esta opción en combinación con JET_bitSubStrLimit y la columna de clave actual es una columna de texto, se omitirá esta opción. Este comportamiento está pensado para permitir que el tipo de la columna de clave actual se infiera al compilar la clave de búsqueda. Si desea crear una clave de búsqueda similar para el inicio de un índice, se debe realizar una llamada similar a JetMakeKey para la última columna de clave que no es un carácter comodín, pero sin opciones de caracteres comodín especificadas. A continuación, la clave de búsqueda se encuentra en un estado adecuado para usarla para dicha búsqueda. Esto es análogo al uso de JET_bitFullColumnStartLimit, salvo que la clave de búsqueda no finaliza limpiamente, ya que es después del uso de una opción de carácter comodín. Esta opción ha quedado en desuso para Windows XP y versiones posteriores con el fin de abordar esta semántica complicada. JET_bitFullColumnStartLimit y JET_bitFullColumnEndLimit deben usarse en su lugar siempre que sea posible. |
JET_bitSubStrLimit |
Esta opción indica que la clave de búsqueda debe construirse de forma que la columna de clave actual se considere un carácter comodín de prefijo y que las columnas de clave que vienen después de la columna de clave actual deben considerarse como caracteres comodín. Esto significa que la clave de búsqueda construida se puede usar para buscar coincidencias con las entradas de índice que tienen lo siguiente:
Esta opción se debe usar al compilar claves de búsqueda con caracteres comodín para buscar entradas de índice más cercanas al final de un índice. El final del índice es la entrada de índice que se encuentra al pasar al último registro de ese índice. El final del índice no es el mismo que el extremo superior del índice, que puede cambiar según el criterio de ordenación de las columnas de clave del índice. Cuando esta opción se especifica en combinación con JET_bitStrLimit y la columna de clave actual es una columna de texto, esta opción tendrá prioridad. Esta opción se omite cuando la columna de clave actual no es una columna de texto. Este comportamiento está pensado para permitir que el tipo de la columna de clave actual se infiera al compilar la clave de búsqueda. Si desea crear una clave de búsqueda similar para el inicio de un índice, se debe realizar una llamada similar a JetMakeKey para la columna de clave que va a ser el comodín de prefijo, pero sin que se especifiquen opciones de caracteres comodín. La clave de búsqueda se encuentra en un estado adecuado para usarla para dicha búsqueda. Esto es análogo al uso de JET_bitPartialColumnStartLimit, excepto que la clave de búsqueda no está terminada limpiamente, ya que es después del uso de una opción de caracteres comodín. Esta opción ha quedado en desuso para Windows XP y versiones posteriores para abordar esta semántica complicada. JET_bitPartialColumnStartLimit y JET_bitPartialColumnEndLimit se deben usar en su lugar, siempre que sea posible. |
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_errIndexTuplesKeyTooSmall |
Los datos de columna proporcionados eran demasiado pequeños para crear una clave válida para el índice actual porque ese índice es un índice de tupla y el tamaño mínimo de tupla era mayor que los datos de columna proporcionados. Consulte JetCreateIndex para obtener más información sobre los índices de tupla. Este error solo lo devolverá Windows XP y versiones posteriores. |
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_errInvalidBufferSize |
Los datos de columna proporcionados no coincidieron con el tamaño requerido por la definición de columna. Esto puede ocurrir si el tipo de datos de la columna es intrínsecamente un tamaño determinado. Esto también puede ocurrir si el tipo de datos de la columna no es intrínsecamente un tamaño determinado, pero la definición de la columna lo declara de longitud fija. Una excepción a esto es que este error no se producirá cuando se proporcionen demasiados datos para una columna de texto de longitud fija, ya que los datos que faltan se rellenarán automáticamente con espacios. Una segunda excepción a esto es que este error no se producirá cuando se proporcionen demasiados datos para una columna binaria de longitud fija porque los datos que faltan se rellenarán automáticamente con ceros. |
JET_errInvalidgrbit |
Una de las opciones solicitadas no era válida, se usaba de forma ilegal o no se implementaba. Esto puede ocurrir para JetMakeKey cuando:
|
JET_errInvalidParameter |
Uno de los parámetros proporcionados contenía un valor inesperado o contenía un valor que no tenía sentido cuando se combinaba con el valor de otro parámetro. Esto puede ocurrir para JetMakeKey cuando se especificó JET_bitNormalizedKey y el valor proporcionado en el búfer de entrada era demasiado grande para ser una clave de búsqueda válida. |
JET_errKeyIsMade |
Los datos de columna proporcionados a JetMakeKey se rechazaron porque los datos de columna ya se han proporcionado para todas las columnas de clave del índice actual. Esto puede ocurrir de tres maneras. La primera forma es si se proporcionan datos de columna para cada columna de clave del índice actual. La segunda forma es si se han proporcionado datos de columna para al menos una columna de clave y se ha elegido una opción de carácter comodín para la última llamada. La tercera manera es si se proporcionó una clave de búsqueda construida anteriormente mediante JET_bitNormalizedKey, que abarca todas las columnas de clave. |
JET_errKeyNotMade |
No hay ninguna clave de búsqueda actual para el cursor. Esto ocurrirá para JetMakeKey si no se especifica JET_bitNewKey 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_errNoCurrentIndex |
No hay ningún índice actual para el cursor. Esto ocurrirá para JetMakeKey si el cursor está en el índice agrupado de una tabla, no se ha definido un índice principal y no se ha especificado JET_bitNormalizedKey. No es posible construir una clave de búsqueda si el cursor está en un índice que no tiene ninguna columna de clave a menos que se proporcione una clave de búsqueda construida previamente. |
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. |
Si JET_bitNormalizedKey y JET_bitNewKey no se especificó correctamente, los criterios de búsqueda generarán la clave de búsqueda para una columna de clave más en el índice actual. Si no se especificó JET_bitNormalizedKey y se especificó JET_bitNewKey, se descartará cualquier clave de búsqueda existente anteriormente y se habrá creado uno nuevo por los criterios de búsqueda de la primera columna de clave del índice actual. Si se especificó JET_bitNormalizedKey, se descartaba cualquier clave de búsqueda existente anteriormente y otra nueva cargada desde el búfer de entrada. En cualquier caso, no se producirá ningún cambio en el estado de la base de datos.
Si se ha especificado JET_bitNormalizedKey o JET_bitNewKey, el estado de la clave de búsqueda no está definido. Si no se especificaron ni JET_bitNormalizedKey ni JET_bitNewKey, no se producirá ningún cambio en el estado de la clave de búsqueda. En cualquier caso, no se producirá ningún cambio en el estado de la base de datos.
Observaciones
Las claves se deben tratar como fragmentos opacos de datos. No se debe intentar aprovechar la estructura interna de estos datos. Sin embargo, se conoce lo siguiente sobre todas las claves ESENT:
Las claves se pueden comparar entre sí mediante 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.
Las claves de búsqueda pueden ser de un byte más largo si se usó una opción de carácter comodín. En ese caso, la clave de búsqueda será de hasta JET_cbLimitKeyMost (256) bytes para las versiones anteriores a Windows Vista y JET_paramKeyMost + 1 bytes para Windows Vista y versiones posteriores.
Hay una ramificación muy importante para este tamaño máximo de clave. Siempre que haya una entrada de índice que tenga valores de columna lo suficientemente grandes como para hacer que se genere una clave para ese índice que, de lo contrario, sería mayor que este tamaño máximo, esa clave se trunca silenciosamente con ese tamaño máximo. Esto provoca dos efectos:
En el caso de las entradas de un índice único, provocará que las entradas que, de lo contrario, sean únicas, se declaren como duplicados.
En el caso de las entradas de todos los índices, el truncamiento de claves provocará entradas de índice que, de lo contrario, no coincidirían con los criterios de búsqueda de una clave de búsqueda determinada que se declararán como coincidencias.
Las aplicaciones deben prever este truncamiento y evitarlo o compensar sus efectos. En Windows Vista, se ha agregado una nueva marca de índice, JET_bitIndexDisallowTruncation, para facilitar a las aplicaciones evitar truncamientos de claves. Consulte la estructura de JET_INDEXCREATE para obtener más información sobre esta opción de indexación.
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
JetCreateIndex
JetRetrieveKey
JetSeek
JetSetIndexRange