Die Query-Eigenschaft einer Aktualisierungskomponente verwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Eine Aktualisierungsanweisung ausführen - 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 Query-Eigenschaft einer Aktualisierungskomponente bietet Zugriff auf die Abfragekomponenten, die deren DeleteSQL-, InsertSQL- und ModifySQL-Anweisungen implementieren. In den meisten Anwendungen ist es nicht nötig, direkt auf diese Abfragekomponenten zuzugreifen: Sie können die Eigenschaften DeleteSQL, InsertSQL und ModifySQL verwenden, um die Anweisungen anzugeben, die diese Abfragen ausführen, und sie ausführen, indem Sie die Methode Apply oder ExecSQL für das Aktualisierungsobjekt aufrufen. Es gibt jedoch Situationen, in denen die Abfragekomponente direkt bearbeitet werden muss. Insbesondere die Eigenschaft Query ist praktisch, wenn Sie eigene Werte für Parameter in den SQL-Anweisungen angeben wollen, statt sich auf die automatische Parameterbindung des Aktualisierungsobjekts zu alten und neuen Feldwerten zu verlassen.

Anmerkung: Die Eigenschaft Query steht nur zur Laufzeit zur Verfügung.

Die Eigenschaft Query ist für einen TUpdateKind-Wert indiziert:

  • Die Verwendung eines Index für ukModify greift auf die Abfrage zu, die existierende Datensätze aktualisiert.
  • Die Verwendung eines Index für ukInsert greift auf die Abfrage zu, die neue Datensätze einfügt.
  • Die Verwendung eines Index für ukDelete greift auf die Abfrage zu, die Datensätze löscht.

Das folgende Beispiel zeigt, wie die Query-Eigenschaft verwendet werden kann, um Parameterwerte bereitzustellen, die nicht automatisch gebunden werden können:

procedure TForm1.BDEClientDataSet1BeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet;
          DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  UpdateSQL1.DataSet := DeltaDS; { für die automatische Parametersubstitution }
  with UpdateSQL1.Query[UpdateKind] do
  begin
    { Sicherstellen, dass die Abfrage die richtigen Werte für DatabaseName und SessionName verwendet}
    DatabaseName := (SourceDS as TDBDataSet).DatabaseName;
    SessionName := (SourceDS as TDBDataSet).SessionName;
    ParamByName('TimeOfUpdate').Value = Now;
  end;
  UpdateSQL1.Apply(UpdateKind); { jetzt automatische Substitutionen vornehmen und ausführen }
  Applied := True;
end;
void __fastcall TForm1::BDEClientDataSet1BeforeUpdateRecord(TObject *Sender,
   TDataSet *SourceDS, TCustomClientDataSet *DeltaDS, TUpdateKind UpdateKind, bool &Applied)
{
  UpdateSQL1->DataSet = DeltaDS; // ür die automatische Parametersubstitution
  TQuery *pQuery = UpdateSQL1->Query[UpdateKind]; // access the query
  // Sicherstellen, dass Abfrage die richtigen Werte für DatabaseName und SessionName hat
  TDBDataSet *pSrcDS = dynamic_cast<TDBDataSet *>(SourceDS);
  pQuery->DatabaseName = pSrcDS->DatabaseName;
  pQuery->SessionName = pSrcDS->SessionName;
  // Werte benutzerdefinierter Parameter ersetzen
  pQuery->ParamByName("TimeOfLastUpdate")->Value = Now();
  UpdateSQL1->Apply(UpdateKind); // Jetzt automatische Ersetzung durchführen
  Applied = true;
}

Siehe auch