Zwischengespeicherte Aktualisierungen mit Methoden der Datenmengenkomponente anwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Aktualisierungen mit der BDE zwischenspeichern - Index


Hinweis: Die Borland Database Engine (BDE) ist veraltet und wird nicht mehr weiterentwickelt. Die BDE wird Unicode beispielsweise nie unterstützen. Sie sollten mit der BDE keine neuen Entwicklungen vornehmen. Überprüfen Sie, ob Sie Ihre vorhandenen Datenbankanwendungen nicht von der BDE nach dbExpress migrieren können.

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:

Delphi:

 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;

C++:

 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