====== ErrorHandle ======
Möchte man keine ausgefeilte (ESQL/C-)Fehlerbehandlung programmieren - für sehr kleine Programme durchaus sinvoll - kann ein einziger ErrorHandler (für alle Fehlersituationen) definiert werden.
Um diesen ErrorHandler den ESQL/C Librarys bekannt zu machen, reicht folgende Zeile (z.B. am Anfang der main()-Funktion):
EXEC SQL WHENEVER ERROR CALL errorhandler;
Für mehr Flexibilität definieren wir vorher die "errorhandler"-Funktion wie folgt:
#define errorhandler() _errorhandler_f_l(__FILE__, __LINE__)
Die eigentliche "errorhandler"-Funktion kann dann in etwa so aussehen:
#define MSG_LEN 256
void _errorhandler_f_l (char * datei, int zeile)
{
char meldung[MSG_LEN];
char meldung1[MSG_LEN];
int i;
printf("ERROR in file %s, line %d:", datei, zeile);
rgetlmsg(SQLCODE, meldung, MSG_LEN, &i);
sprintf(meldung1, "SQL Error %d: %s", SQLCODE, meldung);
printf(meldung1, sqlca.sqlerrm);
if (sqlca.sqlerrd[1])
{
rgetlmsg(sqlca.sqlerrd[1], meldung, MSG_LEN, &i);
printf("ISAM Error %d: %s", sqlca.sqlerrd[1], meldung);
} // if
exit(SQLCODE);
} // _errorhandler_f_l()
Das ganze führt dazu, daß das Programm bei Fehlern sofort abgebrochen wird. Vor dem Abbruch wird jedoch die "errorhandler"-Funktion aufgerufen, die ausführliche Informationen zur Ursache des Abbruchs mitteilt.
----
Stand: 12.01.2011
EOF