Microsoft KB Archive/229272

= FIX: Datacombo Returns -2147217848 (80040e4e) Change Canceled =

Article ID: 229272

Article Last Modified on 8/7/2007

-

APPLIES TO


 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft ActiveX Data Objects 2.0
 * Microsoft ActiveX Data Objects 2.1
 * Microsoft ActiveX Data Objects 2.5

-



This article was previously published under Q229272



SYMPTOMS
When using a DataCombo control, if the DataField property of the DataCombo is bound to a numeric data type a problem may occur under the following circumstances:

The user clicks the combo box and moves the mouse over the entries in the drop-down portion of the combo box but does NOT choose an item from the list. The user then clicks another control so that the DataCombo loses focus and an attempt is made to update the underlying data source specified in the DataField property.

This action fails because the Text property of the combo is an empty string (non-numeric) and the bound field is a numeric type. In this case the following error message is returned:

-2147217848 (80040e4e) The change was canceled during notification; no columns are changed.



RESOLUTION
To work around this error check the Text property of the Datacombo. If it is blank, cancel the update to the underlying records. This work around is demonstrated in the code sample in the MORE INFORMATION section.



STATUS
This problem was fixed in Visual Basic 6.0 Service Pack 4 (SP4).

For additional information about Visual Studio service packs, click the following article numbers to view the articles in the Microsoft Knowledge Base:

194022 INFO: Visual Studio 6.0 Service Packs, What, Where, Why

194295 HOWTO: Tell That a Visual Studio Service Pack Is Installed

To download the latest Visual Studio service pack, visit the following Microsoft Web site:

http://msdn2.microsoft.com/en-us/vstudio/Aa718353.aspx



Steps to Reproduce Behavior
 Create a new Visual Basic Standard EXE project. Choose Components from the Project menu and then add a reference to Microsoft Datalist Controls 6.0 (OLEDB). Choose References from the Project menu and check Microsoft Active Data Objects. Add a regular text box and a Datacombo to the default form.  Paste the following code into the default form: Private rsRowsource As ADODB.Recordset Private rsDataSource As ADODB.Recordset Private Sub DataCombo1_Validate(Cancel As Boolean) On Error Resume Next '   Uncomment this code as a workaround '--- '   If DataCombo1.Text = "" Then '       rsDataSource.Cancel '       rsDataSource.Move 0 '       Exit Sub ' '   End If

rsDataSource.Move 0 MsgBox Err.Number & vbCrLf & Err.Description

End Sub Private Sub Form_Load Set rsRowsource = New ADODB.Recordset rsRowsource.Fields.Append "ID", adInteger rsRowsource.Fields.Append "Descr", adVarWChar, 255 rsRowsource.Open For x = 1 To 5 rsRowsource.AddNew Array("ID", "Descr"), Array(x, "Descr" & Str(x)) Next x   Set rsDataSource = New ADODB.Recordset rsDataSource.Fields.Append "ID", adInteger rsDataSource.Fields.Append "Foreign_ID", adInteger rsDataSource.Open DataCombo1.ListField = rsRowsource(1).Name DataCombo1.DataField = rsDataSource(1).Name DataCombo1.BoundColumn = rsDataSource(0).Name Set DataCombo1.RowSource = rsRowsource Set DataCombo1.DataSource = rsDataSource

rsDataSource.AddNew End Sub  Run the project. Click the DataCombo and move the mouse over the selections; however, do not select one. Now click the other Textbox control so that the DataCombo loses focus. You will see the preceding error message display. Uncomment the commented lines of code to see the workaround.</li></ol>

<div class="references_section">