Compartir a través de


Función SQLSetStmtAttr

Conformidad
Versión introducida: Cumplimiento de estándares ODBC 3.0: ISO 92

Resumen
SQLSetStmtAttr establece atributos relacionados con una instrucción .

Nota:

Para obtener más información sobre lo que el Administrador de controladores asigna esta función a cuando una aplicación ODBC 3.x está trabajando con un controlador ODBC 2.x , vea Mapping Replacement Functions for Backward Compatibility of Applications.

Sintaxis

  
SQLRETURN SQLSetStmtAttr(  
     SQLHSTMT      StatementHandle,  
     SQLINTEGER    Attribute,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    StringLength);  

Argumentos

StatementHandle
[Entrada] Identificador de instrucciones.

Atributo
[Entrada] Opción para establecer, que aparece en "Comentarios".

ValuePtr
[Entrada] Valor que se va a asociar a Attribute. Según el valor de Attribute, ValuePtr será uno de los siguientes:

  • Un identificador de descriptor ODBC.

  • Valor SQLUINTEGER.

  • Valor DE SQLULEN.

  • Puntero a uno de los siguientes:

    • Cadena de caracteres terminada en NULL.

    • Un búfer binario.

    • Valor o matriz de tipo SQLLEN, SQLULEN o SQLUSMALLINT.

    • Valor definido por el controlador.

Si el argumento Attribute es un valor específico del controlador, ValuePtr puede ser un entero con signo.

StringLength
[Entrada] Si Attribute es un atributo definido por ODBC y ValuePtr apunta a una cadena de caracteres o a un búfer binario, este argumento debe ser la longitud de *ValuePtr. Si Attribute es un atributo definido por ODBC y ValuePtr es un entero, StringLength se omite.

Si Attribute es un atributo definido por el controlador, la aplicación indica la naturaleza del atributo en el Administrador de controladores estableciendo el argumento StringLength . StringLength puede tener los siguientes valores:

  • Si ValuePtr es un puntero a una cadena de caracteres, StringLength es la longitud de la cadena o SQL_NTS.

  • Si ValuePtr es un puntero a un búfer binario, la aplicación coloca el resultado de la macro SQL_LEN_BINARY_ATTR(length) en StringLength. Esto coloca un valor negativo en StringLength.

  • Si ValuePtr es un puntero a un valor distinto de una cadena de caracteres o una cadena binaria, StringLength debe tener el valor SQL_IS_POINTER.

  • Si ValuePtr contiene un valor de longitud fija, StringLength se SQL_IS_INTEGER o SQL_IS_UINTEGER, según corresponda.

Devoluciones

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnóstico

Cuando SQLSetStmtAttr devuelve SQL_ERROR o SQL_SUCCESS_WITH_INFO, se puede obtener un valor SQLSTATE asociado llamando a SQLGetDiagRec con un HandleType de SQL_HANDLE_STMT y un identificador de StatementHandle. En la tabla siguiente se enumeran los valores SQLSTATE devueltos normalmente por SQLSetStmtAttr y se explica cada uno en el contexto de esta función; la notación "(DM)" precede a las descripciones de SQLSTATEs devueltas por el Administrador de controladores. El código de retorno asociado a cada valor SQLSTATE es SQL_ERROR, a menos que se indique lo contrario.

SQLSTATE Error Descripción
01000 Advertencia general Mensaje informativo específico del controlador. (Function devuelve SQL_SUCCESS_WITH_INFO).
01S02 Valor de opción cambiado El controlador no admitía el valor especificado en ValuePtr o el valor especificado en ValuePtr no era válido debido a las condiciones de trabajo de implementación, por lo que el controlador sustituyó un valor similar. (Se puede llamar a SQLGetStmtAttr para determinar el valor sustituido temporalmente). El valor sustituto es válido para StatementHandle hasta que se cierra el cursor, en cuyo punto el atributo de instrucción vuelve a su valor anterior. Los atributos de instrucción que se pueden cambiar son:

SQL_ ATTR_CONCURRENCY SQL_ ATTR_CURSOR_TYPE SQL_ ATTR_KEYSET_SIZE SQL_ ATTR_MAX_LENGTH SQL_ ATTR_MAX_ROWS SQL_ ATTR_QUERY_TIMEOUT SQL_ATTR_ROW_ARRAY_SIZE SQL_ ATTR_SIMULATE_CURSOR

(Function devuelve SQL_SUCCESS_WITH_INFO).
08S01 Error de vínculo de comunicación Se produjo un error en el vínculo de comunicación entre el controlador y el origen de datos al que se conectó el controlador antes de que la función completara el procesamiento.
24000 Estado de cursor no válido El atributo se SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_SIMULATE_CURSOR o SQL_ATTR_USE_BOOKMARKS, y el cursor estaba abierto.
HY000 Error general Se produjo un error para el que no había ningún SQLSTATE específico y para el que no se definió SQLSTATE específico de la implementación. El mensaje de error devuelto por SQLGetDiagRec en el búfer *MessageText describe el error y su causa.
HY001 Error de asignación de memoria El controlador no pudo asignar memoria necesaria para admitir la ejecución o finalización de la función.
HY009 Uso no válido del puntero nulo El argumento Attribute identificó un atributo de instrucción que requería un atributo de cadena y el argumento ValuePtr era un puntero nulo.
HY010 Error de secuencia de funciones (DM) Se llamó a una función de ejecución asincrónica para el identificador de conexión asociado a StatementHandle. Esta función asincrónica todavía se estaba ejecutando cuando se llamó a la función SQLSetStmtAttr .

(DM) SQLExecute, SQLExecDirect o SQLMoreResults se llamó a para statementHandle y devolvió SQL_PARAM_DATA_AVAILABLE. Se llamó a esta función antes de recuperar los datos para todos los parámetros transmitidos.

(DM) Se llamó a una función de ejecución asincrónica para statementHandle y todavía se estaba ejecutando cuando se llamó a esta función.

(DM) SE llamó a SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos para el statementHandle y devolvió SQL_NEED_DATA. Se llamó a esta función antes de enviar datos para todos los parámetros o columnas de datos en ejecución.
HY011 El atributo no se puede establecer ahora El atributo se SQL_ATTR_CONCURRENCY, SQL_ ATTR_CURSOR_TYPE, SQL_ ATTR_SIMULATE_CURSOR o SQL_ ATTR_USE_BOOKMARKS, y la instrucción se preparó.
HY013 Error de administración de memoria No se pudo procesar la llamada de función porque no se pudo tener acceso a los objetos de memoria subyacentes, posiblemente debido a condiciones de memoria baja.
HY017 Uso no válido de un identificador de descriptor asignado automáticamente (DM) El argumento Attribute se SQL_ATTR_IMP_ROW_DESC o SQL_ATTR_IMP_PARAM_DESC.

(DM) El argumento Attribute se SQL_ATTR_APP_ROW_DESC o SQL_ATTR_APP_PARAM_DESC, y el valor de ValuePtr era un identificador de descriptor asignado implícitamente distinto del identificador asignado originalmente para ARD o APD.
HY024 Valor de atributo no válido Dado el valor attribute especificado, se especificó un valor no válido en ValuePtr. (El Administrador de controladores devuelve este valor SQLSTATE solo para los atributos de conexión y instrucción que aceptan un conjunto discreto de valores, como SQL_ATTR_ACCESS_MODE o SQL_ ATTR_ASYNC_ENABLE. Para todos los demás atributos de conexión y instrucción, el controlador debe comprobar el valor especificado en ValuePtr).

El argumento Attribute se SQL_ATTR_APP_ROW_DESC o SQL_ATTR_APP_PARAM_DESC, y ValuePtr era un identificador de descriptor asignado explícitamente que no está en la misma conexión que el argumento StatementHandle .
HY090 Longitud de búfer o cadena no válida (DM) *ValuePtr es una cadena de caracteres y el argumento StringLength era menor que 0, pero no se SQL_NTS.
HY092 Identificador de atributo o opción no válido (DM) El valor especificado para el argumento Attribute no era válido para la versión de ODBC compatible con el controlador.

(DM) El valor especificado para el argumento Attribute era un atributo de solo lectura.
HY117 La conexión se suspende debido al estado de transacción desconocido. Solo se permiten las funciones de desconexión y solo lectura. (DM) Para obtener más información sobre el estado suspendido, vea Función SQLEndTran.
HYC00 Característica opcional no implementada El valor especificado para el argumento Attribute era un atributo de instrucción ODBC válido para la versión de ODBC compatible con el controlador, pero no era compatible con el controlador.

El argumento Attribute se SQL_ATTR_ASYNC_ENABLE y una llamada a SQLGetInfo con un InfoType de SQL_ASYNC_MODE devuelve SQL_AM_CONNECTION.

El argumento Attribute se SQL_ATTR_ENABLE_AUTO_IPD y el valor del atributo de conexión SQL_ATTR_AUTO_IPD se SQL_FALSE.
HYT01 Se ha agotado el tiempo de espera de la conexión. El período de tiempo de espera de conexión expiró antes de que el origen de datos respondiera a la solicitud. El período de tiempo de espera de conexión se establece a través de SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 El controlador no admite esta función (DM) El controlador asociado a StatementHandle no admite la función .
S1118 El controlador no admite notificaciones asincrónicas Si llama a SQLSetStmtAttr para establecer SQL_ATTR_ASYNC_STMT_EVENT; el controlador no admite la notificación asincrónica.

Comentarios

Los atributos de instrucción de una instrucción permanecen en vigor hasta que se cambian mediante otra llamada a SQLSetStmtAttr o hasta que la instrucción se quita llamando a SQLFreeHandle. Llamar a SQLFreeStmt con la opción SQL_CLOSE, SQL_UNBIND o SQL_RESET_PARAMS no restablece los atributos de instrucción.

Algunos atributos de instrucción admiten la sustitución de un valor similar si el origen de datos no admite el valor especificado en ValuePtr. En tales casos, el controlador devuelve SQL_SUCCESS_WITH_INFO y SQLSTATE 01S02 (valor de opción cambiado). Por ejemplo, si Attribute es SQL_ATTR_CONCURRENCY y ValuePtr es SQL_CONCUR_ROWVER, y si el origen de datos no lo admite, el controlador sustituye SQL_CONCUR_VALUES y devuelve SQL_SUCCESS_WITH_INFO. Para determinar el valor sustituido, una aplicación llama a SQLGetStmtAttr.

El formato de información establecido con ValuePtr depende del atributo especificado. SQLSetStmtAttr acepta información de atributo en uno de los dos formatos diferentes: una cadena de caracteres o un valor entero. El formato de cada uno se indica en la descripción del atributo. Este formato se aplica a la información devuelta para cada atributo de SQLGetStmtAttr. Las cadenas de caracteres a las que apunta el argumento ValuePtr de SQLSetStmtAttr tienen una longitud de StringLength.

Nota:

La capacidad de establecer atributos de instrucción en el nivel de conexión mediante una llamada a SQLSetConnectAttr ha quedado en desuso en ODBC 3.x. Las aplicaciones ODBC 3.x nunca deben establecer atributos de instrucción en el nivel de conexión. Los atributos de instrucción ODBC 3.x no se pueden establecer en el nivel de conexión, a excepción de los atributos de SQL_ATTR_METADATA_ID y SQL_ATTR_ASYNC_ENABLE, que son atributos de conexión y atributos de instrucción, y se pueden establecer en el nivel de conexión o en el nivel de instrucción.

Nota:

Los controladores ODBC 3.x solo necesitan admitir esta funcionalidad si deben trabajar con aplicaciones ODBC 2.x que establecen opciones de instrucción ODBC 2.x en el nivel de conexión. Para obtener más información, vea "Establecer opciones de instrucción en el nivel de conexión" en Asignación de SQLSetConnectOption en el apéndice G: Instrucciones del controlador para la compatibilidad con versiones anteriores.

Atributos de instrucción que establecen campos descriptores

Muchos atributos de instrucción corresponden a un campo de encabezado de un descriptor. Si se establecen estos atributos, se obtiene realmente el valor de los campos descriptores. Establecer campos mediante una llamada a SQLSetStmtAttr en lugar de a SQLSetDescField tiene la ventaja de que no es necesario obtener un identificador de descriptor para la llamada de función.

Precaución

Llamar a SQLSetStmtAttr para una instrucción puede afectar a otras instrucciones. Esto ocurre cuando el APD o ARD asociado a la instrucción se asigna explícitamente y también está asociado a otras instrucciones. Dado que SQLSetStmtAttr modifica el APD o ARD, las modificaciones se aplican a todas las instrucciones con las que está asociado este descriptor. Si no es el comportamiento necesario, la aplicación debe desasociar este descriptor de las demás instrucciones (llamando a SQLSetStmtAttr para establecer el campo SQL_ATTR_APP_ROW_DESC o SQL_ATTR_APP_PARAM_DESC en un identificador de descriptor diferente) antes de llamar a SQLSetStmtAttr de nuevo.

Cuando se establece un campo descriptor como resultado del atributo de instrucción correspondiente que se establece, el campo solo se establece para los descriptores aplicables que están asociados actualmente a la instrucción identificada por el argumento StatementHandle y la configuración del atributo no afecta a ningún descriptor que pueda estar asociado a esa instrucción en el futuro. Cuando un campo descriptor que también es un atributo de instrucción se establece mediante una llamada a SQLSetDescField, se establece el atributo de instrucción correspondiente. Si un descriptor asignado explícitamente se desasocia de una instrucción, un atributo de instrucción que corresponde a un campo de encabezado revertirá al valor del campo en el descriptor asignado implícitamente.

Cuando se asigna una instrucción (consulte SQLAllocHandle), se asignan automáticamente cuatro identificadores de descriptor y se asocian a la instrucción . Los identificadores de descriptor asignados explícitamente se pueden asociar a la instrucción llamando a SQLAllocHandle con un fHandleType de SQL_HANDLE_DESC para asignar un identificador de descriptor y, a continuación, llamar a SQLSetStmtAttr para asociar el identificador de descriptor a la instrucción .

Los atributos de instrucción de la tabla siguiente corresponden a los campos de encabezado del descriptor.

Atributo statement Campo de encabezado Desc.
SQL_ATTR_PARAM_BIND_OFFSET_PTR SQL_DESC_BIND_OFFSET_PTR APD
SQL_ATTR_PARAM_BIND_TYPE SQL_DESC_BIND_TYPE APD
SQL_ATTR_PARAM_OPERATION_PTR SQL_DESC_ARRAY_STATUS_PTR APD
SQL_ATTR_PARAM_STATUS_PTR SQL_DESC_ARRAY_STATUS_PTR IPD
SQL_ATTR_PARAMS_PROCESSED_PTR SQL_DESC_ROWS_PROCESSED_PTR IPD
SQL_ATTR_PARAMSET_SIZE SQL_DESC_ARRAY_SIZE APD
SQL_ATTR_ROW_ARRAY_SIZE SQL_DESC_ARRAY_SIZE ARD
SQL_ATTR_ROW_BIND_OFFSET_PTR SQL_DESC_BIND_OFFSET_PTR ARD
SQL_ATTR_ROW_BIND_TYPE SQL_DESC_BIND_TYPE ARD
SQL_ATTR_ROW_OPERATION_PTR SQL_DESC_ARRAY_STATUS_PTR ARD
SQL_ATTR_ROW_STATUS_PTR SQL_DESC_ARRAY_STATUS_PTR IRD
SQL_ATTR_ROWS_FETCHED_PTR SQL_DESC_ROWS_PROCESSED_PTR IRD

Atributos de instrucción

Los atributos definidos actualmente y la versión de ODBC en la que se introdujeron se muestran en la tabla siguiente; se espera que los controladores definan más atributos para aprovechar los distintos orígenes de datos. ODBC reserva un intervalo de atributos; los desarrolladores de controladores deben reservar valores para su propio uso específico del controlador de Open Group. Para más información, consulte Tipos de datos específicos del controlador, Tipos de descriptores, Tipos de información, Tipos de diagnóstico y Atributos.

Attribute Contenido de ValuePtr
SQL_ATTR_APP_PARAM_DESC (ODBC 3.0) Identificador del APD para llamadas posteriores a SQLExecute y SQLExecDirect en el identificador de instrucción. El valor inicial de este atributo es el descriptor asignado implícitamente cuando se asignó inicialmente la instrucción. Si el valor de este atributo se establece en SQL_NULL_DESC o el identificador asignado originalmente para el descriptor, se desasocia un identificador APD asignado explícitamente asociado al identificador de instrucción y el identificador de instrucción vuelve al identificador de APD asignado implícitamente.

Este atributo no se puede establecer en un identificador de descriptor que se asignó implícitamente para otra instrucción o a otro identificador de descriptor que se estableció implícitamente en la misma instrucción; Los identificadores de descriptor asignados implícitamente no se pueden asociar a más de una instrucción o identificador de descriptor.
SQL_ATTR_APP_ROW_DESC (ODBC 3.0) Identificador de ARD para las capturas posteriores en el identificador de instrucción. El valor inicial de este atributo es el descriptor asignado implícitamente cuando se asignó inicialmente la instrucción. Si el valor de este atributo se establece en SQL_NULL_DESC o el identificador asignado originalmente para el descriptor, se desasocia un identificador ARD asignado explícitamente asociado al identificador de instrucción y el identificador de instrucción vuelve al identificador ARD asignado implícitamente.

Este atributo no se puede establecer en un identificador de descriptor que se asignó implícitamente para otra instrucción o a otro identificador de descriptor que se estableció implícitamente en la misma instrucción; Los identificadores de descriptor asignados implícitamente no se pueden asociar a más de una instrucción o identificador de descriptor.
SQL_ATTR_ASYNC_ENABLE (ODBC 1.0) Valor de SQLULEN que especifica si una función denominada con la instrucción especificada se ejecuta de forma asincrónica:

SQL_ASYNC_ENABLE_OFF = Deshabilitar la compatibilidad con la ejecución asincrónica del nivel de instrucción (valor predeterminado).

SQL_ASYNC_ENABLE_ON = Habilitar la compatibilidad con la ejecución asincrónica en el nivel de instrucción.

Para obtener más información, consulte Ejecución asincrónica (método de sondeo).

En el caso de los controladores que admiten la ejecución asincrónica de nivel de instrucción, el atributo de instrucción SQL_ATTR_ASYNC_ENABLE es de solo lectura. Su valor es el mismo que el valor del atributo de nivel de conexión con el mismo nombre en el momento en que se asignó el identificador de instrucción.

Llamar a SQLSetStmtAttr para establecer SQL_ATTR_ASYNC_ENABLE cuando el SQL_ASYNC_MODE InfoType devuelve SQL_AM_CONNECTION devuelve SQLSTATE HYC00 (característica opcional no implementada). Para obtener más información, vea Función SQLSetConnectAttr para obtener más información.
SQL_ATTR_ASYNC_STMT_EVENT (ODBC 3.8) Valor SQLPOINTER que es un identificador de eventos.

La notificación de finalización de funciones asincrónicas está habilitada mediante una llamada a SQLSetStmtAttr para establecer el atributo SQL_ATTR_ASYNC_STMT_EVENT y especificar el identificador de eventos.
SQL_ATTR_ASYNC_STMT_PCALLBACK (ODBC 3.8) SQLPOINTER a la función de devolución de llamada asincrónica.

Solo el Administrador de controladores puede llamar a la función SQLSetStmtAttr de un controlador con este atributo.
SQL_ATTR_ASYNC_STMT_PCONTEXT (ODBC 3.8) SQLPOINTER a la estructura de contexto

Solo el Administrador de controladores puede llamar a la función SQLSetStmtAttr de un controlador con este atributo.
SQL_ATTR_CONCURRENCY (ODBC 2.0) Valor SQLULEN que especifica la simultaneidad del cursor:

SQL_CONCUR_READ_ONLY = El cursor es de solo lectura. No se permiten actualizaciones.

SQL_CONCUR_LOCK = Cursor usa el nivel más bajo de bloqueo suficiente para asegurarse de que la fila se puede actualizar.

SQL_CONCUR_ROWVER = Cursor usa el control de simultaneidad optimista, comparando versiones de fila como SQLBase ROWID o Sybase TIMESTAMP.

SQL_CONCUR_VALUES = Cursor usa el control de simultaneidad optimista, comparando valores.

El valor predeterminado de SQL_ATTR_CONCURRENCY es SQL_CONCUR_READ_ONLY.

Este atributo no se puede especificar para un cursor abierto. Para obtener más información, consulte Tipos de simultaneidad.

Si el atributo SQL_ATTR_CURSOR_TYPE cambia a un tipo que no admite el valor actual de SQL_ATTR_CONCURRENCY, el valor de SQL_ATTR_CONCURRENCY se cambiará en tiempo de ejecución y se emitirá una advertencia cuando se llame a SQLExecDirect o SQLPrepare.

Si el controlador admite la instrucción SELECT FOR UPDATE y se ejecuta dicha instrucción mientras el valor de SQL_ATTR_CONCURRENCY se establece en SQL_CONCUR_READ_ONLY, se devolverá un error. Si el valor de SQL_ATTR_CONCURRENCY se cambia a un valor que admite el controlador para algún valor de SQL_ATTR_CURSOR_TYPE pero no para el valor actual de SQL_ATTR_CURSOR_TYPE, el valor de SQL_ATTR_CURSOR_TYPE se cambiará en tiempo de ejecución y SE emitirá SQLSTATE 01S02 (valor de opción cambiado) cuando se llame a SQLExecDirect o SQLPrepare .

Si el origen de datos no admite la simultaneidad especificada, el controlador sustituye una simultaneidad diferente y devuelve SQLSTATE 01S02 (valor de opción cambiado). Para SQL_CONCUR_VALUES, el conductor sustituye SQL_CONCUR_ROWVER y viceversa. Para SQL_CONCUR_LOCK, el conductor sustituye, en orden, SQL_CONCUR_ROWVER o SQL_CONCUR_VALUES. La validez del valor sustituido no se comprueba hasta el tiempo de ejecución.

Para obtener más información sobre la relación entre SQL_ATTR_CONCURRENCY y los otros atributos de cursor, vea Características del cursor y Tipo de cursor.
SQL_ATTR_CURSOR_SCROLLABLE (ODBC 3.0) Valor de SQLULEN que especifica el nivel de compatibilidad que requiere la aplicación. Establecer este atributo afecta a las llamadas posteriores a SQLExecDirect y SQLExecute.

SQL_NONSCROLLABLE = Los cursores desplazables no son necesarios en el identificador de instrucción. Si la aplicación llama a SQLFetchScroll en este identificador, el único valor válido de FetchOrientation es SQL_FETCH_NEXT. Este es el valor predeterminado.

SQL_SCROLLABLE = Se requieren cursores desplazables en el identificador de instrucción. Al llamar a SQLFetchScroll, la aplicación puede especificar cualquier valor válido de FetchOrientation, logrando el posicionamiento del cursor en modos distintos del modo secuencial.

Para obtener más información sobre los cursores desplazables, vea Cursores desplazables. Para obtener más información sobre la relación entre SQL_ATTR_CURSOR_SCROLLABLE y otros atributos de cursor, vea Características del cursor y tipo de cursor.
SQL_ATTR_CURSOR_SENSITIVITY (ODBC 3.0) Valor SQLULEN que especifica si los cursores del identificador de instrucción hacen visibles los cambios realizados en un conjunto de resultados por otro cursor. Establecer este atributo afecta a las llamadas posteriores a SQLExecDirect y SQLExecute. Una aplicación puede leer el valor de este atributo para obtener su estado inicial o su estado según lo establecido más recientemente por la aplicación.

SQL_UNSPECIFIED = No se especifica qué es el tipo de cursor y si los cursores del identificador de instrucción hacen visibles los cambios realizados en un conjunto de resultados por otro cursor. Los cursores del identificador de instrucción pueden hacer visible ninguno, algunos o todos estos cambios. Este es el valor predeterminado.

SQL_INSENSITIVE = Todos los cursores del identificador de instrucción muestran el conjunto de resultados sin reflejar los cambios realizados en él por ningún otro cursor. Los cursores que no distinguen son de solo lectura. Esto corresponde a un cursor estático, que tiene una simultaneidad que es de solo lectura.

SQL_SENSITIVE = Todos los cursores del identificador de instrucción hacen visibles todos los cambios realizados en un conjunto de resultados por otro cursor.

Para obtener más información sobre la relación entre SQL_ATTR_CURSOR_SENSITIVITY y los otros atributos de cursor, vea Características del cursor y Tipo de cursor.
SQL_ATTR_CURSOR_TYPE (ODBC 2.0) Valor SQLULEN que especifica el tipo de cursor:

SQL_CURSOR_FORWARD_ONLY = El cursor solo se desplaza hacia delante.

SQL_CURSOR_STATIC = Los datos del conjunto de resultados son estáticos.

SQL_CURSOR_KEYSET_DRIVEN = El controlador guarda y usa las claves para el número de filas especificadas en el atributo de instrucción SQL_ATTR_KEYSET_SIZE.

SQL_CURSOR_DYNAMIC = El controlador guarda y usa solo las claves de las filas del conjunto de filas.

El valor predeterminado es SQL_CURSOR_FORWARD_ONLY. Este atributo no se puede especificar una vez preparada la instrucción SQL.

Si el origen de datos no admite el tipo de cursor especificado, el controlador sustituye un tipo de cursor diferente y devuelve SQLSTATE 01S02 (valor de opción cambiado). Para un cursor mixto o dinámico, el controlador sustituye, en orden, un cursor estático o controlado por conjuntos de claves. Para un cursor controlado por conjuntos de claves, el controlador sustituye un cursor estático.

Para obtener más información sobre los tipos de cursor desplazables, vea Tipos de cursor desplazables. Para obtener más información sobre la relación entre SQL_ATTR_CURSOR_TYPE y los otros atributos de cursor, vea Características del cursor y Tipo de cursor.
SQL_ATTR_ENABLE_AUTO_IPD (ODBC 3.0) Valor SQLULEN que especifica si se realiza el rellenado automático del IPD:

SQL_TRUE = Activa el rellenado automático del IPD después de una llamada a SQLPrepare. SQL_FALSE = Desactiva el rellenado automático del IPD después de una llamada a SQLPrepare. (Una aplicación todavía puede obtener información del campo IPD llamando a SQLDescribeParam, si se admite). El valor predeterminado del atributo de instrucción SQL_ATTR_ENABLE_AUTO_IPD es SQL_FALSE. Para obtener más información, vea Rellenado automático del IPD.
SQL_ATTR_FETCH_BOOKMARK_PTR (ODBC 3.0) SqlLEN * que apunta a un valor de marcador binario. Cuando se llama a SQLFetchScroll con fFetchOrientation igual a SQL_FETCH_BOOKMARK, el controlador recoge el valor del marcador de este campo. Este campo tiene como valor predeterminado un puntero nulo. Para obtener más información, vea Scrolling by Bookmark (Desplazamiento por marcador).

El valor al que apunta este campo no se usa para eliminar por marcador, actualizar por marcador o capturar por operaciones de marcador en SQLBulkOperations, que usan marcadores almacenados en caché en búferes de conjunto de filas.
SQL_ATTR_IMP_PARAM_DESC (ODBC 3.0) Identificador del IPD. El valor de este atributo es el descriptor asignado cuando se asignó inicialmente la instrucción. La aplicación no puede establecer este atributo.

Este atributo se puede recuperar mediante una llamada a SQLGetStmtAttr , pero no se establece mediante una llamada a SQLSetStmtAttr.
SQL_ATTR_IMP_ROW_DESC (ODBC 3.0) Identificador del IRD. El valor de este atributo es el descriptor asignado cuando se asignó inicialmente la instrucción. La aplicación no puede establecer este atributo.

Este atributo se puede recuperar mediante una llamada a SQLGetStmtAttr , pero no se establece mediante una llamada a SQLSetStmtAttr.
SQL_ATTR_KEYSET_SIZE (ODBC 2.0) SqlULEN que especifica el número de filas del conjunto de claves para un cursor controlado por conjuntos de claves. Si el tamaño del conjunto de claves es 0 (valor predeterminado), el cursor está totalmente controlado por conjuntos de claves. Si el tamaño del conjunto de claves es mayor que 0, el cursor se mezcla (controlado por conjunto de claves dentro del conjunto de claves y dinámico fuera del conjunto de claves). El tamaño predeterminado del conjunto de claves es 0. Para obtener más información sobre los cursores controlados por conjuntos de claves, consulte Cursores controlados por conjuntos de claves.

Si el tamaño especificado supera el tamaño máximo del conjunto de claves, el controlador sustituye ese tamaño y devuelve SQLSTATE 01S02 (valor de opción cambiado).

SQLFetch o SQLFetchScroll devuelve un error si el tamaño del conjunto de claves es mayor que 0 y menor que el tamaño del conjunto de filas.
SQL_ATTR_MAX_LENGTH (ODBC 1.0) Valor SQLULEN que especifica la cantidad máxima de datos que el controlador devuelve de un carácter o una columna binaria. Si ValuePtr es menor que la longitud de los datos disponibles, SQLFetch o SQLGetData trunca los datos y devuelve SQL_SUCCESS. Si ValuePtr es 0 (valor predeterminado), el controlador intenta devolver todos los datos disponibles.

Si la longitud especificada es menor que la cantidad mínima de datos que el origen de datos puede devolver o mayor que la cantidad máxima de datos que puede devolver el origen de datos, el controlador sustituye ese valor y devuelve SQLSTATE 01S02 (valor de opción cambiado).

El valor de este atributo se puede establecer en un cursor abierto; Sin embargo, es posible que la configuración no surta efecto inmediatamente, en cuyo caso el controlador devolverá SQLSTATE 01S02 (valor de opción cambiado) y restablecerá el atributo a su valor original.

Este atributo está diseñado para reducir el tráfico de red y solo se debe admitir cuando el origen de datos (en lugar del controlador) en un controlador de varios niveles puede implementarlo. Las aplicaciones no deben usar este mecanismo para truncar los datos; para truncar los datos recibidos, una aplicación debe especificar la longitud máxima del búfer en el argumento BufferLength en SQLBindCol o SQLGetData.
SQL_ATTR_MAX_ROWS (ODBC 1.0) Valor SQLULEN correspondiente al número máximo de filas que se van a devolver a la aplicación para una instrucción SELECT . Si *ValuePtr es igual a 0 (valor predeterminado), el controlador devuelve todas las filas.

Este atributo está pensado para reducir el tráfico de red. Conceptualmente, se aplica cuando se crea el conjunto de resultados y limita el conjunto de resultados a las primeras filas valuePtr . Si el número de filas del conjunto de resultados es mayor que ValuePtr, el conjunto de resultados se trunca.

SQL_ATTR_MAX_ROWS se aplica a todos los conjuntos de resultados de la instrucción, incluidos los devueltos por las funciones de catálogo. SQL_ATTR_MAX_ROWS establece un máximo para el valor del recuento de filas del cursor.

Un controlador no debe emular SQL_ATTR_MAX_ROWS comportamiento de SQLFetch o SQLFetchScroll (si no se pueden implementar las limitaciones de tamaño del conjunto de resultados en el origen de datos) si no puede garantizar que SQL_ATTR_MAX_ROWS se implemente correctamente.

Se define el controlador si SQL_ATTR_MAX_ROWS se aplica a instrucciones que no sean instrucciones SELECT (como funciones de catálogo).

El valor de este atributo se puede establecer en un cursor abierto; Sin embargo, es posible que la configuración no surta efecto inmediatamente, en cuyo caso el controlador devolverá SQLSTATE 01S02 (valor de opción cambiado) y restablecerá el atributo a su valor original.
SQL_ATTR_METADATA_ID (ODBC 3.0) Valor SQLULEN que determina cómo se tratan los argumentos de cadena de las funciones de catálogo.

Si SQL_TRUE, el argumento string de las funciones de catálogo se trata como identificadores. El caso no es significativo. En el caso de las cadenas no delimitadas, el controlador quita los espacios finales y la cadena se plega a mayúsculas. Para las cadenas delimitadas, el controlador quita los espacios iniciales o finales y toma lo que sea entre los delimitadores literalmente. Si uno de estos argumentos se establece en un puntero nulo, la función devuelve SQL_ERROR y SQLSTATE HY009 (uso no válido del puntero NULO).

Si SQL_FALSE, los argumentos de cadena de las funciones de catálogo no se tratan como identificadores. El caso es significativo. Pueden contener un patrón de búsqueda de cadenas o no, dependiendo del argumento .

El valor predeterminado es SQL_FALSE.

El argumento TableType de SQLTables, que toma una lista de valores, no se ve afectado por este atributo.

SQL_ATTR_METADATA_ID también se puede establecer en el nivel de conexión. (Y SQL_ATTR_ASYNC_ENABLE son los únicos atributos de instrucción que también son atributos de conexión).

Para obtener más información, consulte Argumentos en funciones de catálogo.
SQL_ATTR_NOSCAN (ODBC 1.0) Valor de SQLULEN que indica si el controlador debe examinar cadenas SQL para secuencias de escape:

SQL_NOSCAN_OFF = El controlador examina las cadenas SQL para secuencias de escape (el valor predeterminado).

SQL_NOSCAN_ON = El controlador no examina cadenas SQL para secuencias de escape. En su lugar, el controlador envía la instrucción directamente al origen de datos.

Para obtener más información, vea Secuencias de escape en ODBC.
SQL_ATTR_PARAM_BIND_OFFSET_PTR (ODBC 3.0) Valor SQLULEN * que apunta a un desplazamiento agregado a punteros para cambiar el enlace de parámetros dinámicos. Si este campo no es NULL, el controlador desreferencia el puntero, agrega el valor desreferenciado a cada uno de los campos diferidos del registro descriptor (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR y SQL_DESC_OCTET_LENGTH_PTR) y usa los nuevos valores de puntero al enlazar. Se establece en NULL de forma predeterminada.

El desplazamiento de enlace siempre se agrega directamente a los campos SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR y SQL_DESC_OCTET_LENGTH_PTR. Si el desplazamiento se cambia a un valor diferente, el nuevo valor todavía se agrega directamente al valor del campo descriptor. El nuevo desplazamiento no se agrega al valor de campo más los desplazamientos anteriores.

Para obtener más información, vea Desplazamientos de enlace de parámetros.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_BIND_OFFSET_PTR en el encabezado APD.
SQL_ATTR_PARAM_BIND_TYPE (ODBC 3.0) Valor SQLULEN que indica la orientación de enlace que se va a usar para los parámetros dinámicos.

Este campo se establece en SQL_PARAM_BIND_BY_COLUMN (valor predeterminado) para seleccionar el enlace con columnas.

Para seleccionar el enlace de fila, este campo se establece en la longitud de la estructura o en una instancia de un búfer que se enlazará a un conjunto de parámetros dinámicos. Esta longitud debe incluir espacio para todos los parámetros enlazados y cualquier relleno de la estructura o el búfer para asegurarse de que cuando la dirección de un parámetro enlazado se incremente con la longitud especificada, el resultado apuntará al principio del mismo parámetro en el siguiente conjunto de parámetros. Al usar el operador sizeof en ANSI C, se garantiza este comportamiento.

Para obtener más información, vea Binding Arrays of Parameters (Enlazar matrices de parámetros).

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_ BIND_TYPE en el encabezado APD.
SQL_ATTR_PARAM_OPERATION_PTR (ODBC 3.0) Valor SQLUSMALLINT * que apunta a una matriz de valores SQLUSMALLINT usados para omitir un parámetro durante la ejecución de una instrucción SQL. Cada valor se establece en SQL_PARAM_PROCEED (para que se ejecute el parámetro) o SQL_PARAM_IGNORE (para que se omita el parámetro).

Se puede omitir un conjunto de parámetros durante el procesamiento estableciendo el valor de estado en la matriz a la que apunta SQL_DESC_ARRAY_STATUS_PTR en el APD en SQL_PARAM_IGNORE. Un conjunto de parámetros se procesa si su valor de estado se establece en SQL_PARAM_PROCEED o si no se establece ningún elemento de la matriz.

Este atributo de instrucción se puede establecer en un puntero nulo, en cuyo caso el controlador no devuelve valores de estado de parámetro. Este atributo se puede establecer en cualquier momento, pero el nuevo valor no se usa hasta la próxima vez que se llame a SQLExecDirect o SQLExecute .

Este atributo se omite cuando no hay ningún parámetro enlazado.

Para obtener más información, consulte Uso de matrices de parámetros.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_ARRAY_STATUS_PTR en el encabezado APD.
SQL_ATTR_PARAM_STATUS_PTR (ODBC 3.0) Valor SQLUSMALLINT * que apunta a una matriz de valores SQLUSMALLINT que contienen información de estado para cada fila de valores de parámetro después de una llamada a SQLExecute o SQLExecDirect. Este campo solo es necesario si PARAMSET_SIZE es mayor que 1.

Los valores de estado pueden contener los siguientes valores:

SQL_PARAM_SUCCESS: la instrucción SQL se ejecutó correctamente para este conjunto de parámetros.

SQL_PARAM_SUCCESS_WITH_INFO: la instrucción SQL se ejecutó correctamente para este conjunto de parámetros; sin embargo, la información de advertencia está disponible en la estructura de datos de diagnóstico.

SQL_PARAM_ERROR: error al procesar este conjunto de parámetros. La información adicional sobre errores está disponible en la estructura de datos de diagnóstico.

SQL_PARAM_UNUSED: este conjunto de parámetros no se usaba, posiblemente debido al hecho de que algunos conjuntos de parámetros anteriores provocaron un error que anuló el procesamiento adicional o porque SQL_PARAM_IGNORE se estableció para ese conjunto de parámetros en la matriz especificada por el SQL_ATTR_PARAM_OPERATION_PTR.

SQL_PARAM_DIAG_UNAVAILABLE: el controlador trata matrices de parámetros como una unidad monolítica, por lo que no genera este nivel de información de error.

Este atributo de instrucción se puede establecer en un puntero nulo, en cuyo caso el controlador no devuelve valores de estado de parámetro. Este atributo se puede establecer en cualquier momento, pero el nuevo valor no se usa hasta la próxima vez que se llame a SQLExecute o SQLExecDirect . Tenga en cuenta que establecer este atributo puede afectar al comportamiento del parámetro de salida implementado por el controlador.

Para obtener más información, consulte Uso de matrices de parámetros.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_ARRAY_STATUS_PTR en el encabezado IPD.
SQL_ATTR_PARAMS_PROCESSED_PTR (ODBC 3.0) Campo de registro SQLULEN * que apunta a un búfer en el que se devuelve el número de conjuntos de parámetros que se han procesado, incluidos los conjuntos de errores. No se devolverá ningún número si se trata de un puntero nulo.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_ROWS_PROCESSED_PTR en el encabezado IPD.

Si la llamada a SQLExecDirect o SQLExecute que rellena el búfer al que apunta este atributo no devuelve SQL_SUCCESS ni SQL_SUCCESS_WITH_INFO, el contenido del búfer no está definido.

Para obtener más información, consulte Uso de matrices de parámetros.
SQL_ATTR_PARAMSET_SIZE (ODBC 3.0) Valor SQLULEN que especifica el número de valores de cada parámetro. Si SQL_ATTR_PARAMSET_SIZE es mayor que 1, SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR y SQL_DESC_OCTET_LENGTH_PTR del punto de APD a matrices. La cardinalidad de cada matriz es igual al valor de este campo.

Este atributo se omite cuando no hay ningún parámetro enlazado.

Para obtener más información, consulte Uso de matrices de parámetros.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_ARRAY_SIZE en el encabezado APD.
SQL_ATTR_QUERY_TIMEOUT (ODBC 1.0) Valor DE SQLULEN correspondiente al número de segundos que se debe esperar a que se ejecute una instrucción SQL antes de volver a la aplicación. Si ValuePtr es igual a 0 (valor predeterminado), no hay tiempo de espera.

Si el tiempo de espera especificado supera el tiempo de espera máximo en el origen de datos o es menor que el tiempo de espera mínimo, SQLSetStmtAttr sustituye ese valor y devuelve SQLSTATE 01S02 (valor de opción cambiado).

Tenga en cuenta que la aplicación no necesita llamar a SQLCloseCursor para reutilizar la instrucción si se agota el tiempo de espera de una instrucción SELECT .

El tiempo de espera de consulta establecido en este atributo de instrucción es válido en modos sincrónicos y asincrónicos.
SQL_ATTR_RETRIEVE_DATA (ODBC 2.0) Valor SQLULEN:

SQL_RD_ON = SQLFetchScroll y, en ODBC 3.x, SQLFetch recupera datos después de colocar el cursor en la ubicación especificada. Este es el valor predeterminado.

SQL_RD_OFF = SQLFetchScroll y, en ODBC 3.x, SQLFetch no recupera datos después de colocar el cursor.

Al establecer SQL_RETRIEVE_DATA en SQL_RD_OFF, una aplicación puede comprobar que existe una fila o recuperar un marcador para la fila sin incurrir en la sobrecarga de recuperar filas. Para obtener más información, consulte Desplazamiento y captura de filas.

El valor de este atributo se puede establecer en un cursor abierto; Sin embargo, es posible que la configuración no surta efecto inmediatamente, en cuyo caso el controlador devolverá SQLSTATE 01S02 (valor de opción cambiado) y restablecerá el atributo a su valor original.
SQL_ATTR_ROW_ARRAY_SIZE (ODBC 3.0) Valor SQLULEN que especifica el número de filas devueltas por cada llamada a SQLFetch o SQLFetchScroll. También es el número de filas de una matriz de marcadores usada en una operación de marcador masivo en SQLBulkOperations. El valor predeterminado es 1.

Si el tamaño del conjunto de filas especificado supera el tamaño máximo del conjunto de filas admitido por el origen de datos, el controlador sustituye ese valor y devuelve SQLSTATE 01S02 (valor de opción cambiado).

Para obtener más información, consulte Tamaño del conjunto de filas.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_ARRAY_SIZE en el encabezado ARD.
SQL_ATTR_ROW_BIND_OFFSET_PTR (ODBC 3.0) Valor SQLULEN * que apunta a un desplazamiento agregado a punteros para cambiar el enlace de los datos de columna. Si este campo no es NULL, el controlador desreferencia el puntero, agrega el valor desreferenciado a cada uno de los campos diferidos del registro descriptor (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR y SQL_DESC_OCTET_LENGTH_PTR) y usa los nuevos valores de puntero al enlazar. Se establece en NULL de forma predeterminada.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_BIND_OFFSET_PTR en el encabezado ARD.
SQL_ATTR_ROW_BIND_TYPE (ODBC 1.0) Valor de SQLULEN que establece la orientación de enlace que se usará cuando se llama a SQLFetch o SQLFetchScroll en la instrucción asociada. El enlace con columnas se selecciona estableciendo el valor en SQL_BIND_BY_COLUMN. El enlace de fila se selecciona estableciendo el valor en la longitud de una estructura o una instancia de un búfer en el que se enlazarán las columnas de resultado.

Si se especifica una longitud, debe incluir espacio para todas las columnas enlazadas y cualquier relleno de la estructura o el búfer para asegurarse de que cuando la dirección de una columna enlazada se incremente con la longitud especificada, el resultado apuntará al principio de la misma columna en la fila siguiente. Al usar el operador sizeof con estructuras o uniones en ANSI C, se garantiza este comportamiento.

El enlace con columnas es la orientación de enlace predeterminada para SQLFetch y SQLFetchScroll.

Para obtener más información, vea Enlazar columnas para usar con cursores de bloque.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_BIND_TYPE en el encabezado ARD.
SQL_ATTR_ROW_NUMBER (ODBC 2.0) Valor SQLULEN que es el número de la fila actual en todo el conjunto de resultados. Si no se puede determinar el número de la fila actual o no hay ninguna fila actual, el controlador devuelve 0.

Este atributo se puede recuperar mediante una llamada a SQLGetStmtAttr , pero no se establece mediante una llamada a SQLSetStmtAttr.
SQL_ATTR_ROW_OPERATION_PTR (ODBC 3.0) Valor SQLUSMALLINT * que apunta a una matriz de valores SQLUSMALLINT usados para omitir una fila durante una operación masiva mediante SQLSetPos. Cada valor se establece en SQL_ROW_PROCEED (para que la fila se incluya en la operación masiva) o SQL_ROW_IGNORE (para que la fila se excluya de la operación masiva). (Las filas no se pueden omitir mediante este uso de esta matriz durante las llamadas a SQLBulkOperations.

Este atributo de instrucción se puede establecer en un puntero nulo, en cuyo caso el controlador no devuelve valores de estado de fila. Este atributo se puede establecer en cualquier momento, pero el nuevo valor no se usa hasta la próxima vez que se llame a SQLSetPos .

Para obtener más información, vea Actualizar filas en el conjunto de filas con SQLSetPos y Eliminar filas en el conjunto de filas con SQLSetPos.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_ARRAY_STATUS_PTR en el ARD.
SQL_ATTR_ROW_STATUS_PTR (ODBC 3.0) Valor SQLUSMALLINT * que apunta a una matriz de valores SQLUSMALLINT que contienen valores de estado de fila después de una llamada a SQLFetch o SQLFetchScroll. La matriz tiene tantos elementos como filas en el conjunto de filas.

Este atributo de instrucción se puede establecer en un puntero nulo, en cuyo caso el controlador no devuelve valores de estado de fila. Este atributo se puede establecer en cualquier momento, pero el nuevo valor no se usa hasta la próxima vez que se llame a SQLBulkOperations, SQLFetch, SQLFetchScroll o SQLSetPos.

Para obtener más información, vea Número de filas capturadas y estado.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_ARRAY_STATUS_PTR en el encabezado IRD.

Este atributo se asigna mediante un controlador ODBC 2.x a la matriz rgbRowStatus en una llamada a SQLExtendedFetch.
SQL_ATTR_ROWS_FETCHED_PTR (ODBC 3.0) Valor SQLULEN * que apunta a un búfer en el que devolver el número de filas capturadas después de una llamada a SQLFetch o SQLFetchScroll; el número de filas afectadas por una operación masiva realizada por una llamada a SQLSetPos con un argumento Operation de SQL_REFRESH; o el número de filas afectadas por una operación masiva realizada por SQLBulkOperations. Este número incluye filas de error.

Para obtener más información, vea Número de filas capturadas y estado.

Al establecer este atributo de instrucción, se establece el campo SQL_DESC_ROWS_PROCESSED_PTR en el encabezado IRD.

Si la llamada a SQLFetch o SQLFetchScroll que rellena el búfer al que apunta este atributo no devuelve SQL_SUCCESS ni SQL_SUCCESS_WITH_INFO, el contenido del búfer no está definido.
SQL_ATTR_SIMULATE_CURSOR (ODBC 2.0) Valor SQLULEN que especifica si los controladores que simulan instrucciones de actualización y eliminación posicionadas garantizan que estas instrucciones afecten a una sola fila.

Para simular instrucciones update y delete posicionadas, la mayoría de los controladores crean una instrucción UPDATE o DELETE buscada que contiene una cláusula WHERE que especifica el valor de cada columna de la fila actual. A menos que estas columnas componen una clave única, esta instrucción puede afectar a más de una fila.

Para garantizar que estas instrucciones afectan solo a una fila, el controlador determina las columnas de una clave única y agrega estas columnas al conjunto de resultados. Si una aplicación garantiza que las columnas del conjunto de resultados componen una clave única, no es necesario que el controlador lo haga. Esto puede reducir el tiempo de ejecución.

SQL_SC_NON_UNIQUE = El controlador no garantiza que las instrucciones de actualización o eliminación posicionadas simuladas afecten solo a una fila; es responsabilidad de la aplicación hacerlo. Si una instrucción afecta a más de una fila, SQLExecute, SQLExecDirect o SQLSetPos devuelve SQLSTATE 01001 (conflicto de operación de cursor).

SQL_SC_TRY_UNIQUE = El controlador intenta garantizar que las instrucciones de actualización o eliminación posicionadas simuladas afectan solo a una fila. El controlador siempre ejecuta estas instrucciones, incluso si podrían afectar a más de una fila, como cuando no hay ninguna clave única. Si una instrucción afecta a más de una fila, SQLExecute, SQLExecDirect o SQLSetPos devuelve SQLSTATE 01001 (conflicto de operación de cursor).

SQL_SC_UNIQUE = El controlador garantiza que las instrucciones de actualización o eliminación posicionadas simuladas afectan solo a una fila. Si el controlador no puede garantizar esto para una instrucción determinada, SQLExecDirect o SQLPrepare devuelve un error.

Si el origen de datos proporciona compatibilidad nativa con SQL para instrucciones de actualización y eliminación posicionadas y el controlador no simula cursores, se devuelve SQL_SUCCESS cuando se solicita SQL_SC_UNIQUE para SQL_SIMULATE_CURSOR. SQL_SUCCESS_WITH_INFO se devuelve si se solicita SQL_SC_TRY_UNIQUE o SQL_SC_NON_UNIQUE. Si el origen de datos proporciona el nivel de soporte técnico SQL_SC_TRY_UNIQUE y el controlador no lo hace, se devuelve SQL_SUCCESS para SQL_SC_TRY_UNIQUE y se devuelve SQL_SUCCESS_WITH_INFO para SQL_SC_NON_UNIQUE.

Si el origen de datos no admite el tipo de simulación de cursor especificado, el controlador sustituye un tipo de simulación diferente y devuelve SQLSTATE 01S02 (valor de opción cambiado). Para SQL_SC_UNIQUE, el conductor sustituye, en orden, SQL_SC_TRY_UNIQUE o SQL_SC_NON_UNIQUE. Por SQL_SC_TRY_UNIQUE, el conductor sustituye SQL_SC_NON_UNIQUE.

El valor predeterminado es SQL_SC_UNIQUE.

Para obtener más información, vea Simulación de instrucciones de actualización y eliminación posicionadas.
SQL_ATTR_USE_BOOKMARKS (ODBC 2.0) Valor de SQLULEN que especifica si una aplicación usará marcadores con un cursor:

SQL_UB_OFF = Desactivado (valor predeterminado)

SQL_UB_VARIABLE = Una aplicación usará marcadores con un cursor y el controlador proporcionará marcadores de longitud variable si se admiten. SQL_UB_FIXED está en desuso en ODBC 3.x. Las aplicaciones ODBC 3.x siempre deben usar marcadores de longitud variable, incluso cuando se trabaja con controladores ODBC 2.x (que solo admiten 4 bytes y marcadores de longitud fija). Esto se debe a que un marcador de longitud fija es simplemente un caso especial de un marcador de longitud variable. Al trabajar con un controlador ODBC 2.x , el Administrador de controladores asigna SQL_UB_VARIABLE a SQL_UB_FIXED.

Para usar marcadores con un cursor, la aplicación debe especificar este atributo con el valor SQL_UB_VARIABLE antes de abrir el cursor.

Para obtener más información, consulte Recuperación de marcadores.

[1] Estas funciones solo se pueden llamar de forma asincrónica si el descriptor es un descriptor de implementación, no un descriptor de aplicación.

Consulte Enlace de columnas y enlace de fila.

Para obtener información sobre Vea
Cancelación del procesamiento de instrucciones Función SQLCancel
Devolver el valor de un atributo de conexión Función SQLGetConnectAttr
Devolver el valor de un atributo de instrucción Función SQLGetStmtAttr
Establecimiento de un atributo de conexión Función SQLSetConnectAttr
Establecimiento de un único campo del descriptor Función SQLSetDescField

Consulte también

Referencia de API ODBC
Archivos de encabezado de ODBC