Microsoft KB Archive/148999

= BUG: ON ERROR Not Called When Update Conflict Occurs in Grid =

Article ID: 148999

Article Last Modified on 5/7/2003

-

APPLIES TO


 * Microsoft Visual FoxPro 3.0 Standard Edition
 * Microsoft Visual FoxPro 3.0b Standard Edition
 * Microsoft Visual FoxPro 5.0 Standard Edition
 * Microsoft Visual FoxPro 5.0a
 * Microsoft Visual FoxPro 6.0 Professional Edition

-



This article was previously published under Q148999



SYMPTOMS
When you use row or table buffering in a form, an update conflict could occur if a user attempts to make changes to data that has already been updated by another user. In this situation, Visual FoxPro will display a standard update conflict error message, which allows the user to revert their changes. You can use an ON ERROR routine to trap for this error to more gracefully handle potential update conflicts. However, when you use an ON ERROR routine to trap for these update conflicts, the error routine will not be called correctly if the error occurs while interacting with a grid. This is a bug.



WORKAROUND
Using the Valid event of the text box object in the columns of a grid, you can check for potential update conflicts before actually performing the updates. Place the following code in the Valid event of the text box in every column of a grid: IF InList(GetFldState(This.ControlSource),2,4) AND ; OldVal(This.ControlSource)<>CurVal(This.ControlSource) WAIT WINDOW 'Value has been changed by another user.' =TableRevert(.t.) RETURN 0 ENDIF



STATUS
Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.



Steps to Reproduce Problem
 Create a new form. Add a table to the data environment of the form and set the BufferModeOverride property to 3. Drag the table from the data environment to the form to create a grid. Save the form as Test.scx.  Create a new program that contains the following code: SET EXCLUSIVE OFF ON ERROR WAIT WINDOW 'This is my error handler' DO FORM Test  Save and run the program. Start a second instance of Visual FoxPro, and run the program under this second instance of Visual FoxPro. Make a change to a field on the first record in the grid, and move off that record to update the table. Switch back to the first instance of Visual FoxPro.</li> Make a change to the same field on the first record of the grid, and move off that record to update the table. Note that the standard update conflict error appears instead of the WAIT WINDOW.</li></ol>

<div class="references_section">