ACC: "#ERROR" Msg When Referencing Subreport Controls 95/97

Last reviewed: October 24, 1997
Article ID: Q138906
The information in this article applies to:
  • Microsoft Access versions 7.0, 97

SYMPTOMS

Moderate: Requires basic macro, coding, and interoperability skills.

If you reference a subreport control from a main report when the subreport does not return any matching records, you may receive a "#ERROR" message for the referenced subreport control.

NOTE: This article explains a technique demonstrated in the sample files, RptSampl.exe (for Microsoft Access for Windows 95 version 7.0) and RptSmp97.exe (for Microsoft Access 97). For information about how to obtain these sample files, please see the following articles in the Microsoft Knowledge Base:

   ARTICLE-ID: Q145777
   TITLE     : ACC95: Microsoft Access Sample Reports Available on MSL

   ARTICLE-ID: Q175072
   TITLE     : ACC97: Microsoft Access 97 Sample Reports Available on MSL

CAUSE

When the subreport has no data, it is not available. Referencing an empty subreport results in an invalid operation.

RESOLUTION

Make sure that subreport fields referenced in a main report contain data by adding a function to test for this condition. See the "Steps to Reproduce Behavior" and "Steps to Work Around Behavior" sections later in this article for an example of such a function.

STATUS

This behavior is by design.

MORE INFORMATION

Steps to Reproduce Behavior

  1. Start Microsoft Access and open the sample database Northwind.mdb.

  2. Create a new query based on the Customers table. Drag the CompanyName field from the field list to the query grid. Type the following line in the Criteria field for the column:

    Like "P*"

    Drag the CustomerID field from the field list to the next column on the query grid. Save the query as Sorter. Note that this query limits the recordset only to customer records beginning with the letter "P" and includes a customer with no orders.

  3. Create a new subreport based on the Orders table and name it SubRpt.

  4. Drag the Freight field to the detail section of the subreport. In the report footer section, add a text box and set the control's properties as follows:

    ControlSource: =Sum([Freight]) ControlName: TotFreight.

    The subreport prints the detailed freight items with a grand total for all freight charges.

  5. Create a new report based on the Sorter query and name it Main Report.

  6. On the View menu, click Sorting And Grouping. Click CompanyName in the Field/Expression box and set the GroupHeader property to Yes.

  7. Drag the CompanyName field to the new CompanyName header section.

  8. Drag the SubRpt subreport from the Database window to the detail section of Main Report. Below the subreport, add a label and set its Caption property as follows:

    Total Order Amount Per Customer:

  9. Add a text box and set its ControlSource property as follows:

    =([SubRpt].Report![TotFreight])

  10. Set both the LinkMasterFields and the LinkChildFields properties for the subreport control to CustomerID. Setting these properties filters the subreport to display the Freight charges for each customer.

  11. Preview the report. Note that "#ERROR" is displayed for the references to the subreport control for Paris Specialties, which has no orders.

Steps to Work Around Behavior

To test that subreport fields referenced in a main report contain data, follow these steps:

  1. Replace the line

          =([SubRpt].Report![TotFreight])
    

    in step 9 above with the following line

          =IIF([SubRpt].Report.HasData=True, [SubRpt].Report![TotFreight], 0)
    

  2. Preview the report.

Note that a zero value is displayed for Paris Specialties instead of the "#ERROR" message. The HasData property of the subreport returns True or False. You can use this property to eliminate the "#ERROR" message by returning a zero if the HasData property returns a False.

REFERENCES

For more information about the HasData property, search the Help Index for "HasData Property," or ask the Microsoft Access 97 Office Assistant.


Additional query words: pound error
Keywords : RptSub kberrmsg kbusage
Version : 7.0 97
Platform : WINDOWS
Hardware : x86
Issue type : kbprb
Solution Type : kbcode


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: October 24, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.