[Lazarus] How do Lazarus users handle exceptions in procedures which are running in data modules?

Antonio Fortuny a.fortuny at sitasoftware.lu
Wed Mar 6 09:44:32 CET 2013


Le 05/03/2013 16:14, Frank Church a écrit :
> How do Lazarus users handle exceptions in procedures which are running
> in data modules?
>
> A lot of the guides and examples demonstrate raising exceptions, which
> generally display dialogs to the user that an exception has occurred.
>
> But what is the best way to handle them if they occur inside data
> modules as they may not have a user interface, or are even not
> supposed to have any, but then somehow communicate the exception back
> to the user interface is required?
>
> In my view it is either by passing a var parameter to the procedure in
> the data module which returns some information about the error, or
> changing the procedure into a function and return info about the error
> in the result. On the other hand using functions messes up the reading
> of the program because it make the return values appear to be the
> subject of the computations.
Right. This is why I decided once for all to report errors AND return 
values on a function call. I use the following proto:
function DoingSomething(const arg1: type;...; out Msg: String): Boolean 
(or whatever the result should be). This assumes, of course, that the 
function returns some meaningfull information when everything runs well 
and a predefined error value otherwise (I often use -1 in case of 
integers). The OUT argument Msg will be used by the function to explain 
why the thuction failed and will be empty if the function works OK. The 
Msg out parameter could be whatever you need, not olny a string.
>
> What are the best practices in Lazarus or Delphi with dealing with
> this kind of situation? Are there some frameworks for handing this
> type of problem?
The only rule that I always apply concerning exception handling is to 
process the exception depending on if the concerned code is playing in 
the data layer or the presentation layer. Said in other words, do I play 
with data or the user interface ?
Obviously, in a DM you are in the data layer.
Rule: in data layer push exception results (re-raise the exception for 
instance) to the caller whereas on presentation layer, display the 
exception to the user and ask him what action to do next. In any case I 
never mix data and presentation layers processing. This also means that 
data layer is never affected by what happens in the presentation layer 
and vice-versa except by the natural ways: functions, procedures and 
object properties and methods.
>
>






More information about the Lazarus mailing list