ACC: Dynamically Synchronizing Two Forms using Code (95/97)

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

SUMMARY

Advanced: Requires expert coding, interoperability, and multiuser skills.

This article describes how to synchronize a form to the current record on the subform of another form using Visual Basic for Applications. The method described in this article synchronizes the form's bookmark with the bookmark of the form's recordset after searching the recordset for the current key value from the other form's subform.

This article assumes that you are familiar with Visual Basic for Applications and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about Visual Basic for Applications, please refer to your version of the "Building Applications with Microsoft Access" manual.

NOTE: This article explains a technique demonstrated in the sample files, FrmSampl.exe (for Microsoft Access for Windows 95 version 7.0) and FrmSmp97.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: Q150895
   TITLE     : ACC95: Microsoft Access Sample Forms Available on MSL

   ARTICLE-ID: Q175066
   TITLE     : ACC97: Microsoft Access 97 Sample Forms Available on MSL

MORE INFORMATION

CAUTION: Following the steps in this example will modify the sample database Northwind.mdb. You may want to back up the Northwind.mdb file, or perform these steps on a copy of the database.

The following example demonstrates how to synchronize the Products form to the current record in the Product List subform on the Categories form.

  1. Open the sample database Northwind.mdb

  2. Open the Product List form in Design view.

  3. Set the form's OnCurrent property to the following event procedure:

          '**********************************************************
          'Sub Form_Current()
          '**********************************************************
    

             'If the ProductName is blank, then exit the Sub.
             If IsNull(Me![ProductName]) Then
                Exit Sub
             End If
    
             'Dimension variables.
             Dim formname As String, SyncCriteria As String
             Dim f As Form, rs As Recordset
    
             'Set the formname to "Products," the form that will be
             'synchronized.
             formname = "Products"
    
             'Check to see if the Products form is open. If it
             'is not open, open it.
             If Not SysCmd(acSysCmdGetObjectState, acForm, formname) Then
                 DoCmd.OpenForm formname
             End If
    
             'Define the form object and Recordset object for
             'the Products form.
             Set f = Forms(formname)
             Set rs = f.RecordsetClone
    
             'Define the criteria used for the synchronization.
             SyncCriteria = BuildCriteria("ProductName", dbText, _
                Me!ProductName)
    
             'Synchronize the corresponding record in the Products form to
             'the current record in the subform.
             rs.FindFirst SyncCriteria
    
             'If a record exists in the Products form, find the
             'matching record.
             If rs.nomatch Then
                MsgBox "No match exists!", 64, formname
             Else
                f.bookmark = rs.bookmark
             End If
    
          '**********************************************************
          'End Sub
          '**********************************************************
    
    

  4. Save and then close the Product List form.

  5. Open the Categories form in Form view. When you open the Categories form, the subform's OnCurrent event procedure is triggered. This causes the Products form to open, if it is not already open, and synchronizes that form to the current record on the Categories subform.

You can adapt this method to occur when a command button is clicked by moving the code specified in the subform's OnCurrent property event procedure to a command button on the Categories form. If you do move the code to a command button, make sure to change the references to "Me" in the code to a full form reference, using the following syntax:

   Forms!Categories![Product List].Form

REFERENCES

For more information about synchronizing forms with Microsoft Access 2.0, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q119398
   TITLE     : ACC2: Dynamically Synchronizing Two Forms using Code

For more information about the SysCmd() function, search for "SysCmd Function" using the Microsoft Access 97 Help Index.

For more information about the Me property, search for "Me Property" using the Microsoft Access 97 Help Index.

Keywords          : kbusage FmsHowTo
Version           : 7.0 97
Platform          : WINDOWS
Hardware          : x86
Issue type        : kbhowto


================================================================================


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.