Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Esta característica se quitará en una versión futura de Windows. Evite usar esta característica en el nuevo trabajo de desarrollo y planee modificar las aplicaciones que actualmente usan esta característica. Microsoft recomienda usar la funcionalidad del cursor del controlador.
Para soportar sentencias de actualización y eliminación posicionadas, la biblioteca de cursores construye una sentencia buscada UPDATE o DELETE a partir de la sentencia posicionada. Para soportar llamadas a SQLGetData en un bloque de datos, la biblioteca de cursores construye una instrucción SELECT buscada para crear un conjunto de resultados que contiene la fila de datos actual. En cada una de estas sentencias, la cláusula WHERE enumera los valores almacenados en la caché para cada columna acotada que devuelve SQL_PRED_SEARCHABLE o SQL_PRED_BASIC para el identificador de campo SQL_DESC_SEARCHABLE en SQLColAttribute.
Caution
La cláusula WHERE construida por la biblioteca de cursores para identificar la fila actual puede no identificar ninguna fila, identificar una fila diferente o identificar más de una fila.
Si una instrucción de actualización o eliminación posicionada afecta a más de una fila, la biblioteca de cursores actualiza el array de estado de fila solo para la fila en la que se posiciona el cursor y devuelve SQL_SUCCESS_WITH_INFO y SQLSTATE 01001 (conflicto de operación de cursor). Si la instrucción no identifica ninguna fila, la biblioteca de cursores no actualiza el array de estado de filas y devuelve SQL_SUCCESS_WITH_INFO y SQLSTATE 01001 (conflicto de operación de cursor). Una aplicación puede llamar a SQLRowCount para determinar el número de filas que se actualizaron o eliminaron.
Si la cláusula SELECT utilizada para posicionar el cursor de una llamada a SQLGetData identifica más de una fila, SQLGetData no garantiza que devuelva los datos correctos. Si no identifica ninguna fila, SQLGetData devuelve SQL_NO_DATA.
Si una aplicación cumple con las siguientes directrices, la cláusula WHERE construida por la biblioteca de cursores debe identificar de forma única la fila actual, salvo cuando esto sea imposible, como cuando la fuente de datos contiene filas duplicadas.
Asigna columnas que identifiquen de forma única la fila. Si las columnas acotadas no identifican de forma única la fila, la cláusula WHERE construida por la biblioteca de cursores podría identificar más de una fila. En una sentencia de actualización o eliminación posicionada, dicha cláusula podría hacer que se actualicen o eliminen más de una fila. En una llamada a SQLGetData, dicha cláusula podría hacer que el controlador devolviera datos de la fila equivocada. Vincular todas las columnas de una clave única garantiza que cada fila sea identificada de forma única.
Asigna búferes de datos lo suficientemente grandes para que no ocurra truncamiento. La caché de la biblioteca de cursores es una copia de los valores en los buffers de las filas vinculadas al conjunto de resultados con SQLBindCol. Si los datos se truncan al colocarse en estos búferes, también se truncarán en la caché. Una cláusula WHERE construida a partir de valores truncados puede no identificar correctamente la fila subyacente en la fuente de datos.
Especifica buffers de longitud no nula para datos binarios en C. La biblioteca de cursores asigna búferes de longitud en su caché solo si el argumento StrLen_or_IndPtr en SQLBindCol no es nulo. Cuando el argumento TargetType está SQL_C_BINARY, la biblioteca de cursores requiere la longitud de los datos binarios para construir una cláusula WHERE a partir de los datos. Si no hay búfer de longitud para una columna de SQL_C_BINARY y la aplicación llama a SQLGetData o intenta ejecutar una instrucción de actualización o eliminación posicionada, la biblioteca de cursores devuelve SQL_ERROR y SQLSTATE SL014 (se emitió una solicitud posicionada y no todos los campos de conteo de columnas estaban almacenados en búfer).
Especifica búferes de longitud no nula para columnas anulables. La biblioteca de cursores asigna búferes de longitud en su caché solo si el argumento StrLen_or_IndPtr en SQLBindCol no es nulo. Como SQL_NULL_DATA se almacena en el búfer de longitud, la biblioteca de cursores asume que cualquier columna para la que no se especifique ningún búfer de longitud no es anulable. Si no se especifica ninguna columna de longitud para una columna anulable, la biblioteca de cursores construye una cláusula WHERE que utiliza el valor de datos de la columna. Esta cláusula no identificará correctamente la fila.