Microsoft KB Archive/189851

= PRB This Action was Cancelled by an Associated Object.(3426)" =

Article ID: 189851

Article Last Modified on 7/15/2004

-

APPLIES TO


 * Microsoft Visual Basic 5.0 Learning Edition
 * Microsoft Visual Basic 6.0 Learning Edition
 * Microsoft Visual Basic 5.0 Professional Edition
 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 5.0 Enterprise Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft Visual Basic 4.0 Standard Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 16-bit Enterprise Edition
 * Microsoft Visual Basic 4.0 32-Bit Enterprise Edition

-



This article was previously published under Q189851



SYMPTOMS
This article discusses the error message "This action was cancelled by an associated object." that Visual Basic generates when working with Access databases and the Data control. This article does not apply to the ADO data control.



CAUSE
This error is being generated because the AddNew command of a bound recordset causes Visual Basic to try to save the current record if the data has changed. Because the data control is currently pointing to a NULL record and not an empty record, the data cannot be saved so the "action was cancelled by an associated object" error is reported. This is commonly seen when using the data form wizard in Visual Basic versions 4.0 and 5.0. The data form wizard in Visual Basic 6.0 generates code for the ADO data control so this error is less likely to occur.



RESOLUTION
Check the underlying recordset to see if either the BOF or EOF properties are True before allowing an implicit save to occur. An implicit save occurs either when using the data control to navigate off of a record where the information has changed or adding a record to a bound recordset.



STATUS
This behavior is by design.



Steps to Reproduce Behavior
 Create a new Visual Basic Standard EXE project. Form1 is created by default.  Add the following controls to Form1:

     Control Type        Control Name         Caption ---     Data                datDataCtl Text Box           txtCategory Command Button     cmdAddNew            Add Command Button     cmdMoveVeryLast      Move Very Last

  Cut and paste the following code into the code window of the form:

Option Explicit

Private Sub cmdAddNew_Click

'Uncomment this block to avoid 3426 error message ' Check to see you are on NULL Pointer 'If datDataCtl.Recordset.EOF Or datDataCtl.Recordset.BOF Then

'Dim strBuffer As String

' Save what was typed into the text box into memory 'strBuffer = txtCategory.Text

' Restore text box value to the original record contents ' in this case, that is NULL 'datDataCtl.UpdateControls

' Add a new blank record 'datDataCtl.Recordset.AddNew

' Restore what has been typed from memory to text box 'txtCategory.Text = strBuffer

' Save the current record we are on and Add a new blank ' record 'datDataCtl.Recordset.AddNew

'End If

' be sure to comment below line when uncommenting above block of         ' code to avoid an additional record added to the recordset. datDataCtl.Recordset.AddNew

End Sub

Private Sub cmdMoveVeryLast_Click

If Not (datDataCtl.Recordset.BOF Or datDataCtl.Recordset.EOF) Then datDataCtl.Recordset.MoveLast datDataCtl.Recordset.MoveNext End If

End Sub

Private Sub Form_Load

With datDataCtl .DatabaseName = App.Path & "\NWIND.MDB" .RecordSource = "Categories" End With

txtCategory.DataField = "CategoryName"

End Sub

 While in the form's design view, set txtCategory's DataSource property equal to datDataCtl. Run the form. To reproduce the data, click on the Move Very Last CommanButton, type any data into the text box, and then click on the Add CommandButton.</li> Note error: uncomment the above code sample to avoid the error.</li></ol>

Additional query words: kbVBp kbVBp500 kbVBp600 kbdss kbDSupport kbVBp400 kbDatabase kbDAO

Keywords: kbprb KB189851

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.