18. november 2004 - 00:37Der er
7 kommentarer og 1 løsning
Forward err.raise
Jeg har laven en Class, som når brugeren vil hente en "Item" fra serveren, kalder han en method (eGWCalControl.GetAllFromeGW) hvilket så sætter nogle parameter som så igen kalder en intern function i klassen (Exec) som så kommunikere med serveren. Hvis der sker en fejl laver jeg denne:
Exec_Err: 'If we cant connect to host. If Err.Number = -2147098037 Then Err.Raise 7, Me.Name & " Ver. " & Me.Version & " Method: Exec", _ "No route to host, is it online?" End If
den ryger så tilbage til min GetAllFromeGW function som jeg så gerne vil have til at enten lave en ny err.raise eller "forwarde" den videre til brugeren som bruger min klasse. Så han kan debugge på den. Hvis jeg bare laver en msgbox med fejlen i GetAllFromeGW, så løber brugeren programkode jo bare videre og laver en anden runtime error..
Håber det er beskrevet godt nok. Ellers sig til og jeg smider noget mere kode ind og prøver at beskrive det bedre.
Set eGWRequest = Nothing Set eGWCol = Nothing Set eGWItem = Nothing End Sub
Som du jo kan se bruger jeg min klasse eGWCalControl. Der i kalder jeg GetAllromeGW metoden. Som er her:
Public Function GetAllFromeGW(Optional pStartDate As Date, Optional pEndDate As Date) As eGWCollection On Error GoTo GetAllFromeGW_Err Dim xmlParms As New XMLRPCStruct Dim xmlResponse As XMLRPCResponse Dim xmlArray As XMLRPCArray
If pStartDate = "00:00:00" Then pStartDate = #1/1/1990# End If
If pEndDate = "00:00:00" Then pEndDate = #12/31/2100# End If
'is enddate before startdate?
If pEndDate < pStartDate Then Err.Raise 6, Me.Name & " Ver. " & Me.Version & "Method: GetAllFromeGW", _ "Enddate can't be after startdate!" End If
'we need to format VB time into something that eGW understands. Therefore the format() function xmlParms.AddString "start", Format(pStartDate, "yyyy-mm-ddThh:mm:ss") xmlParms.AddString "end", Format(pEndDate, "yyyy-mm-ddThh:mm:ss")
'Getting the response from eGW server. Set xmlResponse = Exec("calendar.bocalendar.search", xmlParms)
'Creating the eGWCollection that we return to the user Set GetAllFromeGW = AssembleCollection(xmlResponse)
'We need to clean up after us. Set xmlParms = Nothing Set xmlResponse = Nothing Set xmlArray = Nothing
Exit Function
GetAllFromeGW_Err:
Err.Raise Err.Number, Err.Source, Err.Description
End Function
Den kalder så Exec("calendar.bocalendar.search", xmlParms) som er den private function der henter data fra serveren med:
Private Function Exec(pstrMethod As String, Optional ByVal pxmlParms As XMLRPCStruct, _ Optional ByVal plngParm As Long) As XMLRPCResponse On Error GoTo Exec_Err
Dim xmlRequest As New XMLRPCRequest Dim xmlTempResponse As XMLRPCResponse
If plngParm <> 0 Then xmlRequest.Params.AddInteger plngParm End If
If plngParm = 0 Then xmlRequest.Params.AddStruct pxmlParms End If
Set xmlTempResponse = xmlRequest.Submit
If Not xmlrpcError(xmlTempResponse) Then Set Exec = xmlTempResponse End If
GoTo ShutDown Exec_Err: 'If we cant connect to host. If Err.Number = -2147098037 Then Err.Raise 1, Me.Name & Me.Version, "No route to host, is it online?" End If
ShutDown: Set xmlRequest = Nothing Set xmlTempResponse = Nothing
End Function
Nu er det så bare at når jeg raiser en err i Exec() så bliver den til en runtime error i GetAllFromeGW() jeg vil hellere have den til at blive en runtime err i min cmdNewGetCal_Click() function...
Jeg har overvejet at lade være med at raise min err i exec, og sætte en modul variable som jeg så detector på i min GetAllFromeGW function, og derved raiser den for første gang der.. Jeg syntes bare det burde kunne laves smartere..
Jeg har prøvet en stripped-down version af din kode og det virker fint, synes jeg.
Jeg lurer lidt på om det er fordi du kører med "Break in Class Module". Prøv at højreklikke i et kodevindue, vælg Toggle, vælg "Break on Unhandled Errors". Og kør så igen. Gør det en forskel?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.