ACC: Error 2753 Using BeforeInsert to Populate Bound OLE Control (180313)



The information in this article applies to:

  • Microsoft Access for Windows 95 7.0
  • Microsoft Access 97

This article was previously published under Q180313
Advanced: Requires expert coding, interoperability, and multiuser skills.

SYMPTOMS

When you try to use the BeforeInsert event to populate a bound OLE control on a form, you may receive the following error.

In Microsoft Access 97

Run-time Error '2753':
A problem occurred while Microsoft Access was communicating with the OLE server.

Close the OLE server and restart it outside of Microsoft Access. Then try the original operation again in Microsoft Access.

In Microsoft Access 7.0

Run-time Error '2753':
A problem occurred while Microsoft Access was communicating with the object application.

Solution
Close the object application, and then restart it outside of Microsoft Access. Then try the original operation again in Microsoft Access.

RESOLUTION

The following example uses the Current event to populate a bound OLE control every time you create a new record. It creates the object only if the control is empty.
  1. Follow steps 1 - 4 in the "Steps to Reproduce Behavior" section.
  2. Switch the form to Design view and set the OnCurrent property of the form to the following event procedure:
          Private Sub Form_Current()
             ' If the control is empty.
             If Me![OLETest].OLEType = acOLENone Then
                With Me![OLETest]
                   ' Set the object type to Embedded.
                   .OLETypeAllowed = acOLEEmbedded
                   ' Set the class.
                   .Class = "Excel.Sheet"
                   ' Create the embedded object.
                   .Action = acOLECreateEmbed
                   ' Fit the object to the size of the control.
                   .SizeMode = acOLESizeStretch
                End With
                ' Set the focus back to the ID field.
                Me!ID.SetFocus
             End If
          End Sub
    					
  3. Switch the form to Form view and move to a new record. Note that OLETest is populated when you move to a new record.

STATUS

Microsoft has confirmed this to be a problem in Microsoft Access versions 7.0 and 97.

MORE INFORMATION

Steps to Reproduce Behavior

  1. Start Microsoft Access and open any database.
  2. Create the following table:
          Table: tblOLETable
          ------------------------
          Field Name: ID
             Data Type: Text
          Field Name: OLETest
             Data Type: OLE Object
    					
  3. Close the table and save it as tblOLETable. When prompted to create a primary key, click No.
  4. Use the AutoForm: Columnar Wizard to create a new form based on the tblOLETable table.
  5. Switch the form to Design view and set the BeforeInsert property of the form to the following event procedure:
          Private Sub Form_BeforeInsert(Cancel As Integer)
    
             With Me![OLETest]
                ' Set the object type to embedded.
                .OLETypeAllowed = acOLEEmbedded
                ' Set the class.
                .Class = "Excel.Sheet"
                ' Create the embedded object.
                .Action = acOLECreateEmbed
                ' Size the object to fit the control.
                .SizeMode = acOLESizeStretch
             End With
    
          End Sub
    					
  6. Switch the form to Form view.
  7. Type the letter "a" in the ID text box to trigger the BeforeInsert event. Note that you receive one of the errors described in the "Symptoms" section.

Modification Type:MajorLast Reviewed:10/20/2003
Keywords:kbbug kbpending KB180313