レコードのリフレッシュ

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

ソース データセットに渡すパラメータの指定 への移動


クライアント データセットが扱うデータは、ソース データセットから取得したデータのメモリ内スナップショットです。ソース データセットがサーバー データである場合、そのうちに他のユーザーがそのデータを変更することがあります。そうすると、クライアント データセット内のデータは、ソース データセットのデータを正確に反映したものではなくなります。

他のデータセットと同様に、クライアント データセットにも Refresh メソッドがあり、サーバー上の現在の値に合わせてレコードを更新することができます。ただし、Refresh を呼び出しても問題がないのは、変更ログに編集が含まれていない場合だけです。まだ適用されていない編集があるときに Refresh を呼び出すと、例外が発生します。

クライアント データセットでは、変更ログをそのまま残してデータを更新することもできます。その場合は、RefreshRecord メソッドを呼び出します。Refresh メソッドとは違って、RefreshRecord はクライアント データセット内の現在のレコードだけを更新します。RefreshRecord は、レコードのうち、プロバイダから取得したままになっている値は変更しますが、変更ログに含まれる変更はそのまま残します。

警告: RefreshRecord を呼び出すのが常に適切であるとは限りません。ユーザーの編集と、別のユーザーが元のデータセットに対して行った編集とが競合する場合、RefreshRecord を呼び出すとその競合が隠されてしまいます。クライアント データセットが更新を適用しても、調停エラーは発生せず、アプリケーションで競合を解決することができません。

更新エラーが隠れてしまわないよう、RefreshRecord を呼び出す前に、未処理の更新がないことを確認することができます。たとえば次の AfterScroll では、ユーザーが次のレコードに移動すると現在のレコードを更新して最新の値にしていますが、それを行うのは、そうしても安全な場合だけです。

procedure TForm1.ClientDataSet1AfterScroll(DataSet: TDataSet);
begin
  if ClientDataSet1.UpdateStatus = usUnModified then
    ClientDataSet1.RefreshRecord;
end;
void __fastcall TForm1::ClientDataSet1AfterScroll(TDataSet *DataSet)
{
  if (ClientDataSet1->UpdateStatus == usUnModified)
    ClientDataSet1->RefreshRecord();
}

関連項目