Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

error handling: mit err.raise erzeugter fehler springt nicht in die fehlerbehandlung

Empfohlene Antworten

hallo,

hat jemand mal so ein oder ähnliches problem gehabt und könnte mir tip geben:

Die Anwendung ist in Access, es gibt eine schnittstelle zu anderer anwendung, es wird in der sub ein object dafür erzeugt, damit connected und dann in einer schleife über recordset einiges abgearbeitet. Damit bei den fehlern mein programm nicht stehen bleibt, sondern den nächsten record abarbeitet, habe ich die fehlerbehandlung eingeführt, so dass beim fehler ins logbuch der grund geschrieben wird, und dann wird weitergemacht.

Dann passiert folgendes: ersten Fehler bekomme ich von der anderen anwendung zu der ich connected bin durch ein object, in diesem fall geht das programm zur fehlerbehandlung und dann in die nächste runde. dann gibt es wieder einen fehler. Und bei diesem zweiten mal wird dieser fehler gleich mit messagebox angezeigt, also bleibt mein programm stehen, anstelle in die fehlerroutine zu gehen. (ich hab auch schon versucht mit err.clear "fehlerobject" zu beseitigen, klappt nicht)

HILFE!!

hier skizzenweise das programm:

'die sub ist im klassenmodul eines formulars

Private Sub Select()

on error goto Select_while_Err

set myRecordSet=CurrentDb.OpenRecordset(...)

do

....

if fehler then Err.Raise err_num, , "blabla"

....

goto while_next

Select_while_Err:

call writeLogbuch("Fehler soundso")

while_next:

myRecordset.MoveNext

Loop Until myRecordSet.EOF

...

end sub

Hi katz_1,

was ist denn das für eine Fehlernehandlung (mit GOTO!!!)?

Das ist mehr als übel!

Ausserdem musst du in der Fehlerbehandlung mit RESUME arbeiten, um weiterzumachen!

Hier mal ein Grundgerüst für die Fehlerbehandlung:


Private Sub MySub()
On Error GoTo ErrorHandler

...

Step1:
...

Exit Sub

ErrorHandler:
Dim ErrNumber, ErrDescription

ErrNumber = Err.Number
ErrDescription = Err.Description

Select Case ErrNumber
Case ???
Resume
Case ???
Resume Next
Case ???
Resume Step1
Case Else
MsgBox ErrDescription, , "Fehler " & ErrNumber
End

End Select


End Sub

[/PHP]

ich habe vor der eigentlichen fehlerbehandlung ein goto weil ich ja nicht aus der routine raus will, sondern den nächsten eintrag im recordset bearbeiten möchte (so springe ich zu der anweisung myrecordset.movenext und wieder zu dem anfang der do..while-schleife).

Ein resume konnte ich nicht verwenden, weil mit dem fehler kann man jetzt den laufenden job nicht beenden, aber man sollte dann neuen starten, der ja im nächsten record definiert ist.

der kern des problems ist ja eigentlich, dass die anweisung

on error goto errorHandler

scheinbar gar nicht funktioniert beim zweiten fehler, und dieser sofort beim vorkommen auch schon angezeigt wird, programm stoppt mit message-fenster.

Hi katz_1,

...der kern des problems ist ja eigentlich, dass die anweisung

on error goto errorHandler scheinbar gar nicht funktioniert beim zweiten fehler...

natürlich wird dein zweiter Fehler ignoriert, weil du immernoch in der Fehlerbehandlung des ersten Fehlers bist!!!

Du must mit Resume arbeiten, sonst wird das nie was!

(Meinetwegen auch mit Resume Sprungmarke)

vielen dank, jetzt hab ich es kapiert ;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.