procedure MyTest( FileName ) TRY use (m.FileName) alias TEMPALIAS exclusive ... other code ... CATCH oError.Number == X wait window 'Sorry' CATCH oError.Number == Y ... check for other exceptions ... FINALLY && optional * make sure table gets closed on function exit if alias() == 'TEMPALIAS' use endif ENDTRY endprocThanks again for your feedback. Your idea of a TryCatchFinally class was very clever.
>Example: >oTest = NEWOBJECT("MyTest") >oTest.Try("MyTableName") >RETURN > >DEFINE CLASS MyTest AS TryCatchFinally > PROCEDURE Try (FileName) > USE (m.FileName) EXCLUSIVE > RETURN DODEFAULT() > ENDPROC > > PROCEDURE Catch > IF This.oError.Number = X > WAIT WINDOW "Sorry" > ELSE > * Do Nothing. > ENDIF > ENDPROC >ENDDEFINE > >* Abstract Class. >DEFINE CLASS TryCatchFinally AS Relation > oError = .NULL. > > PROCEDURE Try() > * Write the Try block here in the subclass. > RETURN ISNULL(This.oError) AND This.Finally() > ENDPROC > > PROCEDURE Catch() > * Write the code to run when the Try fails. > ENDPROC > > PROCEDURE Finally() > * Write code to run when all is well. > ENDPROC > > PROCEDURE Error ( nError, cMethod, nLine ) > IF ISNULL(This.oError) > This.oError = NEWOBJECT('ErrorInfo') > This.oError.Save( m.nError, m.cMethod, m.nLine, This.Name ) > ENDIF > This.Catch() > ENDPROC >ENDDEFINE > >DEFINE ErrorInfo AS Relation >Tag = "ErrorObject" >ErrorNumber = 0 >ErrorMessage = "" >ErrorCodeLine = "" >ErrorLineNumber = 0 >ErrorProgram = "" >ErrorName = "" > >* Pass the error facts and this method saves them to this objects properties. >PROCEDURE Save (nError, cMethod, nLine, Name) >* Error method of an object might create this error >* object, then do a This.oError.Save(m.nError, m.cMethod, m.nLine, This.Name) > > WITH This > .ErrorNumber = IIF(VARTYPE(m.nError) = "N", m.nError, 0) > .ErrorMessage = MESSAGE() > .ErrorCodeLine = MESSAGE(1) > .ErrorProgram = IIF(VARTYPE(m.cMethod) = "C", m.cMethod,'') > .ErrorLineNumber = IIF(VARTYPE(m.nLine) = "N", m.nLine, 0) > .ErrorName = IIF(VARTYPE(m.Name) = "C", m.Name, '') > ENDWITH >ENDPROC > >* Release this object. >PROCEDURE Release > RELEASE This >ENDPROC >ENDEFINE >>>>While you're at it, could you write up a request for 'Try/Catch/Finally' functionality? I have never done any real-world work in a language that supported it...