Hi again,
For InfoPath forms with a main data connection to a database, InfoPath adds an xdoAdo xml element to the end of your XML payload (the data sent to the database). This element contains original data. InfoPath compares this against what's in the database to prevent from making updates on top of stale data. In other words, InfoPath needs to make sure someone else hasn't changed the database while the form was being edited. If the original data does not match what is in the database, the operation fails with the error:
InfoPath cannot submit the form.
An error occurred while the form was being submitted.
[0x80040E38][Microsoft Cursor Engine] Row cannot be located for updating. Some values may have been changed since it was last read.
There are several reasons why this may have happened:
-
Another user queried the same data and edited it
InfoPath does not prevent users from querying and modifying the same record simultaneously.
-
Database process updated the database and changed the rows
-
Data wasn't properly queried in the first place (and is missing nodes)
During our live meeting session today, we came to the hypothesis that your issue was #3. Your form was previously working correctly. You added grandchildren tables and removed the query on load. Thus the forms are not populating the correct original data and so save/submit is failing. To fix this problem, you can return to querying all data on load.
Hope this helps!