Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os aplicativos chamam SQLGetDiagRec ou SQLGetDiagField para recuperar informações de diagnóstico. Essas funções aceitam um identificador de descritor, ambiente, conexão ou instrução e retornam diagnósticos da função que usou esse identificador pela última vez. Os diagnósticos registrados em um identificador específico são descartados quando uma nova função é chamada usando esse identificador. Se a função retornou vários registros de diagnóstico, o aplicativo chama essas funções diversas vezes; o número total de registros de status é recuperado chamando SQLGetDiagField para o registro de cabeçalho (registro 0) com a opção SQL_DIAG_NUMBER.
Os aplicativos recuperam campos de diagnóstico individuais chamando SQLGetDiagField e especificando o campo a ser recuperado. Determinados campos de diagnóstico não têm significado para determinados tipos de identificadores. Para obter uma lista de campos de diagnóstico e seus significados, consulte a descrição da função SQLGetDiagField.
Os aplicativos recuperam o SQLSTATE, o código de erro nativo e a mensagem de diagnóstico em uma única chamada, chamando SQLGetDiagRec; SQLGetDiagRec não pode ser usado para recuperar informações do registro de cabeçalho.
Por exemplo, o código a seguir solicita ao usuário uma instrução SQL e a executa. Se informações de diagnóstico forem retornadas, ele chamará SQLGetDiagField para obter o número de registros de status e SQLGetDiagRec para obter o SQLSTATE, o código de erro nativo e a mensagem de diagnóstico desses registros.
SQLCHAR SqlState[6], SQLStmt[100], Msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER NativeError;
SQLSMALLINT i, MsgLen;
SQLRETURN rc1, rc2;
SQLHSTMT hstmt;
// Prompt the user for a SQL statement.
GetSQLStmt(SQLStmt);
// Execute the SQL statement and return any errors or warnings.
rc1 = SQLExecDirect(hstmt, SQLStmt, SQL_NTS);
if ((rc1 == SQL_SUCCESS_WITH_INFO) || (rc1 == SQL_ERROR)) {
SQLLEN numRecs = 0;
SQLGetDiagField(SQL_HANDLE_STMT, hstmt, 0, SQL_DIAG_NUMBER, &numRecs, 0, 0);
// Get the status records.
i = 1;
while (i <= numRecs && (rc2 = SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, i, SqlState, &NativeError,
Msg, sizeof(Msg), &MsgLen)) != SQL_NO_DATA) {
DisplayError(SqlState,NativeError,Msg,MsgLen);
i++;
}
}
if ((rc1 == SQL_SUCCESS) || (rc1 == SQL_SUCCESS_WITH_INFO)) {
// Process statement results, if any.
}