Microsoft KB Archive/194980

= PRB: Form Close Fails if Control Bound to RDC is Dirty =

Article ID: 194980

Article Last Modified on 1/9/2003

-

APPLIES TO


 * Microsoft Visual Basic 5.0 Enterprise Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition

-



This article was previously published under Q194980



SYMPTOMS
A form cannot be closed or unloaded.



CAUSE
If data in a control bound to a Microsoft RemoteData Control is changed and if the RDC's underlying resultset is non-updateable, then attempts to close the form will fail silently.



RESOLUTION
One way to avoid this problem is to set the Enabled property of all controls bound to an RDC to False. If edits are desired, then a command button to enable the controls can be added to the form. The controls would be disabled when the edit is committed or canceled.

Another way to avoid this problem is to add code similar to that below to the Validate event procedure for each RDC: Private Sub MSRDC1_Validate(Action As Integer, Reserved As Integer) If Action = rdActionUnload Then If (MSRDC1.Resultset Is Nothing) Then UndoEdits Me          Else If (Not MSRDC1.Resultset.Updatable) Then UndoEdits Me              End If           End If       End If   End Sub Also add the following procedure to a standard module: Sub UndoEdits(frm As Form) Dim ctl As Control

For Each ctl in frm.Controls On Error Resume Next If (TypeName(ctl.DataSource) = "MSRDC") Then If (Err = 0) Then ctl.DataChanged = False ElseIf (Err <> 438) Then MsgBox "Unexpected error!" Stop End If          End If       Next ctl End Sub The effect of this code is to cause any changes to data to be ignored when the form is being closed (rdActionUnload). It is assumed that this is the desired behavior because the resultset is non-updateable. There are two pieces of this code worth noting. If the RDC itself is not bound to data, then it is "non-updateable" with respect to the behavior described in this article. Also, error 438, "object does not support this property or method", will occur for any controls that do not support a DataChanged property. Because this code checks every control on the form, this error is expected for controls such as command buttons.

If this problem is being encountered because the RDC's LockType property is set to rdConcurReadOnly, then there is a simpler workaround than the above. Choose another value for the LockType property, and add the following code to the RDC's Validate event: If (Action = rdActionUpdate) Then Action = rdActionCancelUpdate This problem can also be avoided by using the Microsoft ADO Data Control.



STATUS
Microsoft is researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.



Steps to Reproduce Behavior

 * 1) Create a Standard EXE project in Visual Basic. Form1 is created by default.
 * 2) To the default form, add a TextBox, a CommandButton, and a RemoteData Control.
 * 3) Bind the RDC to some data source, and set the LockType property to rdConcurReadOnly.
 * 4) Bind the text box to the RDC.
 * 5) In the Click event of the CommandButton, set the Text property of the TextBox to some new value.
 * 6) Try to close the form (e.g. click on the X button at the upper-right corner), and note that the form will not close. The workarounds are as indicated above.

Keywords: kbprb kbctrl KB194980

-

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

© Microsoft Corporation. All rights reserved.