FireDAC.Comp.DataSet.TFDDataSet.RefreshRecord

提供: RAD Studio API Documentation
移動先: 案内検索

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 イベント ハンドラが割り当てられている場合、ARequestarFetchRow の値を持っている状態で呼び出されます。
  • イベント ハンドラが割り当てられていない、もしくは、AActioneaDefault 値を持っている状態で返された場合:
    • 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.RefreshDeleteTrue であればレコードはデータセットから削除されるか、そうでなければ例外が発生します。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;

関連項目