Función SQLGetDiagField
de conformidad de
Versión introducida: Cumplimiento de estándares ODBC 3.0: ISO 92
resumen
SQLGetDiagField devuelve el valor actual de un campo de un registro de la estructura de datos de diagnóstico (asociada a un identificador especificado) que contiene información de error, advertencia y estado.
Sintaxis
SQLRETURN SQLGetDiagField(
SQLSMALLINT HandleType,
SQLHANDLE Handle,
SQLSMALLINT RecNumber,
SQLSMALLINT DiagIdentifier,
SQLPOINTER DiagInfoPtr,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr);
Argumentos
handleType
[Entrada] Identificador de tipo de identificador que describe el tipo de identificador para el que se requieren diagnósticos. Debe ser uno de los siguientes:
SQL_HANDLE_DBC
SQL_HANDLE_DBC_INFO_TOKEN
SQL_HANDLE_DESC
SQL_HANDLE_ENV
SQL_HANDLE_STMT
SQL_HANDLE_DBC_INFO_TOKEN controlador solo lo usa el Administrador de controladores y el controlador. Las aplicaciones no deben usar este tipo de identificador. Para obtener más información sobre SQL_HANDLE_DBC_INFO_TOKEN, vea Developing Connection-Pool Awareness in an ODBC Driver.
de identificador
[Entrada] Identificador de la estructura de datos de diagnóstico, del tipo indicado por HandleType. Si handleType es SQL_HANDLE_ENV, handle puede ser un identificador de entorno compartido o compartido.
RecNumber
[Entrada] Indica el registro de estado desde el que la aplicación busca información. Los registros de estado se numeran a partir de 1. Si el argumento
diagIdentifier
[Entrada] Indica el campo del diagnóstico cuyo valor se va a devolver. Para obtener más información, vea la sección "DiagIdentifier Argument" en "Comments".
DiagInfoPtr
[Salida] Puntero a un búfer en el que se va a devolver la información de diagnóstico. El tipo de datos depende del valor de DiagIdentifier. Si DiagInfoPtr es un tipo entero, las aplicaciones deben usar un búfer de SQLULEN e inicializar el valor en 0 antes de llamar a esta función, ya que algunos controladores solo pueden escribir los 32 o 16 bits inferiores de un búfer y dejar sin cambios el bit de orden superior.
Si DiagInfoPtr es NULL, stringLengthPtr seguirá devolviendo el número total de bytes (excepto el carácter de terminación NULL para los datos de caracteres) disponible para devolver en el búfer al que apunta DiagInfoPtr.
bufferLength
[Entrada] Si diagIdentifier es un diagnóstico definido por ODBC y diagInfoPtr apunta a una cadena de caracteres o a un búfer binario, este argumento debe ser la longitud de *DiagInfoPtr. Si diagIdentifier es un campo definido por ODBC y *diagInfoPtr es un entero, se omite bufferLength. Si el valor de *DiagInfoPtr es una cadena Unicode (al llamar a SQLGetDiagFieldW), el argumento BufferLength debe ser un número par.
Si diagIdentifier es un campo definido por el controlador, la aplicación indica la naturaleza del campo en el Administrador de controladores estableciendo el argumento BufferLength. bufferLength puede tener los siguientes valores:
Si DiagInfoPtr es un puntero a una cadena de caracteres, bufferLength es la longitud de la cadena o SQL_NTS.
Si DiagInfoPtr es un puntero a un búfer binario, la aplicación coloca el resultado de la macro SQL_LEN_BINARY_ATTR(longitud) en BufferLength. Esto coloca un valor negativo en BufferLength.
Si DiagInfoPtr es un puntero a un valor distinto de una cadena de caracteres o una cadena binaria, bufferLength debe tener el valor SQL_IS_POINTER.
Si *DiagInfoPtr contiene un tipo de datos de longitud fija, BufferLength es SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT o SQL_IS_USMALLINT, según corresponda.
StringLengthPtr
[Salida] Puntero a un búfer en el que devolver el número total de bytes (excepto el número de bytes necesarios para el carácter de terminación null) disponible para devolver en *DiagInfoPtr, para los datos de caracteres. Si el número de bytes disponibles para devolver es mayor o igual que bufferLength, el texto de *DiagInfoPtr se trunca en BufferLength menos la longitud de un carácter de terminación NULL.
Devuelve
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE o SQL_NO_DATA.
Diagnósticos
sqlGetDiagField no publica registros de diagnóstico por sí mismos. Usa los siguientes valores devueltos para notificar el resultado de su propia ejecución:
SQL_SUCCESS: la función devolvió correctamente la información de diagnóstico.
SQL_SUCCESS_WITH_INFO: *diagInfoPtr era demasiado pequeño para contener el campo de diagnóstico solicitado. Por lo tanto, los datos del campo de diagnóstico se truncaron. Para determinar que se produjo un truncamiento, la aplicación debe comparar bufferLength con el número real de bytes disponibles, que se escribe en *StringLengthPtr.
SQL_INVALID_HANDLE: el identificador indicado por handleType y Handle no era un identificador válido.
SQL_ERROR: se produjo una de las siguientes acciones:
el argumento DiagIdentifier no era uno de los valores válidos.
el argumento DiagIdentifier SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE o SQL_DIAG_ROW_COUNT, pero Handle no era un identificador de instrucción. (El Administrador de controladores devuelve este diagnóstico).
El argumento RecNumber fue negativo o 0 cuando DiagIdentifier indicar un campo de un registro de diagnóstico. RecNumber se omite para los campos de encabezado.
El valor solicitado era una cadena de caracteres y bufferLength era menor que cero.
Al usar la notificación asincrónica, la operación asincrónica en el identificador no se completó.
SQL_NO_DATA:
RecNumber era mayor que el número de registros de diagnóstico que existían para el identificador especificado en Handle. La función también devuelve SQL_NO_DATA para cualquier RecNumber positivosi no hay registros de diagnóstico para Handle .
Comentarios
Normalmente, una aplicación llama a SQLGetDiagField para lograr uno de estos tres objetivos:
Para obtener información de advertencia o error específica cuando una llamada de función ha devuelto SQL_ERROR o SQL_SUCCESS_WITH_INFO (o SQL_NEED_DATA para la función sqlBrowseConnect de
). Para determinar el número de filas del origen de datos afectados al realizar operaciones de inserción, eliminación o actualización con una llamada a SQLExecute, SQLExecDirect, SQLBulkOperations, o SQLSetPos (desde el campo de encabezado SQL_DIAG_ROW_COUNT) o para determinar el número de filas que existen en el cursor abierto actual, si el controlador puede proporcionar esta información (desde el campo de encabezado SQL_DIAG_CURSOR_ROW_COUNT).
Para determinar qué función se ejecutó mediante una llamada a sqlExecDirect o sqlExecute (desde los campos de encabezado SQL_DIAG_DYNAMIC_FUNCTION y SQL_DIAG_DYNAMIC_FUNCTION_CODE).
Cualquier función ODBC puede publicar cero o más registros de diagnóstico cada vez que se llama, por lo que una aplicación puede llamar a SQLGetDiagField después de cualquier llamada a función ODBC. No hay ningún límite en el número de registros de diagnóstico que se pueden almacenar en cualquier momento.
Una aplicación puede examinar todos los registros de diagnóstico incrementando RecNumber, siempre y cuando SQLGetDiagField devuelva SQL_SUCCESS. El número de registros de estado se indica en el campo de encabezado SQL_DIAG_NUMBER. Las llamadas a sqlGetDiagField no son destructivas para los campos de encabezado y registro. La aplicación puede llamar a SQLGetDiagField más adelante para recuperar un campo de un registro, siempre y cuando no se haya llamado a una función distinta de las funciones de diagnóstico, lo que publicaría registros en el mismo identificador.
Una aplicación puede llamar a SQLGetDiagField para devolver cualquier campo de diagnóstico en cualquier momento, excepto SQL_DIAG_CURSOR_ROW_COUNT o SQL_DIAG_ROW_COUNT, que devolverá SQL_ERROR si Handle no es un identificador de instrucción. Si algún otro campo de diagnóstico no está definido, la llamada a SQLGetDiagField devolverá SQL_SUCCESS (siempre que no se encuentre ningún otro diagnóstico) y se devuelve un valor indefinido para el campo.
Para obtener más información, vea Using SQLGetDiagRec and SQLGetDiagField and Implementing SQLGetDiagRec and SQLGetDiagField.
Al llamar a una API distinta de la que se ejecuta de forma asincrónica, se generará HY010 "Error de secuencia de funciones". Sin embargo, el registro de error no se puede recuperar antes de que se complete la operación asincrónica.
Argumento HandleType
Cada tipo de identificador puede tener información de diagnóstico asociada. El argumento HandleType indica el tipo de identificador de Handle.
Algunos campos de encabezado y registro no se pueden devolver para los identificadores de entorno, conexión, instrucción y descriptor. Los identificadores para los que un campo no es aplicable se indican en las secciones "Campos de encabezado" y "Campos de registro" siguientes.
Si SQL_HANDLE_ENV handleType, handle puede ser un identificador de entorno compartido o no compartido.
Ningún campo de diagnóstico de encabezado específico del controlador debe estar asociado a un identificador de entorno.
Los únicos campos de encabezado de diagnóstico definidos para un identificador de descriptor son SQL_DIAG_NUMBER y SQL_DIAG_RETURNCODE.
Argumento DiagIdentifier
Este argumento indica el identificador del campo requerido de la estructura de datos de diagnóstico. Si RecNumber es mayor o igual que 1, los datos del campo describen la información de diagnóstico devuelta por una función. Si recNumber es 0, el campo se encuentra en el encabezado de la estructura de datos de diagnóstico y, por tanto, contiene datos relativos a la llamada de función que devolvió la información de diagnóstico, no a la información específica.
Los controladores pueden definir campos de registro y encabezado específicos del controlador en la estructura de datos de diagnóstico.
Una aplicación ODBC 3*.x* que funcione con un controlador ODBC 2*.x* podrá llamar a SQLGetDiagField solo con un argumento DiagIdentifier de SQL_DIAG_CLASS_ORIGIN, SQL_DIAG_CLASS_SUBCLASS_ORIGIN, SQL_DIAG_CONNECTION_NAME, SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_NUMBER, SQL_DIAG_RETURNCODE, SQL_DIAG_SERVER_NAME, o SQL_DIAG_SQLSTATE. Todos los demás campos de diagnóstico devolverán SQL_ERROR.
Campos de encabezado
Los campos de encabezado enumerados en la tabla siguiente se pueden incluir en el argumento
DiagIdentifier | Tipo de valor devuelto | Devuelve |
---|---|---|
SQL_DIAG_CURSOR_ROW_COUNT | SQLLEN | Este campo contiene el recuento de filas en el cursor. Su semántica depende de los tipos de información SQLGetInfo SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 y SQL_STATIC_CURSOR_ATTRIBUTES2, que indican qué recuentos de filas están disponibles para cada tipo de cursor (en los bits SQL_CA2_CRC_EXACT y SQL_CA2_CRC_APPROXIMATE). El contenido de este campo solo se define para identificadores de instrucción y solo después de sqlExecute, se ha llamado a SQLExecDirecto SQLMoreResults. Al llamar a SQLGetDiagField con un diagIdentifier de SQL_DIAG_CURSOR_ROW_COUNT que no sea un identificador de instrucción devolverá SQL_ERROR. |
SQL_DIAG_DYNAMIC_FUNCTION | SQLCHAR * | Se trata de una cadena que describe la instrucción SQL que ejecutó la función subyacente. (Vea "Valores de los campos de función dinámica", más adelante en esta sección, para obtener valores específicos). El contenido de este campo solo se define para identificadores de instrucción y solo después de una llamada a SQLExecute, SQLExecDirecto SQLMoreResults. Al llamar a |
SQL_DIAG_DYNAMIC_FUNCTION_CODE | SQLINTEGER | Se trata de un código numérico que describe la instrucción SQL ejecutada por la función subyacente. (Vea "Valores de los campos de función dinámica", más adelante en esta sección, para obtener un valor específico). El contenido de este campo solo se define para identificadores de instrucción y solo después de una llamada a SQLExecute, SQLExecDirecto SQLMoreResults. Al llamar a |
SQL_DIAG_NUMBER | SQLINTEGER | Número de registros de estado disponibles para el identificador especificado. |
SQL_DIAG_RETURNCODE | SQLRETURN | Devuelve el código devuelto por la función . Para obtener una lista de códigos de retorno, vea códigos de retorno. El controlador no tiene que implementar SQL_DIAG_RETURNCODE; siempre se implementa mediante el Administrador de controladores. Si todavía no se ha llamado a ninguna función en el |
SQL_DIAG_ROW_COUNT | SQLLEN | Número de filas afectadas por una inserción, eliminación o actualización realizada por SQLExecute, SQLExecDirect, SQLBulkOperationso SQLSetPos. Se define el controlador después de ejecutar un |
Campos de registro
Los campos de registro enumerados en la tabla siguiente se pueden incluir en el argumento
DiagIdentifier | Tipo de valor devuelto | Devuelve |
---|---|---|
SQL_DIAG_CLASS_ORIGIN | SQLCHAR * | Cadena que indica el documento que define la parte de clase del valor SQLSTATE en este registro. Su valor es "ISO 9075" para todos los SQLSTATEs definidos por la interfaz de nivel de llamada OPEN Group e ISO. Para SQLSTATEs específicos de ODBC (todos aquellos cuya clase SQLSTATE es "IM"), su valor es "ODBC 3.0". |
SQL_DIAG_COLUMN_NUMBER | SQLINTEGER | Si el campo SQL_DIAG_ROW_NUMBER es un número de fila válido en un conjunto de filas o un conjunto de parámetros, este campo contiene el valor que representa el número de columna en el conjunto de resultados o el número de parámetro del conjunto de parámetros. Los números de columna del conjunto de resultados siempre comienzan en 1; si este registro de estado pertenece a una columna de marcador, el campo puede ser cero. Los números de parámetro comienzan en 1. Tiene el valor SQL_NO_COLUMN_NUMBER si el registro de estado no está asociado a un número de columna o a un número de parámetro. Si el controlador no puede determinar el número de columna o el número de parámetro al que está asociado este registro, este campo tiene el valor SQL_COLUMN_NUMBER_UNKNOWN. El contenido de este campo solo se define para los identificadores de instrucción. |
SQL_DIAG_CONNECTION_NAME | SQLCHAR * | Cadena que indica el nombre de la conexión a la que se relaciona el registro de diagnóstico. Este campo está definido por el controlador. Para las estructuras de datos de diagnóstico asociadas al identificador de entorno y para los diagnósticos que no se relacionan con ninguna conexión, este campo es una cadena de longitud cero. |
SQL_DIAG_MESSAGE_TEXT | SQLCHAR * | Un mensaje informativo sobre el error o la advertencia. Este campo tiene el formato descrito en mensajes de diagnóstico. No hay ninguna longitud máxima para el texto del mensaje de diagnóstico. |
SQL_DIAG_NATIVE | SQLINTEGER | Código de error nativo específico del origen de datos o controlador. Si no hay ningún código de error nativo, el controlador devuelve 0. |
SQL_DIAG_ROW_NUMBER | SQLLEN | Este campo contiene el número de fila del conjunto de filas o el número de parámetro del conjunto de parámetros, con el que está asociado el registro de estado. Los números de fila y los números de parámetro comienzan por 1. Este campo tiene el valor SQL_NO_ROW_NUMBER si este registro de estado no está asociado a un número de fila o a un número de parámetro. Si el controlador no puede determinar el número de fila o el número de parámetro al que está asociado este registro, este campo tiene el valor SQL_ROW_NUMBER_UNKNOWN. El contenido de este campo solo se define para los identificadores de instrucción. |
SQL_DIAG_SERVER_NAME | SQLCHAR * | Cadena que indica el nombre del servidor al que se relaciona el registro de diagnóstico. Es el mismo que el valor devuelto para una llamada a sqlGetInfo con la opción SQL_DATA_SOURCE_NAME. Para las estructuras de datos de diagnóstico asociadas al identificador del entorno y para los diagnósticos que no están relacionados con ningún servidor, este campo es una cadena de longitud cero. |
SQL_DIAG_SQLSTATE | SQLCHAR * | Código de diagnóstico de SQLSTATE de cinco caracteres. Para obtener más información, vea SQLSTATEs. |
SQL_DIAG_SUBCLASS_ORIGIN | SQLCHAR * | Cadena con el mismo formato y valores válidos que SQL_DIAG_CLASS_ORIGIN, que identifica la parte de definición de la parte de subclase del código SQLSTATE. Los VALORES SQLSTATES específicos de ODBC para los que se devuelve "ODBC 3.0" incluyen lo siguiente: 01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY098, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012. |
Valores de los campos de función dinámica
En la tabla siguiente se describen los valores de SQL_DIAG_DYNAMIC_FUNCTION y SQL_DIAG_DYNAMIC_FUNCTION_CODE que se aplican a cada tipo de instrucción SQL ejecutada por una llamada a SQLExecute o SQLExecDirect. El controlador puede agregar valores definidos por el controlador a los enumerados.
Instrucción SQL ejecutado |
Valor de SQL_DIAG_DYNAMIC_FUNCTION |
Valor de SQL_DIAG_DYNAMIC_FUNCTION_CODE |
---|---|---|
alter-domain-statement | "ALTER DOMAIN" | SQL_DIAG_ALTER_DOMAIN |
alter-table-statement | "ALTER TABLE" | SQL_DIAG_ALTER_TABLE |
de definición de aserción | "CREATE ASSERTION" | SQL_DIAG_CREATE_ASSERTION |
de definición de juego de caracteres | "CREAR JUEGO DE CARACTERES" | SQL_DIAG_CREATE_CHARACTER_SET |
de definición de intercalación | "CREAR INTERCALACIÓN" | SQL_DIAG_CREATE_COLLATION |
de definición de dominio | "CREATE DOMAIN" | SQL_DIAG_CREATE_DOMAIN |
create-index-statement | "CREATE INDEX" | SQL_DIAG_CREATE_INDEX |
create-table-statement | "CREATE TABLE" | SQL_DIAG_CREATE_TABLE |
create-view-statement | "CREATE VIEW" | SQL_DIAG_CREATE_VIEW |
de especificación del cursor | "SELECT CURSOR" | SQL_DIAG_SELECT_CURSOR |
colocados en la instrucción delete | "CURSOR DE ELIMINACIÓN DINÁMICA" | SQL_DIAG_DYNAMIC_DELETE_CURSOR |
de búsqueda en la instrucción delete | "DELETE WHERE" | SQL_DIAG_DELETE_WHERE |
drop-assertion-statement | "DROP ASSERTION" | SQL_DIAG_DROP_ASSERTION |
drop-character-set-stmt | "DROP CHARACTER SET" | SQL_DIAG_DROP_CHARACTER_SET |
drop-collation-statement | "DROP COLLATION" | SQL_DIAG_DROP_COLLATION |
drop-domain-statement | "DROP DOMAIN" | SQL_DIAG_DROP_DOMAIN |
drop-index-statement | "DROP INDEX" | SQL_DIAG_DROP_INDEX |
drop-schema-statement | "DROP SCHEMA" | SQL_DIAG_DROP_SCHEMA |
drop-table-statement | "DROP TABLE" | SQL_DIAG_DROP_TABLE |
drop-translation-statement | "DROP TRANSLATION" | SQL_DIAG_DROP_TRANSLATION |
drop-view-statement | "DROP VIEW" | SQL_DIAG_DROP_VIEW |
grantstatement | "GRANT" | SQL_DIAG_GRANT |
insert-statement | "INSERT" | SQL_DIAG_INSERT |
ODBC-procedure-extension | "CALL" | SQL_DIAG_ LLAMADA |
revoke-statement | "REVOKE" | SQL_DIAG_REVOKE |
de definición de esquema | "CREATE SCHEMA" | SQL_DIAG_CREATE_SCHEMA |
de definición de traducción | "CREATE TRANSLATION" | SQL_DIAG_CREATE_TRANSLATION |
de posición update-statement | "CURSOR DE ACTUALIZACIÓN DINÁMICA" | SQL_DIAG_DYNAMIC_UPDATE_CURSOR |
update-statement-searched | "UPDATE WHERE" | SQL_DIAG_UPDATE_WHERE |
Desconocido | de cadena vacía | SQL_DIAG_UNKNOWN_STATEMENT |
Secuencia de registros de estado
Los registros de estado se colocan en una secuencia basada en el número de fila y el tipo del diagnóstico. El Administrador de controladores determina el orden final en el que se devuelven los registros de estado que genera. El controlador determina el orden final en el que se devuelven los registros de estado que genera.
Si tanto el Administrador de controladores como el controlador publican registros de diagnóstico, el Administrador de controladores es responsable de ordenarlos.
Si hay dos o más registros de estado, la secuencia de los registros se determina primero por número de fila. Las reglas siguientes se aplican para determinar la secuencia de registros de diagnóstico por fila:
Los registros que no corresponden a ninguna fila aparecen delante de los registros que corresponden a una fila determinada, ya que SQL_NO_ROW_NUMBER se define como -1.
Los registros para los que el número de fila es desconocido aparecen delante de todos los demás registros, ya que SQL_ROW_NUMBER_UNKNOWN se define como -2.
Para todos los registros que pertenecen a filas específicas, los registros se ordenan por el valor del campo SQL_DIAG_ROW_NUMBER. Se muestran todos los errores y advertencias de la primera fila afectada, y luego todos los errores y advertencias de la siguiente fila afectada, etc.
Nota
El Administrador de controladores ODBC 3*.x* no ordena los registros de estado en la cola de diagnóstico si SQLSTATE 01S01 (error en fila) se devuelve mediante un controlador ODBC 2*.x* o si SQLSTATE 01S01 (error en fila) lo devuelve un controlador ODBC 2*.x* o si SQLSTATE 01S01 (error en fila) lo devuelve un Se llama al controlador ODBC 3*.x* cuando se llama a sqlExtendedFetch o se llama sqlSetPos en un cursor que se ha colocado con SQLExtendedFetch.
Dentro de cada fila, o para todos los registros que no corresponden a una fila o para la que se desconoce el número de fila, o para todos esos registros con un número de fila igual a SQL_NO_ROW_NUMBER, el primer registro enumerado se determina mediante un conjunto de reglas de ordenación. Después del primer registro, el orden de los demás registros que afectan a una fila no está definido. Una aplicación no puede suponer que los errores preceden a las advertencias después del primer registro. Las aplicaciones deben examinar la estructura completa de datos de diagnóstico para obtener información completa sobre una llamada incorrecta a una función.
Las reglas siguientes se usan para determinar el primer registro dentro de una fila. El registro con el rango más alto es el primer registro. El origen de un registro (Administrador de controladores, controlador, puerta de enlace, etc.) no se tiene en cuenta al clasificar los registros.
errores registros de estado que describen los errores tienen la clasificación más alta. Las reglas siguientes se aplican a errores de ordenación:
Registros que indican un error de transacción o una posible salida de error de transacción para todos los demás registros.
Si dos o más registros describen la misma condición de error, los SQLSTATEs definidos por la especificación de la CLI de Open Group (clases de 03 a HZ) outrank ODBC- y SQLSTATEs definidos por el controlador.
Los valores de no datos definidos por la implementación Registros de estado que describen los valores sin datos definidos por el controlador (clase 02) tienen la segunda clasificación más alta.
Advertencias Registros de estado que describen advertencias (clase 01) tienen la clasificación más baja. Si dos o más registros describen la misma condición de advertencia, a continuación, se muestran las SQLSTATEs de advertencia definidas por la especificación open Group CLI outrank ODBC definidas por ODBC y SQLSTATEs definidas por el controlador.
Funciones relacionadas
Para obtener información sobre | Ver |
---|---|
Obtención de varios campos de una estructura de datos de diagnóstico | función SQLGetDiagRec |