Die Apply-Methode aufrufen
Nach oben zu Mehrere Aktualisierungsobjekte verwenden - 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.
Die Methode Apply für eine Aktualisierungskomponente wendet Aktualisierungen für den aktuellen Datensatz manuell an. Dieser Prozess findet in zwei Schritten statt:
- Ursprüngliche und bearbeitete Feldwerte für den Datensatz werden in der entsprechenden SQL-Anweisung zu Parametern gebunden.
- Die SQL-Anweisung wird ausgeführt.
Rufen Sie die Methode Apply auf, um die Aktualisierung für den aktuellen Datensatz im Update-Zwischenspeicher vorzunehmen. Die Methode Apply wird größtenteils von einer Behandlungsroutine für das OnUpdateRecord-Ereignis der Datenmenge aufgerufen, oder aus der BeforeUpdateRecord-Ereignisbehandlungsroutine eines Providers.
Warnung: Falls Sie die Eigenschaft UpdateObject der Datenmenge verwenden, um die Datenmenge und das Aktualisierungsobjekt einander zuzuordnen, wird Apply automatisch aufgerufen. In diesem Fall sollten Sie Apply nicht in OnUpdateRecord-Ereignisbehandlungsroutinen aufrufen, weil damit ein zweiter Versuch erfolgt, eine Aktualisierung für den aktuellen Datensatz vorzunehmen.
OnUpdateRecord-Ereignisbehandlungsroutinen geben mit einem UpdateKind
-Parameter des Typs TUpdateKind den Typ der Aktualisierung an, die angewendet werden soll. Sie übergeben diesen Parameter der Methode Apply, um festzulegen, welche SQL-Aktualisierungsanweisung verwendet werden soll. Das folgende Beispiel demonstriert dies unter Verwendung einer BeforeUpdateRecord-Ereignisbehandlungsroutine:
procedure TForm1.BDEClientDataSet1BeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet;
DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean);
begin
with UpdateSQL1 do
begin
DataSet := DeltaDS;
DatabaseName := (SourceDS as TDBDataSet).DatabaseName;
SessionName := (SourceDS as TDBDataSet).SessionName;
Apply(UpdateKind);
Applied := True;
end;
end;
void __fastcall TForm1::BDEClientDataSet1BeforeUpdateRecord(TObject *Sender,
TDataSet *SourceDS, TCustomClientDataSet *DeltaDS, TUpdateKind UpdateKind, bool &Applied)
{
UpdateSQL1->DataSet = DeltaDS;
TDBDataSet *pSrcDS = dynamic_cast<TDBDataSet *>(SourceDS);
UpdateSQL1->DatabaseName = pSrcDS->DatabaseName;
UpdateSQL1->SessionName = pSrcDS->SessionName;
UpdateSQL1->Apply(UpdateKind);
Applied = true;
}