Zwischengespeicherte Aktualisierungen mittels einer Datenbank anwenden
Um zwischengespeicherte Aktualisierungen auf eine oder mehrere Datenmengen im Kontext einer Datenbankverbindung anzuwenden, rufen Sie die Methode 'ApplyUpdates der Datenbankkomponente auf. Der folgende Code wendet die Aktualisierungen in Reaktion auf ein Schaltflächenklick-Ereignis auf die Datenmenge CustomersQuery an:
procedure TForm1.ApplyButtonClick(Sender: TObject); begin // Bei lokalen Datenbanken wie Paradox, dBASE und FoxPro // setzen Sie TransIsolation auf DirtyRead if not (Database1.IsSQLBased) and not (Database1.TransIsolation = tiDirtyRead) then Database1.TransIsolation := tiDirtyRead; Database1.ApplyUpdates([CustomersQuery]); end;
void __fastcall TForm1::ApplyButtonClick(TObject *Sender) { // Bei lokalen Datenbanken wie Paradox, dBASE und FoxPro // setzen Sie TransIsolation auf DirtyRead if (!Database1->IsSQLBased && Database1->TransIsolation != tiDirtyRead) Database1->TransIsolation = tiDirtyRead; Database1->ApplyUpdates(&CustomersQuery,0); }
Die obige Sequenz schreibt zwischengespeicherte Aktualisierungen auf der Basis einer automatisch generierten Transaktion in die Datenbank. Ist dies erfolgreich, wird die Transaktion ausgeführt und anschließend werden die zwischengespeicherten Aktualisierungen übertragen. Ist dies nicht erfolgreich, wird die Transaktion zurückgesetzt und der Zwischenspeicher mit den Aktualisierungen bleibt unverändert. Im diesem Fall sollten Sie die Aktualisierungsfehler mit dem Ereignis OnUpdateError einer Datenmenge behandeln. Weitere Informationen zur Behandlung von Aktualisierungsfehlern finden Sie unter Fehlerbehandlung bei der zwischengespeicherten Aktualisierung.
Der wesentliche Vorteil beim Aufruf der Methode ApplyUpdates einer Datenbankkomponente besteht darin, dass Sie jede beliebige Anzahl von Datenbankkomponente aktualisieren können, die mit der Datenbank verbunden sind. Die Parameter für die Methode ApplyUpdates für eine Datenbank ist ein Array von TDBDataSet. Der folgende Code wendet beispielsweise die Aktualisierungen für zwei Abfragen an:
if not (Database1.IsSQLBased) and not (Database1.TransIsolation = tiDirtyRead) then Database1.TransIsolation := tiDirtyRead; Database1.ApplyUpdates([CustomerQuery, OrdersQuery]);
TDBDataSet* ds[] = {CustomerQuery, OrdersQuery}; if (!Database1->IsSQLBased && Database1->TransIsolation != tiDirtyRead) Database1->TransIsolation = tiDirtyRead; Database1->ApplyUpdates(ds,1);