Seite 1 von 1

OnErrorCall mit CloseDatabase(id)

Verfasst: 02.02.2022 12:44
von marcelx
Hallo zusammen,

ich teste gerade wie ich Abstürzt mein Programm mit z.B. CloseDatabase() abfangen kann
Beim kompilieren bekomme ich die Fehlermeldung "Das angegebene #Database ist nicht initialisiert" und die Procedure ErrorHandler() wird nicht aufgerufen.
Erzeuge ich ein exe-Datei und starte diese dann gibt es kein Messsage.
Mit Verwendung von RaiseError() funktioniert.

Wie kann nicht solche Fehler abfangen?

Danke und Gruß MarcelX

Code: Alles auswählen

UseSQLiteDatabase()
 
Procedure test(id)
   CloseDatabase(id)
EndProcedure

Procedure ErrorHandler()
  ErrorMessage$ = "A program error was detected:" + Chr(13) 
  ErrorMessage$ + Chr(13)
  ErrorMessage$ + "Error Message:   " + ErrorMessage()      + Chr(13)
  ErrorMessage$ + "Error Code:      " + Str(ErrorCode())    + Chr(13)  
  ErrorMessage$ + "Code Address:    " + Str(ErrorAddress()) + Chr(13)
 
  If ErrorCode() = #PB_OnError_InvalidMemory   
    ErrorMessage$ + "Target Address:  " + Str(ErrorTargetAddress()) + Chr(13)
  EndIf
 
  If ErrorLine() = -1
    ErrorMessage$ + "Sourcecode line: Enable OnError lines support to get code line information." + Chr(13)
  Else
    ErrorMessage$ + "Sourcecode line: " + Str(ErrorLine()) + Chr(13)
    ErrorMessage$ + "Sourcecode file: " + GetFilePart(ErrorFile(), #PB_FileSystem_NoExtension) + Chr(13)
  EndIf
  
  ErrorMessage$ + "Adress instruction: " + InstructionAddress() + Chr(13)
  ErrorMessage$ + "Adress string: " + InstructionString() + Chr(13)
    
  ErrorMessage$ + Chr(13)
 
  MessageRequester("OnError example", ErrorMessage$)
  End
 
EndProcedure
 

OnErrorCall(@ErrorHandler())

test(7)
; RaiseError(#PB_OnError_IllegalInstruction)

Re: OnErrorCall mit CloseDatabase(id)

Verfasst: 02.02.2022 13:55
von Kiffi
Das ErrorHandler-Gedönse würde ich mir sparen.

Prüfe vor dem CloseDatabase() mit IsDatabase(), ob es sich um eine gültige id handelt.

Und prüfe generell bei allen Database-Befehlen den Rückgabewert. Dann sollte Dein Code auch nicht mehr abstürzen.

Re: OnErrorCall mit CloseDatabase(id)

Verfasst: 02.02.2022 14:38
von marcelx
Danke für dein Antwort.
CloseDatabase(id) war nur ein Beispiel.
Ein Fehler hatte ich schon, weil ich versehentlich den id geändert hatte

Re: OnErrorCall mit CloseDatabase(id)

Verfasst: 02.02.2022 14:54
von Kiffi
marcelx hat geschrieben: 02.02.2022 14:38Ein Fehler hatte ich schon, weil ich versehentlich den id geändert hatte
auch hier könntest Du dann mit IsDatabase() vor jedem Datenbank-Befehl prüfen, ob die id gültig ist.