Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » UltraLite - C- und C++-Programmierung » API-Referenz » UltraLite C/C++ - Gemeinsame API-Referenz

 

ULRegisterErrorCallback-Funktion

Registriert eine Callback-Funktion, die Fehler verarbeitet

Syntax
void ULRegisterErrorCallback (
    SQLCA * sqlca,
    ul_error_callback_fn callback,
    ul_void *   user_data,
    ul_char *   buffer,
    size_t   len 
);
Parameter
  • sqlca   Ein Zeiger auf den SQL-Kommunikationsbereich (SQLCA-Bereich).

    Verwenden Sie in der C++-API die Methode Sqlca.GetCA.

  • callback   Der Name Ihrer Callback-Funktion. Weitere Hinweise zum Prototyp der Funktion finden Sie unter Callback-Funktion für ULRegisterErrorCallback.

    Ein Callback-Wert UL_NULL deaktiviert alle vorher registrierten Callback-Funktionen.

  • user_data   Eine Alternative zu globalen Variablen, um Kontextinformationen global verfügbar zu machen. Dies ist erforderlich, da Sie die Callback-Funktion von allen Positionen in Ihrer Anwendung aus aufrufen können. UltraLite ändert die übergebenen Daten nicht, sondern übergibt sie einfach an Ihre Callback-Funktion, wenn diese aufgerufen wird.

    Sie können jeden beliebigen Datentyp deklarieren und in Ihrer Callback-Funktion in den richtigen Typ umwandeln. Sie können beispeilsweise eine Zeile der folgenden Art in Ihre Callback-Funktion aufnehmen:

    MyContextType * context = (MyContextType *)user_data;

  • buffer   Ein Zeichen-Array, das die Substitutionsparameter für die Fehlermeldung und ein Nullabschlusszeichen enthält. Um UltraLite so klein wie möglich zu halten, werden von UltraLite selbst keinerlei Fehlermeldungen übergeben. Die Substitutionsparameter hängen von dem jeweiligen Fehler ab. Eine vollständige Liste finden Sie unter SQL Anywhere - Fehlermeldungen.

    Der Puffer muss erhalten bleiben, solange UltraLite aktiv ist. Übergeben Sie UL_NULL, wenn Sie keine Parameterinformationen erhalten wollen.

  • len   Die Länge des Puffers (vorhergehender Parameter) in ul_char-Zeichen. Der Wert 100 ist groß genug, um die meisten Fehlerparameter aufnehmen zu können. Wenn der Puffer zu klein ist, werden die Parameter gekürzt.

Bemerkungen

Wenn Sie diese Funktion aufrufen, wird die vom Benutzer übergebene Callback-Funktion aufgerufen, sobald UltraLite einen Fehler meldet. Sie müssen daher ULRegisterErrorCallback sofort nach der Initialisierung des SQL-Kommunikationsbereichs (SQLCA) aufrufen.

Die Fehlerverarbeitung mit dieser Callback-Technik ist vor allem während der Entwicklung hilfreich, da sie gewährleistet, dass Ihrer Anwendung wirklich alle auftretenden Fehler gemeldet werden. Die Callback-Funktion steuert den Ausführungsfluss jedoch nicht, sodass die Anwendung das Feld SQLCODE im SQLCA-Bereich nach jedem Aufruf einer UltraLite-Funktion prüfen muss.

Beispiel

Der folgende Code registriert eine Callback-Funktion für eine UltraLite C++-Komponenten-Anwendung:

int main() {
    ul_char buffer[100];
    DatabaseManager * dm;
    Connection * conn;
    Sqlca.Initialize();
    ULRegisterErrorCallback(
        Sqlca.GetCA(),
        MyErrorCallBack,
        UL_NULL,
        buffer,
        sizeof (buffer) );
    dm = ULInitDatabaseManager( Sqlca );
    ...
}

Nachstehend wird eine Beispiel-Callback-Funktion gezeigt:

ul_error_action UL_GENNED_FN_MOD MyErrorCallBack(
    SQLCA *     Sqlca,
    ul_void *   user_data,
    ul_char *   message_param )
{
    ul_error_action rc = 0;
    (void) user_data;
    
    switch( Sqlca->sqlcode ) {
        // The following error is used for flow control - don't report it here
        case SQLE_NOTFOUND:
            break;
        case SQLE_ULTRALITE_DATABASE_NOT_FOUND:
            _tprintf( _TEXT( "Error %ld: Database file %s not found\n" ), Sqlca->sqlcode, message_param ); 
            break;  
        default:
            _tprintf( _TEXT( "Error %ld: %s\n" ), Sqlca->sqlcode, message_param ); 
        break;
     }
    return rc;
}
Siehe auch