[AccessD] Error Code Generator

artful at rogers.com artful at rogers.com
Mon Sep 25 12:18:18 CDT 2006


Good points, all. And presumably the jump to a global handler would cost cycles, as opposed to a local handler. I have no idea how to measure in advance this cost nor the cost in size of 1000 local handlers. I think this has come up before but I cannot recall the answer: is there a function or some other method to capture the procname? I.e. ProcName()?

Arthur

----- Original Message ----
From: JWColby <jwcolby at colbyconsulting.com>
To: Access Developers discussion and problem solving <accessd at databaseadvisors.com>
Sent: Monday, September 25, 2006 1:01:20 PM
Subject: Re: [AccessD] Error Code Generator

Well, that certainly works for logging all errors.  What happens when you
simply want to ignore a certain type of error:

    On err = 15 resume next

Or 
    On Err = 15 resume ExitLabel

Or you want to do other processing:

    On err = 15 CallMyFunction

When a global error handler exists, then all of the LOGIC associated with
handling that error is now out in the error handler function, away from the
code where the error is happening.  For documentation it helps to have the
error cases commented

    Select case err
    case 15,16,18    'These cases occure when...
        Do something for these errors
        Resume ExitLabel
    case 97        'This case occurs when...
        Do something else here
        Resume next
    Case else
        Error Logger
                'Call the global error logger to log any
cases not specifically trapped above
    end select 

There are errors that occur that are simply expected and ignored.  Why call
the error handler for these cases.  A simple resume next is all that is
needed.  Others require local action (open a recordset, change a null to a 0
etc.) then a resume next.  This kind of stuff belongs in the function where
the error occurred.

What happens when you delete an entire function?  All of the error handling
is out in your error handler and is accumulating trash.  If the error case
is in the function then the error handler is deleted along with the
function.

I have no quibble with having an error LOGGER to call to log any errors that
are unexpected and not handled in the local function (until they can be
handled there) or even to log expected errors, but to handle every error in
your program in one humongus error handler is unwieldy IMHO.

John W. Colby
Colby Consulting
www.ColbyConsulting.com

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Dan Waters
Sent: Monday, September 25, 2006 11:56 AM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Error Code Generator

Here is what I have developed to trap and record errors:

At the bottom of each procedure or function are these lines of code:


Private Sub SubroutineName()
On Error GoTo EH

    'Code in Sub or Function

    Exit Sub
    
EH:
    Application.Echo True
    Call GlobalErrors(txtProcessID, Err.Number, Err.Description, _
      "Module Name", "Subroutine Name ", "ExtraInfo1", "ExtraInfo2")

End Sub


txtProcessID:  This is usually the Primary Key for the record.  Could be an
empty string.

Err.Number
Err.Description

Module Name:  This is the name of the standard module the code is in.  For a
report or form I use Me.Name.

Subroutine Name:  This is the name of the subroutine.  I have to type this
in each time because there is apparently no system function to provide the
name while the code is running.

ExtraInfo1 & ExtraInfo2:  This is an optional field that holds a variable or
expression that will capture information that is unique to this procedure or
function.  This is particularly helpful when troubleshooting.



The code above can use Select Case to handle different errors differently.

The procedure GlobalErrors will record this information, along with Date,
Time, PC Name, and UserName.

GlobalErrors can give a message to users about a certain error (i.e.,
printer-related errors), and can prevent recording a certain error if I know
it's irrelevant.

Hope this was helpful . . .


Dan Waters

-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com







More information about the AccessD mailing list