Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aplikace volají SQLGetDiagRec nebo SQLGetDiagField k načtení diagnostických informací. Tyto funkce přijímají popisovač prostředí, připojení, příkazu nebo ukazatele a vrací diagnostiku z funkce, která tento popisovač naposledy použila. Diagnostika zaprotokolovaná na konkrétním popisovači se zahodí, když je volána nová funkce pomocí tohoto popisovače. Pokud funkce vrátila více diagnostických záznamů, aplikace tyto funkce volá vícekrát; Celkový počet záznamů stavu se načte voláním sqlGetDiagField pro záznam záhlaví (záznam 0) s možností SQL_DIAG_NUMBER.
Aplikace načítají jednotlivá diagnostická pole voláním sqlGetDiagField a zadáním pole, které se má načíst. Některá diagnostická pole nemají žádný význam pro určité typy popisovačů. Seznam diagnostických polí a jejich významů najdete v popisu funkce SQLGetDiagField .
Aplikace načítají SQLSTATE, nativní kód chyby a diagnostickou zprávu v jednom volání voláním SQLGetDiagRec; SqlGetDiagRec nelze použít k načtení informací ze záznamu hlavičky.
Například následující kód vyzve uživatele k zadání příkazu SQL a spustí ho. Pokud byly vráceny nějaké diagnostické informace, zavolá SQLGetDiagField, aby získal počet záznamů stavu, a pak zavolá SQLGetDiagRec, aby získal SQLSTATE, nativní kód chyby a diagnostickou zprávu z těchto záznamů.
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.
}