Programmieren mit dBASE PLUS: Funktionen: abandon

Aus Wikibooks


Verwirft alle anstehenden (noch nicht ausgeführten) Änderungen am aktuellen Datensatz.

Syntax[Bearbeiten]

<oReferenz>.abandon( )

<oReferenz>

Der Datensatzbereich, dessen aktueller Datensatzpufferinhalt verworfen werden soll.

Eigenschaft von[Bearbeiten]

Rowset

Beschreibung[Bearbeiten]

Alle Änderungen an einem Datensatz, die von Steuerungselementen oder einer Wertzuweisung an die Feldeigenschaft value herrühren, werden erst dann auf die Festplatte geschrieben, wenn eine Bewegung im Datensatzbereich stattfindet oder wenn die Methode save( ) des Datensatzbereichs aufgerufen wird oder wenn die Abfrage des Bereichs geschlossen wird. Mit der Methode abandon( ) können alle anstehenden Änderungen des Datensatzbereichs verworfen werden. Normalerweise geschieht dies auf Anforderung des Benutzers.

Um festzustellen, ob überhaupt Änderungen am Datensatz gemacht wurden, kann zuerst die Eigenschaft modified abgefragt werden. Ein Aufruf von abandon( ) hat aber selbst dann keine negativen Auswirkungen, wenn keine Änderungen zu verwerfen sind. (Die Events canAbandon und onAbandon werden dennoch ausgelöst.)

Eventuell möchten Sie, abweichend vom Standardprinzip, anstehende Änderungen beim Schließen einer Abfrage verwerfen. Sie können dies den Event-Handlern der Abfrage überlassen, anstatt hierfür Code zu entwickeln. Sie müssen dann die Methode abandon( ) während des canClose-Events der Abfrage aufrufen und vom canClose-Event-Handler den Wert True zurückerhalten. Wenn Sie abandon( ) während des onClose-Events aufrufen, ergibt sich kein Effekt, da onClose erst dann ausgelöst wird, wenn die Abfrage bereits geschlossen wurde und alle Änderungen auf der Festplatte gespeichert sind.

Wenn Sie mit abandon( ) die Änderungen an einem Datensatz verwerfen, erhalten alle Felder wieder ihre ursprünglichen Werte, und alle über dataLink verknüpften Steuerungselemente werden wieder in den vorherigen Zustand versetzt. Sollte der Datensatz zu Beginn der Änderungen gesperrt worden sein, wird die Sperre aufgehoben.

Die Methode abandon( ) läßt sich auch verwenden, um einen neuen Datensatz zu verwerfen, der mit beginAppend( ) erzeugt wurde. Der Datensatz, der zum Zeitpunkt des Aufrufs von beginAppend( ) der aktuelle war, wird wiederhergestellt. Mit abandon( ) wird nach demselben Prinzip der Filter- oder Suchmodus für einen Datensatzbereich deaktiviert.

Beim Aufruf von abandon( ) gilt folgende Event-Reihenfolge:

  1. Wenn das Rowset-Objekt einen canAbandon-Event-Handler aufweist, wird dieser aufgerufen. Wenn dies nicht der Fall ist, geschieht dasselbe, als hätte canAbandon den Wert True zurückgegeben.
  2. Wenn der canAbandon-Event-Handler False zurückgibt, geschieht nichts. Die Methode abandon( ) liefert den Wert False.
  3. Wenn der canAbandon-Event-Handler True zurückgibt:
  • Der aktuelle Inhalt des Datensatzpuffers wird verworfen, und der ursprüngliche Zustand des Rowset-Objekts wird wiederhergestellt.
  • Das Event onAbandon wird ausgelöst.
  • abandon( ) liefert true.

Die Methode abandon( ) bewirkt, daß anstehende Änderungen am aktuellen Datensatz verworfen werden. Es gibt aber noch zwei Möglichkeiten, Änderungen an mehreren Datensätzen in verschiedenen Tabellen zu verwerfen. Ein Aufruf von beginTrans( ) startet die Transaktionsprotokollierung, während der alle Änderungen festgehalten und eventuell mit der Methode rollback( ) wieder rückgängig gemacht werden können. Die Alternative besteht darin, die Eigenschaft cacheUpdates der Datenbank auf True zu setzen. Änderungen werden dann in einem lokalen Puffer zwischengespeichert, aber nicht auf die Platte geschrieben. Bei Bedarf lassen sich alle Änderungen mit abandonUpdates( ) verwerfen.