Zwischengespeicherte Aktualisierungen mit Methoden der Datenmengenkomponente anwenden

Aus RAD Studio (Deutsch)
Wechseln zu: Navigation, Suche

Aktualisierungen für einzelne BDE-Datenmengen können Sie direkt mithilfe ihrer Methoden ApplyUpdates und CommitUpdates anwenden. Jede dieser Methoden beinhaltet eine Phase des Aktualisierungsprozesses:

  1. ApplyUpdates schreibt zwischengespeicherte Änderungen in eine Datenbank (Phase 1).
  2. CommitUpdates löscht den internen Zwischenspeicher, falls die Aktualisierung der Datenbank erfolgreich war (Phase 2).

Der folgende Quelltext zeigt, wie Sie Aktualisierungen innerhalb einer Transaktion für die Datenmenge CustomerQuery vornehmen:



 procedure TForm1.ApplyButtonClick(Sender: TObject)
 begin
   Database1.StartTransaction;
   try
     if not (Database1.IsSQLBased) and not (Database1.TransIsolation = tiDirtyRead) then
       Database1.TransIsolation := tiDirtyRead;
     CustomerQuery.ApplyUpdates;                { versuchen, die Änderungen in die Datenbank zu schreiben }
     Database1.Commit;                                    { bei Erfolg: die Änderungen festschreiben }
   except
     Database1.Rollback;                                    { im Fehlerfall: alle Änderungen rückgängig machen }
     raise;                 { die Exception erneut auslösen, um den Aufruf von CommitUpdates zu verhindern }
   end;
   CustomerQuery.CommitUpdates;                     { bei Erfolg: internen Zwischenspeicher löschen }
 end;



 void __fastcall TForm1::ApplyButtonClick(TObject *Sender)
 {
   Database1->StartTransaction();
   try
   {
     if (!Database1->IsSQLBased && Database1->TransIsolation != tiDirtyRead)
       Database1->TransIsolation = tiDirtyRead;
     CustomerQuery->ApplyUpdates(); // Schreibversuch der Aktualisierungen
     Database1->Commit(); // Bei Erfolg Änderungen eintragen
   }
   catch (...)
   {
     Database1->Rollback(); // im Fehlerfall: alle Änderungen rückgängig machen
     throw; // Exception auslösen, um CommitUpdates-Aufruf zu verhindern
   }
   CustomerQuery->CommitUpdates(); // Bei Erfolg Zwischenspeicher löschen
 }



Wurde während des Aufrufs von ApplyUpdates eine Exception ausgelöst, wird die Datenbanktransaktion rückgängig gemacht. Durch das Rückgängigmachen der Transaktion wird sichergestellt, dass die zugrunde liegende Datenbanktabelle nicht verändert wird. Die Anweisung raise innerhalb des try...except-Blocks löst die Exception erneut aus und verhindert damit den Aufruf von CommitUpdates. Weil CommitUpdates nicht aufgerufen wird, wird auch der interne Zwischenspeicher mit den Änderungen nicht gelöscht, so dass Sie die Fehlerbedingungen verarbeiten und die Aktualisierung gegebenenfalls wiederholt ausführen können.

Siehe auch

In anderen Sprachen