Aktualisierungen anwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Datensätze aktualisieren


Änderungen, die an der lokalen Kopie der Daten einer Client-Datenmenge vorgenommen wurden, werden erst dann an den Datenbankserver (oder an das XML-Dokument) gesendet, wenn die Client-Anwendung die Methode ApplyUpdates für die Datenmenge aufruft. ApplyUpdates nimmt die Änderungen aus dem Änderungsprotokoll entgegen und sendet sie als Datenpaket (Delta) an den Provider. (Beachten Sie bitte, dass der Provider bei den meisten Client-Datenmengen ein internes Objekt ist.)

ApplyUpdates übernimmt einen einzelnen Parameter (MaxErrors), der die maximale Anzahl der Fehler festlegt, die der Provider tolerieren soll, bevor er die Aktualisierung abbricht. Ist MaxErrors gleich 0, wird die gesamte Aktualisierung abgebrochen, sobald ein Aktualisierungsfehler auftritt. Die Änderungen werden in diesem Fall nicht in die Datenbank geschrieben, und das Änderungsprotokoll der Client-Datenmenge bleibt unverändert. Ist MaxErrors gleich -1, werden beliebig viele Fehler toleriert, und das Änderungsprotokoll enthält alle Datensätze, die nicht erfolgreich übertragen werden konnten. Enthält MaxErrors einen positiven Wert, und es treten mehr Fehler auf, als von MaxErrors zugelassen, werden alle Aktualisierungen abgebrochen. Treten weniger Fehler als in MaxErrors angegeben auf, werden alle erfolgreich eingetragenen Datensätze automatisch aus dem Änderungsprotokoll der Client-Datenmenge entfernt.

ApplyUpdates gibt die Anzahl der tatsächlich aufgetretenen Fehler zurück. Dieser Wert ist immer kleiner oder gleich MaxErrors + 1. Dieser Rückgabewert gibt die Anzahl der Datensätze an, die nicht in die Datenbank geschrieben werden konnten.

Die Methode ApplyUpdates der Client-Datenmenge bewirkt Folgendes:

  • Sie ruft indirekt die Methode ApplyUpdates des Providers auf. Die Methode ApplyUpdates des Providers schreibt die Aktualisierungen in die Datenbank, in die Quelldatenmenge oder in das XML-Dokument und versucht, alle aufgetretenen Fehler zu korrigieren. Datensätze, die aufgrund von Fehlerbedingungen nicht eingetragen werden können, werden an die Client-Datenmenge zurückgesendet.
  • Die Methode ApplyUpdates der Client-Datenmenge versucht dann, diese Probleme zu lösen, indem sie die Methode Reconcile aufruft. Reconcile ist eine Fehlerbehandlungsroutine, die die Ereignisbehandlungsroutine DBClient.OnReconcileError aufruft. Es ist Ihre Aufgabe, durch entsprechende Programmierung der Ereignisbehandlungsroutine OnReconcileError die Fehler zu beheben. Weitere Informationen über OnReconcileError finden Sie unter Aktualisierungsfehler korrigieren.
  • Schließlich entfernt Reconcile alle erfolgreich eingetragenen Änderungen aus dem Änderungsprotokoll und aktualisiert Data, so dass die neu aktualisierten Datensätze berücksichtigt werden. Nachdem Reconcile abgeschlossen ist, gibt ApplyUpdates die Anzahl der aufgetretenen Fehler zurück.

Warnung: In einigen Situationen kann der Provider nicht erkennen, wie er Aktualisierungen vornehmen soll (wenn beispielsweise Aktualisierungen aus einer Stored Procedure oder einem Join über mehrere Tabellen vorgenommen werden sollen). Client-Datenmengen und Provider-Komponenten erzeugen Ereignisse, die Ihnen helfen, diese Situationen zu behandeln. Weitere Informationen dazu finden Sie unter Bei der Anwendung von Aktualisierungen eingreifen.

Tipp: Falls sich der Provider auf einem statuslosen Anwendungsserver befindet, kann es vor oder nach dem Eintragen von Aktualisierungen sinnvoll sein, persistente Statusinformationen auszutauschen. TClientDataSet empfängt das Ereignis DBClient.BeforeApplyUpdates, bevor die Aktualisierungen gesendet werden, so dass Sie die Möglichkeit haben, persistente Statusinformationen an den Server zu senden. Nachdem die Aktualisierungen eingetragen wurden (aber noch vor dem Korrekturprozess), empfängt TClientDataSet das Ereignis DBClient.AfterApplyUpdates, das Ihnen die Möglichkeit gibt, auf die von dem Anwendungsserver zurückgegebenen persistenten Statusinformationen zu reagieren.

Siehe auch