表示: Delphi C++
表示設定

レコードをリフレッシュする

提供:RAD Studio XE2
移動: 案内, 検索

クライアント データセットの使い方:インデックス への移動

クライアントデータセットで扱うデータは,ソースデータセットからのメモリ上のデータのスナップショットです。ソースデータセットがサーバーデータを表す場合は,時間の経過とともにほかのユーザーがそのデータを変更することもあります。クライアントデータセット内のデータは,ますます元データから離れて行きます。

ほかのデータセットと同様クライアントデータセットには,サーバー上の現在値と一致するようにレコードを更新する 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();
}


関連項目

以前のバージョン
他言語版