Home |
Fehlerbehandlung in QuickBASIC |
Tipps zur QBASIC und QuickBASIC Programmierung |
| Das Beispiel für eine komplette Fehlerbehandlung enthält die Protokollierung der aufgetretenen Fehler in einer Logdatei LOG.LOG. Alle Fehler werden dem Benutzer durch Text und Abspielen einer Tonfolge gemeldet und er muss sie zumindest
bestätigen. Nicht behebbare Fehler führen zum Abbruch. Die Fehlerbehandlungsroutine wird normalerweise mit
REM $INCLUDE: 'fehler.mrg' im Programm. An passender Stelle des Hauptprogramms wird die Logdatei geöffnet und die Fehlerbehandlung freigeschaltet mit den Befehlen: GOSUB logopen |
'Matthaei
'Fehlerbehandlung für Quick Basic-Programme 21.12.89 FEHLER.MRG
'Zeit und Datum nach R$
timeget:
R$ = DATE$ + TIME$
R$ = MID$(R$, 4, 2) + "." + LEFT$(R$, 2) + "." + MID$(R$, 9, 2) + " " + RIGHT$(R$, 8)
RETURN
'Open/ Put Logdatei
logopen:
OPEN "R", 3, "LOG.LOG", 40: FIELD 3, 40 AS LO$
GET 3, 1: L1 = VAL(MID$(LO$, 18, 4)): L2 = VAL(MID$(LO$, 22, 4)): LJ$ = LO$
GOSUB timeget: R$ = R$ + "START: " + PGM$: MID$(LJ$, 1, 17) = LEFT$(R$, 17)
logput:
LSET LO$ = R$: PUT 3, L1: L1 = L1 + 1: IF L1 > L2 THEN L1 = 2
MID$(LJ$, 18, 8) = RIGHT$(" " + STR$(L1), 4) + RIGHT$(STR$(L2), 4): LSET LO$ = LJ$
PUT 3, 1
RETURN
'Einstiegspunkt, wenn mit Logdatei
fehler:
CPOS = POS(0): 'Cursorposition merken
R$ = STR$(ERR) + "-Fehler": IF ERL <> 0 THEN R$ = R$ + " in Zeile:" + STR$(ERL)
PRINT "PGM "; PGM$; ": "; R$: GOSUB logput
GOTO fehler.analyse
'Einstiegspunkt, wenn ohne Logdatei
fehler0:
CPOS = POS(0): 'Cursorposition merken
R$ = STR$(ERR) + "-Fehler": IF ERL <> 0 THEN R$ = R$ + " in Zeile:" + STR$(ERL)
fehler.analyse:
errt = 1
SELECT CASE ERR
CASE 7: PRINT "Nicht genug Speicher"
CASE 11: PRINT "Division durch 0"
CASE 13: PRINT "Falscher Typ"
CASE 14: PRINT "Nicht genug Speicher für Strings"
CASE 24: PRINT "Geräte Zeitüberwachung": errt = 2
CASE 25: PRINT "Gerätefehler(Drucker/DFÜ?)": errt = 2
CASE 27: PRINT "Papierendemeldung vom Drucker": errt = 2
CASE 51: PRINT "Internfehler"
CASE 53: PRINT "Datei nicht gefunden": errt = 2
CASE 54: PRINT "Falscher Dateimodus"
CASE 55: PRINT "Datei ist schon eröffnet"
CASE 57: PRINT "Geräteart= Ein/Ausgabe"
CASE 58: PRINT "Datei gibt es schon"
CASE 61: PRINT "Diskette/ Festplatte ist voll": errt = 2
CASE 62: PRINT "Eingabebefehl obwohl Dateiende gemeldet"
CASE 63: PRINT "ungültige Dateisatznummer"
CASE 64: PRINT "ungültiger Dateiname"
CASE 67: PRINT "Zu viele Dateien"
CASE 68: PRINT "Gerät nicht verfügbar"
CASE 69: PRINT "Überlauf im Datenübertragungspuffer"
CASE 70: PRINT "Zugriffserlaubnis verweigert. Schreibgeschützt oder Netzwerksperre ?"
errt = 1
CASE 71: PRINT "Diskette nicht bereit": errt = 2
CASE 72: PRINT "Diskette/ Festplatte defekt"
CASE 75: PRINT "Pfad/Dateizuordnung nicht möglich"
END SELECT
IF errt = 1 THEN
PLAY "cdefgab"
PRINT "Programmabbruch wegen Fehlercode:"; ERR
PRINT "Bitte drücken Sie Return"
INPUT A$: CLOSE : SYSTEM
END IF
PLAY "MBcdefgabcdefgabcdefgab"
PRINT "Wenn Sie den Fehler behoben haben: Return"
INPUT A$: LOCATE , CPOS: RESUME
|