Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Приложения вызывают SQLGetDiagRec или SQLGetDiagField для получения диагностических сведений. Эти функции принимают дескриптор среды, соединения, инструкции или дескриптора и возвращают диагностика из функции, которая последний раз использовала этот дескриптор. Диагностика, вошедший в определенный дескриптор, удаляется при вызове новой функции с помощью этого дескриптора. Если функция возвращала несколько диагностических записей, приложение вызывает эти функции несколько раз; Общее количество записей состояния извлекается путем вызова SQLGetDiagField для записи заголовка (запись 0) с параметром SQL_DIAG_NUMBER.
Приложения получают отдельные поля диагностики, вызывая SQLGetDiagField и указывая поле для извлечения. Некоторые диагностические поля не имеют никакого значения для определенных типов дескрипторов. Список полей диагностики и их значения см. в описании функции SQLGetDiagField .
Приложения получают SQLSTATE, собственный код ошибки и диагностическое сообщение в одном вызове путем вызова SQLGetDiagRec; SQLGetDiagRec нельзя использовать для получения сведений из записи заголовка.
Например, следующий код запрашивает пользователя для инструкции SQL и выполняет его. Если были возвращены диагностические сведения, он вызывает SQLGetDiagField , чтобы получить количество записей состояния и SQLGetDiagRec для получения SQLSTATE, машинного кода ошибки и диагностического сообщения из этих записей.
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.
}