FireDAC.Comp.DataSet.TFDDataSet.RefreshRecord

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

function RefreshRecord(AClearRow: Boolean = True): Boolean;

C++

bool __fastcall RefreshRecord(bool AClearRow = true);

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
function public
FireDAC.Comp.DataSet.pas
FireDAC.Comp.DataSet.hpp
FireDAC.Comp.DataSet TFDDataSet


Beschreibung

Liest die Feldwerte erneut aus dem aktuellen Datensatz einer Datenquelle.

Mit RefreshRecord verwerfen Sie alle Änderungen des aktuellen Datensatzes und lesen ihn erneut aus einer Datenquelle. Die ähnliche Methode TDataSet.Refresh ersetzt den gesamten Inhalt der Datenmenge durch erneutes Ausführen der SQL-Anweisung. 

Zum erneuten Lesen des Datensatzes führt FireDAC die folgenden Schritte aus:

  • Wenn die Ereignisbehandlungsroutine OnUpdateRecord zugewiesen ist, dann wird sie mit dem Wert arFetchRow für ARequest aufgerufen.
  • Wenn die Ereignisbehandlungsroutine nicht zugewiesen ist oder AAction mit dem Wert eaDefault zurückgibt, wird Folgendes ausgeführt:
    • Wenn TFDAdaptedDataSet.UpdateObject zugewiesen ist und TFDUpdateSQL.FetchRowSQL nicht leer ist, dann wird diese SQL-Anweisung ausgeführt.
    • Ansonsten generiert FireDAC eine SELECT-Anweisung, die eine einzelne Zeile aus der Datenbank liest und die Anweisung ausführt.
      • Hinweis: Die erzeugte Anweisung lautet: SELECT A.* FROM (<ursprüngliche SQL-Anweisung einfügen>) A WHERE (<Vergleich der Schlüsselfelder>). Daher muss die ursprüngliche SQL-Anweisung mit der erzeugten Anweisung kompatibel sein. Beispielsweise müssen für SQL Server die SELECT-Listenelemente eindeutige Namen haben, ansonsten wird der Fehler "Die Spalte 'Xxx' wurde mehrmals für 'A' angegeben" zurückgegeben.

Wenn die Abfrage der Datenquelle keine Zeilen zurückgibt (z. B. wenn ein Datensatz gelöscht wurde), wird der Datensatz aus der Datenmenge gelöscht, wenn UpdateOptions.RefreshDelete True ist, ansonsten wird eine Exception ausgelöst. Wenn der Parameter AClearRow auf True (Vorgabe) gesetzt ist, dann wird der Datensatz zuerst gelöscht. Ansonsten überschreiben die gelesenen Werte die entsprechenden Spaltenwerte.  

Die Methode gibt True zurück, wenn ein Datensatz aktualisiert wurde. Andernfalls wird False zurückgegeben, wenn ein Datensatz aus der Datenmenge gelöscht wurde.

Beispiel

FDQuery1.UpdateObject := ADUpdateSQL;
// PL/SQL block calling packaged procedure returning customer data by its ID
FDUpdateSQL.FetchRowSQL.Text := 'begin cust_pack.read_cust_data(:new_name, :new_company, :new_state, :old_id); end;';
// Is always required to set up output parameters
with FDUpdateSQL.Commands[arFetchRow] do begin
  Params[0].ParamType := ptOutput;
  Params[0].DataType := ftString;
  Params[1].ParamType := ptOutput;
  Params[1].DataType := ftString;
  Params[2].ParamType := ptOutput;
  Params[2].DataType := ftString;
end;
...
FDQuery1.RefreshRecord;

Siehe auch