I cannot speak for BDE as I don't want to get in touch with it anymore, but what you've described I can read like:
Why does not AnyDAC refresh the tuple before editing starts?
If that is so, and correct me if I'm wrong, that would be quite against UX. Imagine, that you were a user of your own application and wanted to edit a certain tuple in a data grid view. You would click some edit button to enter editing mode, and the whole row would suddenly change in front of your eyes (or editor would be filled by different data than you've seen). Would you like this to happen?
If so, then I'm afraid you'll need to perform such refresh manually with AnyDAC (or FireDAC). The point here is that the engine either locks the tuple by transaction, or tracks the changes inside the internal storage whilst you're in the editing mode.
In neither case refreshes the tuple before editing starts (no matter which locking options you use). And I'm personally fine with this behavior as it could lead to what I've described above.
So how can I refresh the active tuple before editing starts then?
To refresh particular tuple to which the dataset cursor points before dataset editing starts you can call e.g. RefreshRecord from the BeforeEdit event, for example:
procedure TForm1.ADTable1BeforeEdit(DataSet: TDataSet);
begin
TADTable(DataSet).RefreshRecord;
end;
But then your database editing capability becomes a moving target (well, maybe it is already).