[AccessD] Application Error logging

jwcolby jwcolby at colbyconsulting.com
Tue Dec 30 16:18:05 CST 2008


Cool, I will try it out.

What you do for the SMTP Server?  Are there "public" 
servers?  I know NOTHING about this stuff.

John W. Colby
www.ColbyConsulting.com


Jim Dettman wrote:
>   It is a .DLL, but it does not need to be registered.  Just placed in the
> same directory as the DB.  It does need a reference set in code however, so
> if you change install directories, that will be a problem.  If so, I would
> place it in something like \Windows\System32
> 
>   Here's the URL for it:
> 
> http://www.freevbcode.com/ShowCode.Asp?ID=109
> 
>   Below is the wrapper I wrote for it.
> 
> Jim. 
> 
> 
> Option Compare Database
> Option Explicit
> 
> Const ModuleName = "clsOCS_SendMail"
> 
> ' Wrapper class for vbSendMail, which provides a simplified
> ' interface for sending e-mail from a application.
> '
> ' Most of the properties for vbSendMail are set via
> ' a call to .SetParams(), which reads table tblemailtemplates in the SYS
> database.
> ' Notes:
> '   1. Send() is the only method that returns a status.  Other methods
> failing
> '   will cause the send() method to fail.
> '
> '   2. SetParams() must be called first in order to send an e-mail message.
> '
> '   3. Once a Send() is attempted, you must call SetParams() again and
> '   set any other parameters before trying to send again.
> '
> ' Example of use:
> '  Dim oSendMail As New OCS_SendMail
> '
> '  oSendMail.SetParams("Test", ".", ".")  ' Set default parameters via
> template
> '  oSendMail.ShowStatus = True            ' Tells send mail to display
> progress form.
> '  varRet = oSendMail.Send                ' Send the e-mail.
> '
> '  If varRet = Null then
> '    Msgbox "Mail Sent"
> '  Else
> '    MsgBox "Main Send Failed"
> '  End If
> 
> Private WithEvents oVBSendMail As vbSendMail.clsSendMail
> 
> Public Enum MAIL_PRIORITY
>   HIGH_PRIORITY = 1
>   NORMAL_PRIORITY = 3
>   LOW_PRIORITY = 5
> End Enum
> 
> Private bShowStatus As Boolean
> Private bSetParamsCalled As Boolean
> Private varErrorMessage As Variant
> 
> Public Property Get Attachment() As String
> 
> 10      Attachment = oVBSendMail.Attachment
> 
> End Property
> Public Property Let Attachment(ByVal strNewValue As String)
> 
> 10      oVBSendMail.Attachment = strNewValue
> 
> End Property
> Public Property Get AsHTML() As Boolean
> 
> 10      AsHTML = oVBSendMail.AsHTML
> 
> End Property
> Public Property Let AsHTML(ByVal bNewValue As Boolean)
> 
> 10      On Error Resume Next
> 
> 20      oVBSendMail.AsHTML = bNewValue
> 
> End Property
> 
> Public Property Get Message() As String
> 
> 10      Message = oVBSendMail.Message
> 
> End Property
> Public Property Let Message(ByVal strNewValue As String)
> 
> 10      oVBSendMail.Message = strNewValue
> 
> End Property
> Public Property Get Priority() As MAIL_PRIORITY
> 
> 10      Priority = oVBSendMail.Priority
> 
> End Property
> Public Property Let Priority(ByVal NewValue As MAIL_PRIORITY)
> 
> 10      On Error Resume Next
> 
> 20      oVBSendMail.Priority = NewValue
> 
> End Property
> Public Property Get Recipient() As String
> 
> 10      Recipient = oVBSendMail.Recipient
> 
> End Property
> Public Property Let Recipient(ByVal strNewValue As String)
> 
> 10      oVBSendMail.Recipient = strNewValue
> 
> End Property
> Public Property Get RecipientDisplayName() As String
> 
> 10      RecipientDisplayName = oVBSendMail.RecipientDisplayName
> 
> End Property
> Public Property Let RecipientDisplayName(ByVal strNewValue As String)
> 
> 10      oVBSendMail.RecipientDisplayName = strNewValue
> 
> End Property
> Public Property Get ShowStatus() As Boolean
> 
> 10      ShowStatus = bShowStatus
> 
> End Property
> Public Property Let ShowStatus(ByVal bNewValue As Boolean)
> 
> 10      On Error Resume Next
> 
> 20      bShowStatus = bNewValue
> 30      Forms![frmSendMailStatus].Visible = bShowStatus
> 
> End Property
> 
> Public Property Get Subject() As String
> 
> 10      Subject = oVBSendMail.Subject
> 
> End Property
> Public Property Let Subject(ByVal strNewValue As String)
> 
> 10      oVBSendMail.Subject = strNewValue
> 
> End Property
> 
> Private Sub Class_Initialize()
> 
>         Const RoutineName = "Class_Initialize"
>         Const Version = "1.0.0"
> 
> 10      On Error Resume Next
> 
> 20      bShowStatus = False
> 30      DoCmd.OpenForm "frmSendMailStatus", acNormal, , , acFormEdit,
> acHidden
> 
> 40      bSetParamsCalled = False
> 50      varErrorMessage = Null
> 
> End Sub
> Private Sub Class_Terminate()
> 
>         Const RoutineName = "Class_Terminate"
>         Const Version = "1.0.0"
> 
> 10      On Error Resume Next
> 
> 20      DoCmd.Close acForm, "frmSendMailStatus"
> 
> End Sub
> Public Function Send() As Variant
> 
>         Const RoutineName = "Send"
>         Const Version = "1.0.0"
> 
> 10      On Error GoTo Send_Err
> 
>         ' If SetParams called, then try sending message.
> 20      If IsNull(varErrorMessage) Then
> 30        If bSetParamsCalled = True Then
> 40          DoCmd.Hourglass True
>             
> 50          oVBSendMail.Send
> 60        Else
> 70          varErrorMessage = "OCS Send Mail Failure - Send Called without
> prior call to SetParams"
> 80        End If
> 90      End If
> 
> Send_Exit:
> 100     Send = varErrorMessage
> 
> 110     Exit Function
> 
> Send_Err:
> 120     varErrorMessage = "Unexpected Error in OCS_SENDMAIL::SEND - Error: "
> & Err.Number & " - " & Err.Description
> 130     Resume Send_Exit
> 
> End Function
> Public Sub SetParams(strReference As String, strCompany As String,
> strLocation As String)
> 
>         Const RoutineName = "SetParams"
>         Const Version = "1.0.0"
> 
> 10      On Error GoTo SetParams_Err
> 
>         ' Get an instance of vbSendMail
> 20      Set oVBSendMail = New clsSendMail
> 
>         ' Set parameters for e-mail based on template record.
>         Dim dbCur As DAO.Database
>         Dim rstemailtemplates As DAO.Recordset
>         Dim qdfPassthrough As DAO.QueryDef
> 
>         ' Find parameter record in tblemailtemplates
> 30      Set dbCur = CurrentDb()
> 40      Set qdfPassthrough = dbCur.CreateQueryDef("")
> 50      qdfPassthrough.Connect =
> dbCur.TableDefs("tblemailtemplates").Connect
> 60      qdfPassthrough.sql = "Select * From tblemailtemplates WHERE
> Reference = '" & strReference & "' AND Company = '" & strCompany & "' AND
> Location = '" & strLocation & "'"
> 70      Set rstemailtemplates = qdfPassthrough.OpenRecordset()
> 
> 80      If rstemailtemplates.RecordCount = 0 Then
> 90        varErrorMessage = "OCS_SENDMAIL::SETPARAMS - Error: Template for
> company " & strCompany & " template name " & strReference & " not found."
> 100     Else
>           ' Now Set parameters
> 110       With oVBSendMail
> 120         .UserName = Nz(rstemailtemplates![UserName], "")
> 130         .Password = Nz(rstemailtemplates![Password], "")
> 140         .POP3Host = Nz(rstemailtemplates![POP3Host], "")
> 150         .SMTPHost = Nz(rstemailtemplates![SMTPHost], "")
> 160         .from = Nz(rstemailtemplates![FromLine], "")
> 170         .FromDisplayName = Nz(rstemailtemplates![FromDisplayName], "")
> 180         .Recipient = Nz(rstemailtemplates![ToLine], "")
> 190         .RecipientDisplayName = Nz(rstemailtemplates![ToDisplayName],
> "")
> 200         .CcRecipient = Nz(rstemailtemplates![ccLine], "")
> 210         .CcDisplayName = Nz(rstemailtemplates![CcDisplayName], "")
> 220         .BccRecipient = Nz(rstemailtemplates![bccLine], "")
> 230         .ReplyToAddress = Nz(rstemailtemplates![ReplyToAddress], "")
> 240         .Subject = Nz(rstemailtemplates![Subject], "") & " - " &
> Format$(Now(), "mm/dd/yy hh:mm ampm") & " (local)"
> 250         .Message = Nz(rstemailtemplates![Message], "")
> 260         .AsHTML = rstemailtemplates![HTMLFormat]
> 270         .ContentBase = rstemailtemplates![ContentBase]
> 280         .EncodeType = rstemailtemplates![EncodeType]
> 290         .Priority = rstemailtemplates![Priority]
> 300         .Receipt = rstemailtemplates![Receipt]
> 310         .UseAuthentication = rstemailtemplates![UseAuthentication]
> 320         .UsePopAuthentication = rstemailtemplates![UsePopAuthentication]
> 330         .ConnectTimeout = rstemailtemplates![ConnectTimeout]
> 340         .ConnectRetry = rstemailtemplates![ConnectRetry]
> 350         .MessageTimeout = rstemailtemplates![MessageTimeout]
> 360         .SMTPPort = rstemailtemplates![SMTPPort]
> 370         .PersistentSettings = False
> 380       End With
> 390       bSetParamsCalled = True
> 400     End If
> 
> SetParams_Exit:
> 410     On Error Resume Next
> 
> 420     rstemailtemplates.Close
> 430     Set rstemailtemplates = Nothing
> 
> 440     qdfPassthrough.Close
> 450     Set qdfPassthrough = Nothing
> 
> 460     Set dbCur = Nothing
> 
> 470     Exit Sub
> 
> SetParams_Err:
> 480     varErrorMessage = "Unexpected Error in OCS_SENDMAIL::SETPARAMS -
> Error: " & Err.Number & " - " & Err.Description
> 490     Resume SetParams_Exit
> 
> End Sub
> Private Sub oVBSendMail_Status(Status As String)
> 
>         Const RoutineName = "Status"
>         Const Version = "1.0.0"
> 
> 10      On Error GoTo Status_Err
> 
> 20      Forms![frmSendMailStatus]![txtStatus] = Status &
> IIf(Len(Trim(Forms![frmSendMailStatus]![txtStatus])) > 0, vbCrLf &
> Forms![frmSendMailStatus]![txtStatus], "")
> 
> Status_Exit:
> 30      Exit Sub
> 
> Status_Err:
> 40      varErrorMessage = "Unexpected Error in OCS_SENDMAIL::STATUS - Error:
> " & Err.Number & " - " & Err.Description
> 50      Resume Status_Exit
> 
> End Sub
> Private Sub oVBSendMail_Progress(lngPercentComplete As Long)
> 
>         Const RoutineName = "Progress"
>         Const Version = "1.0.0"
> 
> 10      On Error GoTo Progress_Err
> 
> 20      Forms![frmSendMailStatus]![lblProgress].Caption = lngPercentComplete
> & "% complete"
> 
> Progress_Exit:
> 30      Exit Sub
> 
> Progress_Err:
> 40      varErrorMessage = "Unexpected Error in OCS_SENDMAIL::PROGRESS -
> Error: " & Err.Number & " - " & Err.Description
> 50      Resume Progress_Exit
> 
> End Sub
> Private Sub oVBSendMail_SendFailed(strExplanation As String)
> 
>         Const RoutineName = "SendFailed"
>         Const Version = "1.0.0"
> 
>         Dim strMsg As String
> 
> 10      On Error GoTo SendFailed_Err
> 
> 20      Forms![frmSendMailStatus].Caption = "Send Failed!"
> 30      DoCmd.Hourglass False
> 40      varErrorMessage = "XYR Send Mail - Send Failed for the following
> reason:" & vbCrLf & strExplanation
> 
> SendFailed_Exit:
> 50      Set oVBSendMail = Nothing
> 
> 60      Exit Sub
> 
> SendFailed_Err:
> 70      varErrorMessage = "Unexpected Error in OCS_SENDMAIL::SENDFAILED -
> Error: " & Err.Number & " - " & Err.Description
> 80      Resume SendFailed_Exit
> 
> End Sub
> Private Sub oVBSendMail_SendSuccesful()
> 
>         Const RoutineName = "SendSuccesful"
>         Const Version = "1.0.0"
> 
> 10      On Error GoTo SendSuccesful_Err
> 
> 20      Forms![frmSendMailStatus].Caption = ""
> 30      DoCmd.Hourglass False
> 40      varErrorMessage = Null
> 
> SendSuccesful_Exit:
> 50      Set oVBSendMail = Nothing
> 
> 60      Exit Sub
> 
> SendSuccesful_Err:
> 70      varErrorMessage = "Unexpected Error in OCS_SENDMAIL::SENDSUCCESFUL -
> Error: " & Err.Number & " - " & Err.Description
> 80      Resume SendSuccesful_Exit
> 
> End Sub
> 
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby
> Sent: Tuesday, December 30, 2008 3:03 PM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Application Error logging
> 
> This is a DLL correct?  Which means a DLL register on any 
> machine it runs on?
> 
> John W. Colby
> www.ColbyConsulting.com
> 
> 
> Jim Dettman wrote:
>> John,
>>
>> <<I have asked about a generic email and so far haven't found 
>> anything that "just works, every where, every time".>>
>>
>>   Basically, you need to talk directly to a SMTP server.  Even that
> however
>> is not foolproof, but it gets rid of about 90% of the hassle.
>>
>>   You can use BLAT (script and shell out to call the command line or use
> the
>> DLL) or something like vbSendMail.
>>
>>   I use the latter.  Wrapped a class around it with a template table to
> set
>> defaults for all the options and then call that from my apps.
>>
>> Jim. 
>>
>> -----Original Message-----
>> From: accessd-bounces at databaseadvisors.com
>> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby
>> Sent: Tuesday, December 30, 2008 1:34 PM
>> To: Access Developers discussion and problem solving
>> Subject: Re: [AccessD] Application Error logging
>>
>> I have been looking for an email function that is generic, 
>> i.e. can just be written in code and work anywhere, any 
>> time.  ATM I do email lots of stuff, but it is always done 
>> through Outlook automation, which of course requires Outlook 
>> to be available at the time the email is generated.
>>
>> I have asked about a generic email and so far haven't found 
>> anything that "just works, every where, every time".
>>
>> John W. Colby
>> www.ColbyConsulting.com
>>
>>
>> Heenan, Lambert wrote:
>>> Me too! :-)
>>>
>>> Been logging errors since the beginning of time. My error logger also
>> emails the error information to me. I also use MS Tools every day. Don't
>> leave home without it.
>>> Lambert
>>>
>>> P.S. Welcome back John.
>>>



More information about the AccessD mailing list