Można użyć UpdateStatus
własność TClientDataSet za to:
if Cds.UpdateStatus = usModified then
// current row was changed
Inne możliwe wartości to usUnmodified
, usInserted
i usDeleted
. W odróżnieniu od właściwości TDataSet.Modified
, UpdateStatus
dla bieżącego wiersza jest zachowywana po tym, jak jego zmiany zostały przesłane do CDS przez CDS.Post. Oczywiście, od Ciebie zależy, które z tych wartości liczbowych będą potrzebne do twojej aplikacji.
Jak zauważono w Pomocy online, można użyć UpdateStatus
ustawić wartość pola obliczono:
procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
case TClientDataSet(DataSet).UpdateStatus of
usUnmodified: FieldByName('Status').AsString := '';
usModified: FieldByName('Status').AsString := 'M';
usInserted: FieldByName('Status').AsString := 'I';
usDeleted: FieldByName('Status').AsString := 'D';
end;
end;
Można również użyć jej StatusFilter
mienia tymczasowo filtrować TClientDataSet aby wybrać wiersze z SPECYFICZNIE UpdateStatus
:
procedure TCDSForm.Button1Click(Sender: TObject);
begin
if CDS.StatusFilter = [] then
CDS.StatusFilter := [usModified]
else
CDS.StatusFilter := [];
Caption := IntToStr(CDS.RecordCount);
end;
Zauważ, że CDS.RecordCount
z StatusFilter
ustawiony usModified
niekoniecznie zwrócić taką samą wartość jakWłaściwość, ponieważ wartość ChangeCount
obejmuje liczbę wierszy wstawionych oraz liczbę, które zostały zmodyfikowane.
Należy pamiętać, że 'Cds.fields1.Value <> Cds.fields1.OldValue' będzie również zawierać wstawione rekordy. Ten kod pochodzi z pytania. –
@ SertacAkyuz: Nie testowałem tego, ale jeśli tak mówisz, dobry punkt. – MartynA
Właściwie nie przetestowałem też, zakładam OldValue na wartość zerową dla wstawionego rekordu. –