Delphi dbgrid row cannot be located for updating
In ADO 2.6, the error message is "Row cannot be located for updating.Some values may have been changed since it was last read." This is the nature of optimistic locking.The effect you will see is that the fields are left blank, which is not very helpful because you don't know which record has been deleted. This means there are no controls to prevent two users from editing the same record at the same time.(This was not the behavior in the first version of ADOExpress, which displayed the field values of deleted records.) The ingenuity you need in order to solve the function ADOUpdates Pending(ADOData Set: TCustom ADOData Set): boolean; var Clone: TADOData Set; begin Clone := TADOData Set. The first user to save their changes will succeed; the second user's attempt to update the same record might fail.The order in which the statements are executed is important, because the new product might relate to the new supplier, so the new supplier is inserted first.The biggest problem with the ADO solution can be seen when a row in a join is deleted. The exact message you see depends on the version of ADO you are using and the database, but it will be along the lines that you cannot delete the row because other records relate to it. In the current scenario, the error message implies that a product cannot be deleted because there are records that relate to the product, but the error occurs whether the product has any related records or not.One such status is fg Pending Records, which includes all records that have been modified but not yet applied. As such, the attitude is that all users can edit any record at any time, and you deal with the consequences of conflicts between different users' updates to the same records when the changes are saved.
Fortunately, you can achieve this result using another dynamic property—in this case, the Unique Table dynamic property.
This would be the case in a briefcase application (which we will return to in the section "The Briefcase Model"), but it can also be the case in web applications that use another ADO technology, Remote Data Services (RDS).
You can enable batch updates in any ADO dataset by setting to cl Use Client, because batch updates are managed by ADO's cursor engine.
Some differences between the syntaxes are slight, such as changing procedure TForm1.
Form Close Query( Sender: TObject; var Can Close: Boolean); begin Can Close := True; if ADOData Set1. Free; end; end; property and saw how pessimistic locking works.