This example uses a button to copy the value of a field in the previous record into the corresponding field in the current record.
procedure TForm1.CopyDataClick(Sender: TObject);
var
SavePlace: TBookmark;
PrevValue: Variant;
begin
with PSQLTable1 do
begin
// Get a bookmark so that we can return to the same record
SavePlace := GetBookmark;
// Move to prior record
FindPrior;
// Get the value
PrevValue := Fields[0].Value;
// Move back to the bookmark
// this may not be the next record anymore
// if something else is changing the dataset asynchronously
GotoBookmark(SavePlace);
// Set the value
Fields[0].Value := PrevValue;
// Free the bookmark
FreeBookmark(SavePlace);
end;
end;
To ensure that the button is disabled when there is no previous record, the OnDataChange event of the DataSource detects when the user moves to the beginning of file (BOF property becomes True), and disables the button.
procedure TForm1.Table1DataChange(Sender: TObject; Field: TField);
begin
if PSQLTable1.BOF then
CopyData.Enabled := False
else
CopyData.Enabled := True;
end;