FireDAC.Comp.DataSet.TFDDataSet.RefreshRecord
Delphi
function RefreshRecord(AClearRow: Boolean = True): Boolean;
C++
bool __fastcall RefreshRecord(bool AClearRow = true);
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
function | public | FireDAC.Comp.DataSet.pas FireDAC.Comp.DataSet.hpp |
FireDAC.Comp.DataSet | TFDDataSet |
説明
現在のレコードのフィールド値を、データソースから再度読み込みます。
RefreshRecord を使用すると、現在のレコードでの変更をすべて破棄し、データソースから再度読み込みます。同様のメソッド、TDataSet.Refresh では、SQL コマンドを再実行することで、データセットのすべてのコンテンツを置き換えます。
レコードを再読み込みする際、FireDAC は、次の一連のステップを実行します:
- OnUpdateRecord イベント ハンドラが割り当てられている場合、
ARequest
がarFetchRow
の値を持っている状態で呼び出されます。 - イベント ハンドラが割り当てられていない、もしくは、
AAction
がeaDefault
値を持っている状態で返された場合:- TFDAdaptedDataSet.UpdateObject が割り当てられており、TFDUpdateSQL.FetchRowSQL が空ならば、この SQL コマンドが実行されます。
- そうでなければ、FireDAC は
SELECT
コマンドを生成し、単一の行をデータベースから再読み込みし、コマンドを実行します。- メモ: 生成されたコマンドは
SELECT A
.* FROM
(<insert original SQL command>)A WHERE
(<key fields comparison>) です。このため、元の SQL コマンドは、生成されたコマンドと互換性がなければなりません。たとえば、SQL Server では、SELECT
リストの項目に一意の名前を付けなければなりません。そうでなければ、エラー "The column 'Xxx' was specified multiple times for 'A'"(「列 'Xxx'は 'A'に複数回指定されました」) が返されます。
データソースへのクエリが行を返さなかった場合(たとえば、そのレコードが削除されていたなど)、UpdateOptions.RefreshDelete が True であればレコードはデータセットから削除されるか、そうでなければ例外が発生します。AClearRow
パラメータが True(デフォルト値)に設定されている場合、レコードは初期に消去されます。そうでなければ、読み込みの値は対応する列の値で上書きされます。
メソッドは、レコードがリフレッシュされた場合、True を返します。そうでなければ、データセットから削除されている場合、False を返します。
例
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;