FireDAC.Comp.DataSet.TFDDataSet.RefreshRecord
Delphi
function RefreshRecord(AClearRow: Boolean = True): Boolean;
C++
bool __fastcall RefreshRecord(bool AClearRow = true);
Inhaltsverzeichnis
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ürARequest
aufgerufen. - Wenn die Ereignisbehandlungsroutine nicht zugewiesen ist oder
AAction
mit dem WerteaDefault
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 dieSELECT
-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;