[AccessD] VBA Error Trapping

Ryan W wrwehler at gmail.com
Wed Apr 26 16:13:01 CDT 2023


Hey Stuart (Sorry I typed it wrong before).

I've considered a dlookup or dcount to achieve that goal, and it's a
possibility but I wondered if those were "extra" database lookups to disk
that may be slower overall than the report opening and canceling itself
because of "NoData".  I haven't timed that, though.





On Wed, Apr 26, 2023 at 4:11 PM Stuart McLachlan <stuart at lexacorp.com.pg>
wrote:

> Rahter than unnecessary opening, why not test the data with a DLookup() or
> DCount() first
> and only output the report if you get an appropriate result?
>
> On 26 Apr 2023 at 15:56, Ryan W wrote:
>
> > >it looks to me like you're opening in Preview Mode and then right
> > >away sending the same report to the printer. In any event if the
> > >first Open fails you don't want to resume next but exit the sub.
> >
> > In this case, I do want it to resume, but not export the now
> > "unfiltered" PDF.  The report is failing with NoData because the ID in
> > our database does not match the ID in the data they provided (assuming
> > my user didn't normalize the data before hand, which is the red
> > highlighting I mentioned to help accomplish that)
> >
> > So in the instance I'm testing, 2 ID's don't match and 1 Date/Time
> > doesn't match between their data and what they hand-write for us to
> > enter at the beginning of the job.  So, with the resume next and
> > skipping over the OutPut to and close commands, I get 97 PDFs, instead
> > of 100.  If I don't skip over those with some sort of logic, I get 100
> > PDFs, but 3 of them are unfiltered reports with 28 pages each, instead
> > of 1 page each. (28 is the table size in rows from the client in this
> > instance).
> >
> > Like I said, since I usually trap and exit the sub like you
> > recommended, trying to resume the processed and figuring out how to
> > handle commands that came after the failing command that need to be
> > ignored (temporarily)..... the only thing I came up with was to store
> > the error (or set a boolean variable) to evaluate and skip over the
> > two lines of code I do not want to run on "the loop with the 2501
> > error" and then reset on the next loop.
> >
> > Hope that's a better explanation.
> >
> >
> >
> > On Wed, Apr 26, 2023 at 3:41PM Rocky Smolin
> > <rockysmolin2 at gmail.com> wrote:
> >
> > > In my error handler I usually ignore 2501 because I've asked if the
> > > user wants to do something and they say no and so the 2501 operation
> > > canceled pops up.  They click OK, and carry on. But I have this in
> > > code where if they cancel an operation. So in the error handler If
> > > Err.Num = 2501 then exit sub else msgbox "Run Time Error: " &
> > > err.num & " - " & err.desc. and exit sub.
> > >
> > > Re: the code starting with 'With DoCmd', generally have two buttons
> > > on the form - Print and Preview. If the user wants to preview and
> > > know about Ctrl-P, then that's all they ever use.
> > >
> > > It looks to me like you're opening in Preview Mode and then right
> > > away sending the same report to the printer. In any event if the
> > > first Open fails you don't want to resume next but exit the sub.
> > >
> > > r
> > >
> > >
> > > On Wed, Apr 26, 2023 at 1:28PM Ryan W <wrwehler at gmail.com> wrote:
> > >
> > > > Oops. Yeah. Forgot to add that into the pseudocode.
> > > >
> > > > Is the handling of the error and resume logic sane enough?  I
> > > > usually
> > > only
> > > > handle errors that stop the process for the user to fix and start
> > > > over. With this I want it to keep chugging along even if the
> > > > report has no data (this is in relation to my query about fuzzy
> > > > matching last week)....
> > > right
> > > > now I have the data loaded from the client show in a datasheet as
> > > > red if
> > > a
> > > > matching ID for the work isn't found during the process. My users
> > > > can choose to fix it (ideally) or ignore it (and then end up
> > > > dealing with the missing reports with mismatched IDs after the
> > > > fact).
> > > >
> > > >
> > > >
> > > > On Wed, Apr 26, 2023 at 3:08PM Rocky Smolin
> > > > <rockysmolin2 at gmail.com> wrote:
> > > >
> > > > > I think you need an Exit Sub right before Err_Handler:
> > > > >
> > > > > R
> > > > >
> > > > > On Wed, Apr 26, 2023 at 11:30 AM Ryan W <wrwehler at gmail.com>
> > > > > wrote:
> > > > >
> > > > > > I've got this bit of code that opens a report in preview mode
> > > > > > and
> > > > hidden,
> > > > > > if the NoData event cancels it I trap a 2501 error.
> > > > > >
> > > > > > The lines that come after the DoCmd.OpenReport code will
> > > > > > continue to
> > > > run
> > > > > > and output the wrong data (an unfiltered report)
> > > > > >
> > > > > > What's the best way to avoid the next two lines that depend on
> > > > > > the
> > > > report
> > > > > > to be open?
> > > > > >
> > > > > >
> > > > > > I have something like this:
> > > > > >
> > > > > > With DoCmd
> > > > > >                         lError = 0
> > > > > >                         .OpenReport strReportName,
> > > > > >                         acViewPreview, ,
> > > > > > strWhere, acHidden
> > > > > >                         If lError = 0 Then
> > > > > >                            .OutputTo acOutputReport,
> > > > > >                            strReportName,
> > > > > > acFormatPDF, fullPath
> > > > > >                            .Close acReport, strReportName,
> > > > > >                            acSaveNo
> > > > > >                         End If
> > > > > >                     End With
> > > > > >
> > > > > > Err_Handler:
> > > > > >   if err.number = 2501 then
> > > > > >       lError = Err.Number
> > > > > >       Resume Next
> > > > > >    end if
> > > > > >
> > > > > >
> > > > > > Is this considered copacetic?   I tried without trapping the
> > > err.number
> > > > > to
> > > > > > a variable, but it seems resume next resets the errorcode back
> > > > > > to 0.
> > > > > Would
> > > > > > it be better to Resume to a label after the .close command? --
> > > > > > AccessD mailing list AccessD at databaseadvisors.com
> > > > > > https://databaseadvisors.com/mailman/listinfo/accessd Website:
> > > > > > http://www.databaseadvisors.com
> > > > > >
> > > > > --
> > > > > AccessD mailing list
> > > > > AccessD at databaseadvisors.com
> > > > > https://databaseadvisors.com/mailman/listinfo/accessd
> > > > > Website: http://www.databaseadvisors.com
> > > > >
> > > > --
> > > > AccessD mailing list
> > > > AccessD at databaseadvisors.com
> > > > https://databaseadvisors.com/mailman/listinfo/accessd
> > > > Website: http://www.databaseadvisors.com
> > > >
> > > --
> > > AccessD mailing list
> > > AccessD at databaseadvisors.com
> > > https://databaseadvisors.com/mailman/listinfo/accessd
> > > Website: http://www.databaseadvisors.com
> > >
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > https://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
>
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> https://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>


More information about the AccessD mailing list