Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

504 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

27 april 2024, 12:45:10

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

Auteur Topic: Fout vangen  (gelezen 9122 keer)

0 leden en 1 gast bekijken dit topic.

Offline NLCOMP

  • Forumheld
  • *****
  • Berichten: 14.666
    • NL Computer Forum
Fout vangen
« Gepost op: 9 november 2009, 20:37:57 »
Bericht 1 van 2

NL Computer Forum ~ SQL & Programmeren
 Van:jvdpeet01Datum:06-10-2008
 Aan:AllenMsgID:4035.1
 Onderwerp:fout vangenForum:ws-nlcomputer
Hallo,
In mijn VB-programma gebruik ik in elke routine foutenlogging. Nu ben ik tegen een probleem opgelopen, waarbij  het signaleren van de fout te laat komt en niet te achterhalen is, wat de fout veroorzaakt.
Na terugkeer uit een aangeroepen routine wordt een fout geregistreerd, die kennelijk in de aangeroepen routine heeft plaats gevonden. Als ik Err.Number uitvraag aan het einde van de aangeroepen routine blijkt deze 0 te bevatten.  Eén F8 verder ben je terug in de aanroepende routine en gaat het programma tegelijk naar de foutenlog.
Een fout in de aangeroepen routine zou je daar toch moeten kunnen opsporen?  Ik heb in de aangeroepen routine elke regel nagelopen op fouten, maar er geen kunnen vinden.
Kennelijk is mijn foutlogging niet goed. Wat mankeert er aan de volgende logging?  
FoutExponentialMovingAverage:
    Foutbron = "ExponentialMovingAverage"
    ernum = Err.Number
    If ernum & " " & Err.Description & " " & Foutbron <> VorigeFout Then
        Call frmInvestor.WriteLOG("---< " & App.Title & " geeft >---" & ernum & " " & Err.Description & " " & Foutbron)
        VorigeFout = ernum & " " & Err.Description & " " & Foutbron
        Resume Next
    Else
        CloseFile (filename)
        Exit Sub
    End If

Weet iemand een betere oplossing? Een fout verbeteren die je niet kunt vinden is wat moeilijk.
 J.v.d.Peet


Bericht 2 van 2

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:06-10-2008
 Aan:jvdpeet01MsgID:4035.2
 Onderwerp:fout vangenForum:ws-nlcomputer
Hoi J,

>>Na terugkeer uit een aangeroepen routine wordt een fout geregistreerd, die kennelijk in de aangeroepen routine heeft plaats gevonden.<<
Kan het zijn dat de fout-routine in de aangeroepen routine ook doorlopen wordt als er geen fout is?
Wat is de foutmelding dan precies?

Ik heb je code even getest met onderstaande code maar het probleem wat je beschrijft doet zich hier niet voor.

Private Sub Command10_Click()
Dim Foutbron$, VorigeFout$
Dim ernum As Long
Dim i%

On Error GoTo foutExponentialMovingAverage

i = 123456              'dit geeft error 6 : Overflow
i = 1 / 0               'dit geeft error 11: Division by zero
Exit Sub

foutExponentialMovingAverage:
    Foutbron = "ExponentialMovingAverage"
    ernum = Err.Number
    If ernum & " " & Err.Description & " " & Foutbron <> VorigeFout Then
        Call frmInvestor.WriteLog("---< " & App.Title & " geeft >---" & ernum & " " & Err.Description & " " & Foutbron)
        VorigeFout = ernum & " " & Err.Description & " " & Foutbron
        Resume Next
    Else
        CloseFile (FileName)
        Exit Sub
    End If
End Sub
>>Kennelijk is mijn foutlogging niet goed. Wat mankeert er aan de volgende logging?<<
Een paar opmerkingen:
De code ernum & " " & Err.Description & " " & Foutbron komt 3 keer voor. De toewijzing Foutbron = ... staat VOOR het statement om het errornummer tijdelijk te bewaren. Dat is niet logisch. Een error zou hierdoor gereset kunnen worden.
De logica voor het gebruik van VorigeFout is me niet geheel duidelijk. Blijkbaar moet er tijdens bepaalde foutafhandelingen een bestand afgesloten worden. Ik vraag me af of dit op deze manier voor 100% goed werkt.

>>Weet iemand een betere oplossing?<<
Een meer leesbare oplossing kan zijn:

Private Sub Command11_Click()
Dim Foutbron$, VorigeFout$
Dim i%

On Error GoTo foutExponentialMovingAverage

i = 123456              'dit geeft error 6 : Overflow
i = 1 / 0               'dit geeft error 11: Division by zero
Exit Sub

foutExponentialMovingAverage:
    Foutbron = Err.Number & " " & Err.Description & " in ExponentialMovingAverage"
    If Foutbron <> VorigeFout Then
        Call frmInvestor.WriteLog("---< " & App.Title & " geeft >---" & Foutbron)
        VorigeFout = Foutbron
        Resume Next
    Else
        CloseFile (FileName)
        Exit Sub
    End If
End Sub

groeten, Peter