Hej! Hmm... du kan skapa en egen klass Fel och anropa den om ett fel uppstår, Tyvärr finns det ingen funktion som returnera funktions-namnet i VB6 men om du vill kan du ju skapa en central felhanteringsklass till vilken du skickar in metodnamnet (hårdkodat). Här kommer ett exempel på en enkel central felhanterare som ger dig en trace (lista över funktioner, från den funktion som felet inträffade i, till den funktion som slutligen hanterar felet.). Hej. Använder också en AddIn där man via mallar autogenerar felhantering. Jag tackar för alla svar jag har fått.Error hantering
jag använde följande kod för att fånga upp error
<code>
If Err <> 0 Then ' another error
MsgBox " Ett oväntat fel har uppstått: " & Err.Description & " Error nr: " & Err.Number
End If
</code>
min fråga är... kan man på något sätt även ange namnet på subrutinen via en färdig funktion i VB
ex
<code>
If Err <> 0 Then ' another error
MsgBox " Ett oväntat fel har uppstått: " & Err.Description & " Error nr: " & Err.Number & " : " & subname
End If
</code>
Mitt program är under uppbyggnad och jag vill använda en generell errorhantering för att fånga de fel som finns. OCh då vill jag ha med subnamnet eller funktionsnamnet
Sedan kommer jag att styra errorhanteringen mer specificerat
/PhinalaSv: Error hantering
skicka med Err in så har du all information du behöver. Du bör även specificera några
egna textsträngar som kan hjälpa användaren mer än de som Microsoft har skapat...
/EmmaSv: Error hantering
Det är lite extra kod att skriva i varje funktion men om du har en felhanterare i VARJE sub/funktion så kommer ditt program i princip aldrig att krascha. Sen att det fortfarande blir fel är ju en annan sak.
Jag var med i ett projekt som använde en liknande felhantering som nedan (fast betydligt mer genomarbetad, men principiellt likadan som nedan), där vi använde kodgenereringsverktyg varje gång man skapade en ny sub/funktion som la in felhanteringen och jag tror att det programmet kraschade högst 10 ggr under utvecklingsfasen (dvs under alfa, beta-fas) trots tusentals buggar i programmet. Programmet bestod av 700 000+ rader. Varje gång en bugg dök upp så visste man exakt i vilken funktion felet uppstått, samt hur exekveringen gått till. Underskatta (och ignorera) aldrig felhantering.
Klassen cErrorHandler :
<code>
Option Explicit
Public Sub AddError(ByVal functionname As String)
Err.Source = Err.Source + functionname + vbCrLf
End Sub
Public Sub RaiseFromLastError()
Err.Raise Err.Number, Err.Source, Err.Description
End Sub
Public Property Get Trace() As String
Trace = Err.Source
End Property
</code>
Ett formulär :
<code>
Option Explicit
Private mErrorHandler As cErrorHandler
' This function does not raise error
Public Sub sub1()
Set mErrorHandler = New cErrorHandler
On Error GoTo errorhandler
sub2
Exit Sub
errorhandler:
MsgBox mErrorHandler.Trace
End Sub
' This function raises error
Public Sub sub2()
On Error GoTo errorhandler
sub3
Exit Sub
errorhandler:
mErrorHandler.AddError "Sub2()"
mErrorHandler.RaiseFromLastError
End Sub
' This function raises error
Public Sub sub3()
On Error GoTo errorhandler
Err.Raise 13
Exit Sub
errorhandler:
mErrorHandler.AddError "Sub3()"
mErrorHandler.RaiseFromLastError
End Sub
</code>Sv: Error hantering
Jag använder mig av en AddIn (Gratis) som heter HuntERR och finns på
http://www.urfinjus.net/UJ2/Home.asp Jag tycker den fungerar riktig bra och man har inställningar för många olika situationer. T ex så får man ett felmeddelande med hela Call-stacken specificerad samt vilka parametrar och dess värden som ingår i t ex ett funktion där något gått fel.
JanneSv: Error hantering
Den var gratis och, gjord av Steven A. Phillips, och fanns på www.pjjkdev.com. Hittade den inte där nu, så hör av dig om jag skall maila den.
Ex. på genererad felhantering från min kod:
'************************************************************************************
' Description:
'
' Change Log
' Date Programmer Description
' 2002-05-28 MH Initial Release
'************************************************************************************
Private Sub cmdExecute_Click()
On Error GoTo ErrorHandler
LogIt "PostNetAvreg_cmdExecute_Click - PRE"
' KOD
Done:
LogIt "PostNetAvreg_cmdExecute_Click - POST"
Exit Sub
ErrorHandler:
Dim lngErrNum As Long: Dim strErrDesc As String: Dim strErrSource As String: lngErrNum = Err.Number: strErrDesc = Err.Description: strErrSource = Err.Source
LogIt "PostNetAvreg_cmdExecute_Click - ERROR: " & strErrDesc, "Log"
If InDesign Then
Stop: Resume
Else
MsgBox "Ett fel uppstod:" & vbNewLine & strErrDesc & vbNewLine & "Källa: " & "PostNetAvreg_cmdExecute_Click", , "Viscar"
End If
GoTo Done
End Sub
/SSv: Error hantering
Jag har en del att bygga på, så jag får prova alla mtoderna för att se fördelar med dem.
Det är ett helvete när man inte vet vad som går fel.....men nuhar jag en säker hjälp..
Tacka allehopa!
/Phinala