Bericht 1 van 6NL Computer Forum ~ SQL & Programmeren Van | : | jvdpeet01 | Datum | : | 06-08-2008 |
Aan | : | Allen | MsgID | : | 3965.1 |
Onderwerp | : | Gestructureerde foutbehandeling in VB 6 | Forum | : | ws-nlcomputer |
Versies van VB na VB 6 hebben de mogelijkheid van gestructureerde foutenbehandeling, VB 6 kenneljk niet.
Kan iemand mij vertellen hoe ik ervoor kan zorgen dat een fout in een aangeroepen procedure naar de error handler van die routine gaat en niet naar de aanroeper daarvan. J.v.d.Peet
Bericht 2 van 6NL Computer Forum ~ SQL & Programmeren Van | : | Peter | Datum | : | 06-08-2008 |
Aan | : | jvdpeet01 | MsgID | : | 3965.2 |
Onderwerp | : | Gestructureerde foutbehandeling in VB 6 | Forum | : | ws-nlcomputer |
Hoi J,
>>...een fout in een aangeroepen procedure naar de error handler van die routine gaat en niet naar de aanroeper daarvan.<<
Je bedoeld VB6?
Hierbij een voorbeeld:
Plaats de code in een formulier met daarin een CommandButton genaamd
Command1Private Sub Command1_Click()
Dim i As Integer
Dim etxt As String
'fouten binnen deze Sub afhandelen
On Error GoTo errhandle
'genereer een fout
i = 123456
MsgBox i
'verlaat de routine na foutafhandeling of als er geen fout is.
errexit:
Exit Sub
'foutafhandeling
errhandle:
etxt = "Error" & Err.Number & " : " & Err.Description & " in Command1_Click"
If MsgBox(etxt & vbCrLf & vbCrLf & "Klik op JA om in de routine verder te gaan of NEE om de routine nu te verlaten.", vbCritical + vbYesNo) = vbYes Then
Resume Next
Else
GoTo errexit
End If
End Sub
groeten, Peter
Bericht 3 van 6NL Computer Forum ~ SQL & Programmeren Van | : | Michel Uphoff (Sysop) | Datum | : | 06-08-2008 |
Aan | : | Peter | MsgID | : | 3965.3 |
Onderwerp | : | Gestructureerde foutbehandeling in VB 6 | Forum | : | ws-nlcomputer |
Hoi Peter,
PMFJI, ik zou hem iets vereenvoudigen:
Private Sub Command1_Click()
Dim i As Integer
On Error GoTo errhandle
i = 123456
MsgBox i
Exit Sub
errhandle:
If MsgBox("Error" & Err.Number & " : " & Err.Description & " in Command1_Click" & vbCrLf & vbCrLf & _
"Klik op JA om in de routine verder te gaan of NEE om de routine nu te verlaten.", _
vbCritical + vbYesNo) = vbYes Then Resume Next
End Sub
Scheelt een string, een else, een goto en een label en doet hetzelfde.Maar misschien heb jij goede redenen het op deze wat uitgebreider manier te doen? Ik leer graag wat bij als het om VB gaat.a propos, schrijf jij ook in VB.net? Zo ja, wat zijn jouw ervaringen?
Michel Uphoff (NLcomputer)
Homepage
Bericht 4 van 6NL Computer Forum ~ SQL & Programmeren Van | : | Peter | Datum | : | 07-08-2008 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 3965.4 |
Onderwerp | : | Gestructureerde foutbehandeling in VB 6 | Forum | : | ws-nlcomputer |
Hoi Michel,
>>Maar misschien heb jij goede redenen het op deze wat uitgebreider manier te doen?<<Ja, hopelijk is hiermee de oorspronkelijke vraag wat duidelijker uitgelegd qua mogelijkheden voor error-afhandeling.
De regel
etxt = "Error" & Err.Number & " : " & Err.Descriptionstaat in een functie en in een module zodat die globaal bekend is:
Function ErrorText() As String
ErrorText = "Error" & Err.Number & " : " & Err.Description
End Function
Verder heeft het gebruik van een tijdelijke string een 2e reden. Fouten kunnen dan getoond worden met een MsgBox oid EN met een andere sub gelogd worden in een logbestand tbv probleem-onderzoek.
Dan krijg je bijvoorbeeld:
etxt = ErrorText & " in Command1_Click"
Call CreateLog(etxt)
If MsgBox(etxt & vbCrLf & vbCrLf & _
"Klik op JA om in de routine verder te gaan of NEE om de routine nu te verlaten.", _
vbCritical + vbYesNo) = vbYes Then Resume Next
End Sub
>>a propos, schrijf jij ook in VB.net? Zo ja, wat zijn jouw ervaringen?<<Zeer weinig. Ik heb VB.2005 wel geinstalleerd om ervaring op te doen maar het is een heel gedoe.
Als je ooit gewerkt hebt met het MsChart component van VB, dan weet je wel wat ik bedoel.
Verder is dat .NET niet echt handig als je programma's maakt voor Win98/XP/Vista. Teveel verschillen of functies die dan wel dan niet goed werken. Win98 gaat maar tot .NET v1.1 geloof ik. Bij WinXP en later wordt regelmatig de .NET Framework geupdate waardoor je geen controle hebt over je eigen programma als dat eenmaal geinstalleerd is.
Ik hou het liever simpel.
Eigenlijk is Delphi nog handiger, Je compileert en er rolt 1 executable uit. Dat gooi je in een map en klaar. Geen installatie nodig voor allerlei .OCX of .DLL bestanden.
Groeten, Peter
Bericht 5 van 6NL Computer Forum ~ SQL & Programmeren Van | : | Michel Uphoff (Sysop) | Datum | : | 07-08-2008 |
Aan | : | Peter | MsgID | : | 3965.5 |
Onderwerp | : | Gestructureerde foutbehandeling in VB 6 | Forum | : | ws-nlcomputer |
Hoi Peter,
>> en in een module zodat die globaal bekend is <<Tuurlijk, duidelijk. Ik werk ook graag met een module voor global variables.
Jouw bezwaren tegen .Net zijn bij mij de reden om er niet aan te beginnen. Ik word nu al gestoord van die .Net versies en hun verschillen en het lijkt er op dat MS de laatste .Net versie nog niet uitgebracht heeft, zodat die ellende nog even doorgaat. Absoluut geen verbetering imo. Ik lees dat VB6 nog wel een flinke tijd 'getolereerd' wordt, en eerlijk gezegd denk ik dat gezien de enorme 'installed base' die flinke tijd nog wel eens vele jaren zou kunnen worden.
Delphi.. Stefan gebruikt dat ook graag. Ik zou mij er toch eens wat meer in moeten verdiepen, want het resulteert in een mooie KISS exe. (En als er iemand van KISS houdt ben ik het wel.)
Thanks voor de reactie,
Michel Uphoff (NLcomputer)
Homepage
Bericht 6 van 6NL Computer Forum ~ SQL & Programmeren Van | : | Stefan de Best (Sysop) | Datum | : | 12-08-2008 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 3965.6 |
Onderwerp | : | Gestructureerde foutbehandeling in VB 6 | Forum | : | ws-nlcomputer |
Hoi Michel,
>> Delphi.. Stefan gebruikt dat ook graag. <<Yep!
>S t e f a n
Overzicht van 150 oude en minder bekende zwemslagen
http://www.zwemslagen.info[/]