Registriert eine Callback-Funktion, die Fehler verarbeitet
void ULRegisterErrorCallback ( SQLCA * sqlca, ul_error_callback_fn callback, ul_void * user_data, ul_char * buffer, size_t len );
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.
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.
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; } |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |