Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Toepassingen roepen SQLGetDiagRec of SQLGetDiagField aan om diagnostische gegevens op te halen. Deze functies accepteren een omgeving, verbinding, instructie of descriptor-handle en retourneren diagnostische gegevens van de functie die de laatste keer die handle heeft gebruikt. De diagnostische gegevens die zijn aangemeld bij een bepaalde ingang, worden verwijderd wanneer een nieuwe functie wordt aangeroepen met behulp van die ingang. Als de functie meerdere diagnostische records heeft geretourneerd, roept de toepassing deze functies meerdere keren aan; het totale aantal statusrecords wordt opgehaald door SQLGetDiagField aan te roepen voor de headerrecord (record 0) met de optie SQL_DIAG_NUMBER.
Toepassingen halen afzonderlijke diagnostische velden op door SQLGetDiagField aan te roepen en het veld op te geven dat moet worden opgehaald. Bepaalde diagnostische velden hebben geen betekenis voor bepaalde typen handgrepen. Zie de beschrijving van de functie SQLGetDiagField voor een lijst met diagnostische velden en de betekenis ervan.
Toepassingen halen de SQLSTATE, systeemeigen foutcode en diagnostisch bericht op in één aanroep door SQLGetDiagRec aan te roepen; SQLGetDiagRec kan niet worden gebruikt om informatie op te halen uit de headerrecord.
De volgende code vraagt de gebruiker bijvoorbeeld om een SQL-instructie en voert deze uit. Als er diagnostische gegevens zijn geretourneerd, wordt SQLGetDiagField aangeroepen om het aantal statusrecords en SQLGetDiagRec op te halen om de SQLSTATE, systeemeigen foutcode en het diagnostische bericht van die records op te halen.
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.
}