ACC: Inconsistent Behavior with Multiple-Field Primary Key

Last reviewed: December 19, 1997
Article ID: Q170779
The information in this article applies to:
  • Microsoft Access versions 7.0, 97

SYMPTOMS

Novice: Requires knowledge of the user interface on single-user computers.

In Microsoft Access version 7.0 or later, you may see inconsistent behavior when you define a relationship that enforces referential integrity, and the "one-side" table contains a multiple-field primary key. You can create a relationship, even though a record in the "many-side" table contains a Null value in one of the foreign key fields. However, after the relationship has been defined, you receive the following error message when you change another record in the "many-side" table so that it also contains a Null value in one of the foreign key fields:

   You can't add or change a record because a related record is required
   in table <table>.

In Microsoft Access 7.0, you receive the message:

   Can't add or change record. Referential integrity rules require a
   related record in <table.>

STATUS

Microsoft has confirmed this to be a problem in the Microsoft Access versions listed at the beginning of this article. This problem no longer occurs in Microsoft Jet Database Engine version 3.51, which is available from the Microsoft Software Library.

For information on how to obtain Microsoft Jet Database Engine 3.51, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q172733
   TITLE     : ACC97: Updated Version of Microsoft Jet 3.5 Available on MSL

MORE INFORMATION

Steps to Reproduce Behavior

  1. Start Microsoft Access and create a new database called Db1.mdb.

  2. Create the following table in Design View:

       Table: Table1
       ------------------
       Field Name: Field1
          Data Type: Text
       Field Name: Field2
          Data Type: Text

  3. On the Edit menu, click Select All.

  4. On the Edit menu, click Primary Key to create the multiple-field
     primary key.

  5. Save the table as Table1.

  6. On the View menu, click Datasheet.

  7. Enter the following records:

       Field1     Field2
       ------     ------
       a          a
       b          b

     Close the table.

  8. Create the following table in Design view:

       Table: Table2
       ------------------
       Field Name: Field1
          Data Type: Text
       Field Name: Field2
          Data Type: Text
       Field Name: Field3
          Data Type: Text

  9. Save the table as Table2 without defining any primary key.

 10. On the View menu, click Datasheet.

 11. Enter the following records:

       Field1     Field2     Field3
       ------     ------     ------
       a          a          x
       b                     y

     Do not enter any data in Field2 of the second record.

 12. Close the table.

 13. On the Tools menu, click Relationships. Add the Table1 table and the
     Table2 table to the Relationships window, and then click Close.

 14. Select the Field1 field in the Table1 table and drag it to the Field1
     field in the Table2 table.

 15. In the Relationships dialog box, click under the Field1 field in the
     first column of the second row in the Table/Query grid; select Field2
     from the list. Then click in the second column of the second row and
     select Field2.

 16. Click to select the Enforce Referential Integrity check box, and then
     click Create. Note that Microsoft Access allows you to create the
     relationship, even though a record in the Table2 table contains a Null
     value in one of the foreign key fields.

 17. Close the Relationships window and save the changes.

 18. Open the Table2 table in Datasheet view. Try to delete the data in
     the Field2 field of the first record. Note that you receive one of the
     errors described in the "Symptoms" section.

REFERENCES

For more information about referential integrity, ask the Microsoft Access 97 Office Assistant, or search the Help Index for "referential integrity" and select "What is referential integrity?"


Additional query words: composite compound
Keywords : RltRef kbusage
Version : 7.0 97
Platform : WINDOWS
Hardware : x86
Issue type : kbbug
Solution Type : Info_Provided


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: December 19, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.