Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
As aplicações chamam SQLGetDiagRec ou SQLGetDiagField para recuperar informação de diagnóstico. Estas funções aceitam um manipulador de ambiente, ligação, instrução ou descritor e devolvem diagnósticos da função que usou esse manipulador pela última vez. Os diagnósticos registados num determinado handle são descartados quando uma nova função é chamada usando esse handle. Se a função devolver múltiplos registos de diagnóstico, a aplicação chama essas funções várias vezes; o número total de registos de estado é recuperado chamando SQLGetDiagField para o registo de cabeçalho (registo 0) com a opção SQL_DIAG_NUMBER.
As aplicações recuperam campos de diagnóstico individuais chamando SQLGetDiagField e especificando o campo a recuperar. Certos campos de diagnóstico não têm qualquer significado para certos tipos de alavancos. Para uma lista de campos de diagnóstico e os seus significados, veja a descrição da função SQLGetDiagField .
As aplicações recuperam o SQLSTATE, o código de erro nativo e a mensagem de diagnóstico numa única chamada, chamando SQLGetDiagRec; O SQLGetDiagRec não pode ser usado para recuperar informação do registo de cabeçalho.
Por exemplo, o código seguinte solicita ao utilizador uma instrução SQL e executa-a. Se alguma informação de diagnóstico for devolvida, chama SQLGetDiagField para obter o número de registos de estado e SQLGetDiagRec para obter o SQLSTATE, código de erro nativo e mensagem de diagnóstico desses registos.
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.
}