Datensätze mit der Methode Refresh aktualisieren

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Der Quelldatenmenge Parameter übergeben


Client-Datenmengen arbeiten immer mit einer Momentaufnahme der Daten aus der Quelldatenmenge. Falls die Quelldatenmenge Serverdaten repräsentiert, können andere Benutzer diese Daten verändern, während die Client-Datenmenge damit arbeitet. Die Daten in der Client-Datenmenge weichen dann im Laufe der Zeit immer mehr von dem exakten Abbild der zugrunde liegenden Daten ab.

Wie alle anderen Datenmengen unterstützen auch Client-Datenmengen die Methode Refresh, die ihre Datensätze aktualisiert, sodass sie mit den aktuellen Werten auf dem Server übereinstimmen. Der Aufruf von Refresh funktioniert aber nur, wenn im Änderungsprotokoll keine Änderungen anstehen. Enthält das Protokoll Änderungen, die noch nicht eingetragen wurden, löst der Aufruf von Refresh eine Exception aus.

Client-Datenmengen können ihre Daten jedoch auch aktualisieren, ohne das Änderungsprotokoll zu berücksichtigen. Dazu rufen Sie die Methode RefreshRecord auf. Anders als die Methode Refresh aktualisiert RefreshRecord nur den aktuellen Datensatz in der Client-Datenmenge. RefreshRecord ändert den ursprünglich vom Provider übergebenen Datensatzwert, behält dabei die Änderungen im Änderungsprotokoll jedoch bei.

Warnung:  Es ist nicht immer sinnvoll, RefreshRecord aufzurufen. Wenn die Bearbeitungen des Benutzers einen Konflikt mit den von anderen Benutzern an der zugrunde liegenden Datenmenge vorgenommenen Änderungen bedeuten, verbirgt der Aufruf von RefreshRecord diesen Konflikt. Wenn die Client-Datenmenge ihre Aktualisierungen zurückschreibt, tritt ein No-reconcile-Fehler auf und die Anwendung kann den Konflikt nicht auflösen.

Um zu vermeiden, dass Aktualisierungsfehler verborgen werden, sollten Sie überprüfen, ob Aktualisierungen anstehen, bevor Sie RefreshRecord aufrufen. Der folgende Aufruf von AfterScroll beispielsweise aktualisiert den aktuellen Datensatz immer dann, wenn der Benutzer zu einem neuen Datensatz weitergeht (und stellt damit den aktuellsten Wert sicher), aber nur, wenn diese Aktion sicher ist:

procedure TForm1.ClientDataSet1AfterScroll(DataSet: TDataSet);
begin
if ClientDataSet1.UpdateStatus = usUnModified then
ClientDataSet1.RefreshRecord;
end;
void __fastcall TForm1::ClientDataSet1AfterScroll(TDataSet *DataSet)
{
  if (ClientDataSet1->UpdateStatus == usUnModified)
    ClientDataSet1->RefreshRecord();
}

Siehe auch